我有一個Qt的問題,即時通訊只試圖在一個特定的熱鍵被按下時調用一次QDialog,但我不斷收到多個QDialog。 我試圖當按下熱鍵時顯示一個對話框實例
private:
ProductsDlg * pd;
MainWindow.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setCentralWidget(ui->MainTabWidget);
setFixedHeight(481);
setFixedWidth(335);
RegisterHotKey(HWND(winId()) , 0 , NULL , VK_F9);
//pd = new ProductsDlg(this); // I USED THIS TO TRY if(pd->isVisible()) Down in the Hotkey press Event.
}
bool MainWindow::nativeEvent(const QByteArray &eventType , void *message , long *result)
{
Q_UNUSED(eventType);
Q_UNUSED(result);
MSG * msg = static_cast<MSG*>(message);
if(msg->message == WM_HOTKEY)
{
if(!pd)
{
pd = new ProductsDlg(this);
pd->show();
}
}
}
我知道即時做錯了什麼,因爲在我這一個崩潰關閉QDialog的,我再次按下熱鍵。 我試過如果(!pd-> isVisible())在Hotkey事件上,但並沒有真正做任何事情。 當QDialog關閉時,全局「dp」是否被刪除? BTW即時通訊使用setAttribute(Qt :: WA_DeleteOnClose);在那個QDialog上,如果這影響了任何事情。
編輯:我正在考慮一種方法只創建一次QDialog,只是顯示它並隱藏它時,熱鍵被稱爲,但我不知道如何完成,我仍然崩潰。
感謝
'pd'在關閉後會保留一個指向舊的'QDialog'的指針,'if(!pd)'只會在第一次爲真。 。 。 – Mike
您可以使用'QShortcut'而不是WinAPI。 –
@Mike,是的,這是我最初的想法,圍繞它的任何解決方案?我試過使用一個變量設置爲FALSE當QDialog關閉時(QDialog的析構函數將其設置爲false時,它調用),但沒有,我不喜歡這種方法。 – Zylva