Вопрос

Я студент-разработчик, использующий Qt для создания графического пользовательского интерфейса, помогающего пользователям отображать определенные столбцы данных, расположенные в нескольких файлах.Функция, которую я настраиваю, позволяет пользователям выбирать файл с помощью кнопки в каждой строке.Таким образом, изначально на кнопке будет написано «Обзор», а затем пользователь нажимает ее, чтобы открыть диалоговое окно для выбора файла, после чего текст кнопки заменяется выбранным именем файла.Извините за историю;моя простая попытка внести некоторую ясность.

Проблема, с которой я столкнулся, заключается в том, что я не знаю, как настроить политику для нажатия кнопки.Я предполагаю, что мне придется расширить функциональность каждого QPushButton, но я не знаю, как это сделать.До сих пор я использую следующее для установки виджета ячейки.

//with row count set dimensions are set becasue column count is static
    //begin bulding custom widgets/QTableWidgetItems into cells
    for(int x = 0; x < ui->tableWidgetPlotLineList->rowCount(); x++)
    {
        for(int y = 0; y < ui->tableWidgetPlotLineList->columnCount(); y++)
        {
            if(y == 1)
            {
                //install button widget for file selection
                QPushButton *fileButton = new QPushButton();
                if(setDataStruct.plotLineListData.at(rowCount).lineFileName != "");
                {
                    fileButton->setText(setDataStruct.plotLineListData.at(rowCount).lineFileName);
                }
                else
                {
                    fileButton->setText("Browse...");
                }
                ui->tableWidgetPlotLineList->setCellWidget(x, y, fileButton);
            }

Я думал, что

connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));

может помочь, но я думаю, что, вероятно, иду в неправильном направлении.Честно говоря, я даже не совсем уверен, куда это приведет...

Большое спасибо за прочтение моего поста.Пожалуйста, дайте мне знать, если в этом посте чего-то не хватает, и я немедленно обновлю его.Я также хотел бы заранее поблагодарить всех, кто внес свой вклад в этот пост!

Это было полезно?

Решение

connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));

Не является синтаксически правильным для соединения сигнала/слота.Более уместно было бы что-то вроде этого:

connect(fileButton, SIGNAL(clicked()), this, SLOT(selectPlotLineFile(x));

...

Если вам нужен доступ к конкретной кнопке, которая emitРед. clicked() сигнал, чем вы могли бы использовать sender() функция в вашем слоте:

void selectPlotLineFile() {
    QPushButton *button = dynamic_cast<QPushButton*>( sender() )
}

Теперь вам может быть интересно, как узнать, над какой строкой работать.Существует несколько различных подходов, один из самых простых – поддерживать QMap<QPushButton*, int> переменная-член, которую можно использовать для поиска, какая кнопка принадлежит какой строке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top