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 つのパラメーターを持つスロットに信号を接続することです。これは 2 つの理由で間違っています: そのようなスロットがなく、"1" は有効なタイプ名ではありませんとりあえず。

また、QTableWidget::insertRow()は、ドキュメントのパブリック スロット グループにリストされているスロットです。したがって、シグナルをそれに接続できますが、シグネチャが一致するためには、シグナルに int 引数が必要です。

于 2011-02-07T11:45:10.440 に答える