1

QSystemTrayIcon に QMenu があります。どちらも QMainWindow オブジェクトのメンバーです。

QSystemTrayIcon の QMenu が、右クリック時 (QSystemTrayIcon::Context の理由) と左クリックの 1 回 (QSystemTrayIcon::Trigger の理由) がまったく同じように動作するようにします。

デフォルトでの右クリック動作は、私が望むように機能します。ただし、左クリックを右クリックとまったく同じように機能させる方法がわかりません。これまでの私の努力は次のことにつながります。

 void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
 {
     if(reason==QSystemTrayIcon::Trigger)  trayIcon->contextMenu()->popup(QCursor::pos());
 }

ただし、フォーカスを失ってもメニューは消えませんが、右クリックでコンテキストメニューを表示すると、フォーカスが失われたときにメニューが消えます。

トリガーをコンテキストのように機能させる方法はありますか? たぶん、モック信号か何かを投げる方法ですか?

4

2 に答える 2

1

まあ、私は同じことをする必要があり、純粋なQtコードでそれをきれいに行う方法を理解できませんでした.

void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason)
    {
    case QSystemTrayIcon::Trigger:
    case QSystemTrayIcon::DoubleClick:
    case QSystemTrayIcon::MiddleClick:
        {
            POINT p;
            GetCursorPos(&p);
            HWND hwnd = WindowFromPoint(p);
            ScreenToClient(hwnd, &p);
            PostMessageA(hwnd, WM_RBUTTONDOWN, MK_RBUTTON, MAKELONG(p.x, p.y));
            PostMessageA(hwnd, WM_RBUTTONUP, 0, MAKELONG(p.x, p.y));
        }
        break;
    case QSystemTrayIcon::Context:
        show();
        setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
        mTrayIcon->contextMenu()->popup(QCursor::pos());
        break;
    default:
        break;
    }
}
于 2013-10-17T19:22:07.663 に答える