0

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){.....}
4

3 に答える 3

3

clicked は、マウスを押したときではなく、マウスを離した後に出力されるため、0 になります。何を達成したいですか?おそらく、ウィジェット contextMenuPolicy の設定をカスタムにしてみて、contextMenuRequested (右クリックの場合) に接続し、左クリックの場合はクリックしますか?

于 2010-06-22T06:32:20.477 に答える
1

「接続」には次を使用します。

connect(moduleTree,SIGNAL(itemClicked(QTreeWidgetItem *,int )),this
        ,SLOT(SlotItemClicked(QTreeWidgetItem *, int)));

グローバルフラグを定義します。

public:
Qt::MouseButton mouseClickedBtnFlag;

次に、「mouseReleaseEvent」を再実装します。

CGuiMainwindow::mouseReleaseEvent ( QMouseEvent * event )
{
mouseClickedBtnFlag = event->button();
}

その後:

void CGuiMainwindow::SlotItemClicked(QTreeWidgetItem *item, int column)
{    
 if (mouseClickedBtnFlag == Qt::LeftButton)              
 { return; }              

 if (mouseClickedBtnFlag == Qt::RightButton)              
 {              
    ......              
 }
}
于 2010-07-18T10:37:28.967 に答える
-1

Qt::MouseButtonsQFlagsタイプです。==オペレーターでテストすることはできません。&テストに演算子を使用します。

if(QApplication::mouseButtons() & Qt:LeftButton) {
...
}
于 2010-06-22T04:38:01.563 に答える