将QTableWidget内的QPushButtons捕获/连接到函数

时间:2012-07-29 17:39:15

标签: qt signals connect qtablewidget qtablewidgetitem

我是一名学生开发人员,他使用Qt构建GUI来帮助用户绘制位于多个文件中的特定数据列。我正在设置的功能允许用户使用每行中的按钮选择文件。因此,按钮最初会说浏览,然后用户单击它以打开对话框以选择文件,然后按钮文本将替换为所选的文件名。抱歉这个故事;我简单地试图增加一些清晰度。

我遇到的问题是我不确定如何为点击的按钮设置策略。我想我必须扩展每个QPushButtons的功能,但我真的不知道该怎么做。到目前为止,我使用以下内容来设置单元格小部件。

//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));

可能会成功,但我想我可能会走错方向。老实说,我甚至不确定它会去哪里......

非常感谢阅读我的帖子。如果这篇文章中缺少任何内容,请告诉我,我会立即更新。我还要提前感谢对此帖的任何贡献!

1 个答案:

答案 0 :(得分:2)

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>成员变量,您可以使用它来查找哪个按钮属于哪一行。