C ++,在QTableWidget中添加/删除行

时间:2011-02-07 11:23:50

标签: c++ qt4 qtablewidget

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

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

但我不能。我是QT的新手,我可能错了,但认为问题是insertRow不是QTableWidget的SLOT方法......

如何实现行插入?

2 个答案:

答案 0 :(得分: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);
/* ..... */
}

答案 1 :(得分:1)

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

此外,QTableWidget :: insertRow()一个插槽,因为它在文档中的the public slots group中列出。所以你可以连接一个信号,但是信号需要有一个int参数才能使签名匹配。