我有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-&gt; isVisible())关于Hotkey事件,但也没有做任何事情。 全球&#34; dp&#34; QDialog关闭时被删除? BTW即时使用setAttribute(Qt :: WA_DeleteOnClose);在那个QDialog上,如果这会影响任何事情。
编辑:我正在考虑一种只创建QDialog的方法,只需显示它并在调用Hotkey时隐藏它,但我无法看到它是如何完成的,我仍然会崩溃。由于
答案 0 :(得分:0)
我刚刚使用了Show / Hide方法,它对我有用...我认为我的问题是围绕使用一个全局对象并多次使用它,知道在QDialog关闭时它将被删除,以便@Mike说!dp仅适用于第一次。
由于我的QDialog是无框架的,因为它也被热键关闭,所以我使用了隐藏而不是关闭它。
if(!dp->isVisible())
{
dp->show();
}
else
{
dp->hide();
}
这就是我所需要的(相同的热键显示和隐藏)。
感谢您的所有答案!