0

我是一名学生开发人员,使用 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));

可能会奏效,但我认为我可能在这里走错了方向。老实说,我什至不太确定它会去哪里......

非常感谢您阅读我的帖子。请让我知道这篇文章是否缺少任何内容,我会立即更新。我还要提前感谢对这篇文章的任何贡献!

4

1 回答 1

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

于 2012-07-29T18:58:14.730 回答