【问题标题】:C++, add/remove rows from a QTableWidgetC++,从 QTableWidget 添加/删除行
【发布时间】:2011-02-07 11:23:50
【问题描述】:

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

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

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

如何实现行插入?

【问题讨论】:

    标签: c++ qt4 qtablewidget


    【解决方案1】:

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

    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);
    /* ..... */
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-27
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2013-02-06
        • 2023-03-29
        相关资源
        最近更新 更多