QMainWindow があり、その中の小さなウィジェット (テーブルビューなど) からの「クリックされた」信号を処理したいと考えています。
もともと、この QMainWindow のスロットに信号を接続していましたが、これが最も一般的な方法です。ここで、どのマウス ボタンがクリックされたかを確認し、左ボタンと右ボタンで異なる処理を行う必要があります。「クリックされた」信号にマウス イベント情報がないことがわかりました。
「mousePressEvent」関数を実装しようとしましたが、まだ問題があります。マウス アクションが小さいウィジェットで実行された場合、MainWindow はその mousePressEvent に入りません。
一部のドキュメントでは、QQApplication::mousebuttons() によってボタンを伝えることができると書かれています
http://bugreports.qt-project.org/browse/QTBUG-1067
サンプルコードも見つけました。ただ、これは「プレスイベント」用なのですが、「クリックイベント」用のマウスボタンを取得したいです。サンプルコードは次のとおりです。
connect(moduleTree,SIGNAL(itemPressed(QTreeWidgetItem *, int)),this,SLOT(SlotItemClicked(QTreeWidgetItem *, int)));
void CGuiMainwindow::SlotItemClicked(QTreeWidgetItem *item, int column)
{
if (qApp->mouseButtons() == Qt::LeftButton)
{ return; }
if (qApp->mouseButtons() == Qt::RightButton)
{
......
}
}
これを実行しようとすると、2 つの if ステートメントのどちらも満たされないので、理由がわかりません。qApp->mouseButtons() は常に 0 を返します。QApplication::mouseButtons でクリックされたマウス ボタンを取得するにはどうすればよいですか?
私のコードでは、スロットは次のようになります。
void clickItem( const QModelIndex & idx){.....}