2011-02-07 157 views
1

テーブルと「行を追加」ボタンを使って簡単なアプリケーションを作成しています。 Qt Creatorを使用すると、私は次のようなことができると思いました。C++、QTableWidgetから行を追加/削除する

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

私はできません。私はQtが本当に新しくて間違っているかもしれませんが、問題はinsertRowがQTableWidgetのSLOTメソッドではないと思います...

どのようにして行挿入を行うことができますか?

答えて

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

SLOT()マクロの引数は、引数の型のみのメソッドシグネチャです。スロットに渡す引数名や実際の引数を含むことはできません。だからこそ、nc3bの答えに従って、それを実行するために追加のスロットが必要です。あなたのコードがしようとしているのは、 "1"のタイプが1つのパラメータを持つスロットに信号を接続することです。これは2つの理由で間違っています:スロットがなく、 "1"が有効なタイプ名ではありませんとにかくまた

、QTableWidget ::のinsertRow()は、それがドキュメントにthe public slots groupに記載されているようが、スロットあります。したがって、シグナルをシグナルに接続できますが、シグナルが一致するためにはシグナルにint引数が必要です。

関連する問題