0

結果を表示するために使用するプログラムに QTableWidget があり、ユーザーが垂直ヘッダーのいずれかをシングルクリックしたことを検出できるようにしようとしています。これを行うために、信号 sectionDoubleClicked(int) を関数 hheaderclicked(int) に接続しようとしています。コードをコンパイルしようとすると、一致する関数がないというコンパイル時エラーが発生します。ここの投稿からコードを基にしています

コンパイル エラー:

mainwindow.cpp:138: error: no matching function for call to âMainWindow::connect(QHeaderView*, const char [27], MainWindow* const, const char [21])â
/usr/lib64/qt4/include/QtCore/qobject.h:181: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/usr/lib64/qt4/include/QtCore/qobject.h:282: note:                 bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const

私のコード:

QObject::connect(ui->table_results->horizontalHeader(),SIGNAL(sectionDoubleClicked(int)),
              this,SLOT(hheaderclicked(int)));

編集:次のようにして、コードを機能させることができました。

QObject::connect((QObject*)ui->table_results->verticalHeader(),SIGNAL(sectionClicked(int)),this,SLOT(hheaderclicked(int)));

これを機能させるために QHeaderView* を QObject* にキャストしなければならなかった理由を誰かが説明できますか?他の QObject::connect 呼び出しをキャストする必要はなく、すべて正常に動作します。たとえば、これはうまくいきます:

QObject::connect(ui->button_start,SIGNAL(clicked()),this,SLOT(scanstart()));

これは、コンパイル時に既知のオブジェクトに接続しているのに対し、他のオブジェクトは実行時まで不明なオブジェクトに接続しているためですか?

4

1 に答える 1

1

エラー メッセージでは、3 番目の引数が と表示されますがMainWindow* const、これはかなり奇妙です。だった場合const MainWindow*、呼び出しは機能するはずです。呼び出し関数はどのように宣言されていますか?

于 2011-04-18T21:08:09.023 に答える