結果を表示するために使用するプログラムに 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()));
これは、コンパイル時に既知のオブジェクトに接続しているのに対し、他のオブジェクトは実行時まで不明なオブジェクトに接続しているためですか?