1

我正在创建一个带有表格和“添加行”按钮的简单应用程序。使用 Qt Creator 我想我可以做这样的事情:

QObject::connect(ui->addRowButton, SIGNAL(clicked()),
                     ui->moneyTableWidget, SLOT(insertRow(1)));

但我不能。我对 Qt 真的很陌生,我可能是错的,但我认为问题在于 insertRow 不是 QTableWidget 的 SLOT 方法......

如何实现行插入?

4

2 回答 2

6

在类的方法中插入行。试试这个

class TableDialog : public QDialog
{
    Q_OBJECT
public:
    TableDialog(QWidget *parent = 0);
private slots:
    void addRow();
private:
    QTableWidget *tableWidget;
    QDialogButtonBox *buttonBox;
};

以及(部分)实现:

TableDialog::TableDialog(QWidget *parent) : QDialog(parent) {
tableWidget = new QTableWidget(10, 2);
/* ..... */
connect(addRowButton, SIGNAL(clicked()), this, SLOT(addRow()));

/* ..... */
}

void TableDialog::addRow() {
    int row = tableWidget->rowCount();
    tableWidget->insertRow(row);
/* ..... */
}
于 2011-02-07T11:32:40.297 回答
1

SLOT() 宏的参数是仅具有参数类型的方法签名。它不能包含要传递给插槽的参数名称或实际参数。这就是为什么您需要一个额外的插槽来执行此操作,根据 nc3b 的回答。您的代码试图做的是将信号连接到一个具有类型“1”的参数的插槽,这有两个原因是错误的:您没有这样的插槽并且“1”不是有效的类型名称反正。

此外,QTableWidget::insertRow()一个插槽,因为它在文档的公共插槽组中列出。因此,您可以将信号连接到它,但信号需要有一个 int 参数才能使签名匹配。

于 2011-02-07T11:45:10.440 回答