首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建后的QDialog闪回

创建后的QDialog闪回
EN

Stack Overflow用户
提问于 2015-08-10 13:06:13
回答 2查看 425关注 0票数 0

我的QMainWindow上有一个QMainWindow,我把itemDoubleClicked(QListWidgetItem*)信号连接到一个插槽上,如下所示:

代码语言:javascript
复制
connect(listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(popUpMyDialog(QListWidgetItem*)));

我的popUpMyDialog(QListWidgetItem*)函数如下:

代码语言:javascript
复制
QMyDialog *myDialog = new QMyDialog(this);
myDialog->show();

QMyDialog是我从QDialog中固有的一个类,除了ui->setupUi(this);之外,没有做任何操作。

但是当我试图双击QListWidget的项目时,myDialog很快就会闪现并消失。

因此,我试图编写一些代码来判断是否删除了myDialog

代码语言:javascript
复制
QMyDialog *myDialog = new QMyDialog(this);
connect(myDialog, SIGNAL(destroyed(QObject*)), this, SLOT(handleQMyDialogClose(QObject*)));
myDialog->show();

插槽函数handleQMyDialogClose(QObject*)就是这样做的:

代码语言:javascript
复制
qDebug() << "myDialog is closed";

当我双击QListWidget项的项目时,控制台打印myDialog is closed,这意味着myDialog对象被删除了,但是我没有删除指针,所以我感到很困惑。

  1. 我在谷歌上搜索了它,并尝试将setModal属性添加到myDialog,但它没有效果。
  2. 我试图将相同的代码复制到我的Mac上,奇怪的是它运行得很完美。
  3. 我试图像这样在popUpMyDialog(QListWidgetItem*)中添加一个for循环: QMyDialog *myDialog =新QMyDialog( this );连接(myDialog,信号(销毁(QObject*)),此,时隙(handleQMyDialogClose(QObject*));myDialog>show();for(int i= 0;i< 100;++i) {qDebug() << i;} 要阻止线程,并发现myDialog窗口正常工作,但是如果我注释for循环代码,它会再次闪回。

因此,我想知道我的代码发生了什么错误,以及如何处理它。

我的编码环境是:Windows 10Mac OS X 10.10.4 Yosemite,Qt的版本是Qt5.5.0,在我的Windows上,Qt与mingw一起运行。

EN

回答 2

Stack Overflow用户

发布于 2015-08-10 15:18:11

因此,您有以下方法:

代码语言:javascript
复制
void Foo::popUpMyDialog(QListWidgetItem*) {
  QMyDialog *myDialog = new QMyDialog(this);
  myDialog->show();
}

对话框会被过早销毁的唯一原因是如果对话框的子实例Foo被破坏了。

要解决此问题,首先尝试创建一个没有父级的对话框:

代码语言:javascript
复制
void Foo::popUpMyDialog(QListWidgetItem*) {
  QMyDialog *myDialog = new QMyDialog;
  myDialog->show();
}

如果这个对话框仍然可见,那么你就知道你给了它一个错误的,短暂的父母。解决办法是找另一位家长。为了避免对话框泄漏,您可以给对话框一个Qt::WA_DeleteOnClose属性。

票数 2
EN

Stack Overflow用户

发布于 2015-08-10 13:27:45

QDialog有一个“阻止”执行的主管()函数(就像您对循环所做的那样),可以使用而不是show(),这样您的对话框就可以保持可见。这不是你要找的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31920395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档