qt Dialog show()之后未显示

xyconly 2014-11-27 05:39:59
类A:class A: public QMainWindow   {private: B}
类B:class B: public QWidget {private: C}
类C:class C: public QDialog {private: QProgressBar}


在类A中创建类B实例,
调用类B函数B::CallC,使C.show();

但调试下来发现C窗口未显示出来.改为exec()后能正常显示


void A::CallB()
{
B::CallC();//含代码C::show();无法正常显示,改为C::exec()则能正常显示
B::other();//较占内存,花费时间>2s
}
...全文
3239 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
l4kangaxx 2014-12-16
  • 打赏
  • 举报
回复
能贴出代码来么?
xyconly 2014-12-15
  • 打赏
  • 举报
回复
引用 3 楼 liuyuanmei 的回复:
你将CallC()函数内的显示控件通过new出来再调用XX->show(),不是将B::CallC();为B->CallC();
类A,类B,类C,进度条均为指针形式,在调用前均会new,并且指明其父,
xyconly 2014-12-15
  • 打赏
  • 举报
回复
引用 3 楼 liuyuanmei 的回复:
你将CallC()函数内的显示控件通过new出来再调用XX->show(),不是将B::CallC();为B->CallC();
不管是show或者exec,均是通过指针的形式进行调用,并且在B不被释放时,A也不会被释放(断点打在析构函数处,并未被析构),有没有可能由于B::other()太占内存,导致进度条部件被忽略掉了?
liuyuanmei 2014-12-09
  • 打赏
  • 举报
回复
你将CallC()函数内的显示控件通过new出来再调用XX->show(),不是将B::CallC();为B->CallC();
xyconly 2014-12-01
  • 打赏
  • 举报
回复
引用 1 楼 liuyuanmei 的回复:
B::CallC();//含代码C::show();无法正常显示,改为C::exec()则能正常显示 1、你是在堆中定义的窗口,函数执行完毕自然就会释放掉;如果你是通过new出来的窗口,就不会出现这种问题,直到你释放。 2、show():显示一个非模式对话框。控制权即刻返回给调用函数。exec(): 显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。
抱歉,回复的晚了,之前也是这么想的,但是打入断点后发现在未释放前也没有显示出来,改为指针后也是同样的效果
liuyuanmei 2014-11-27
  • 打赏
  • 举报
回复
B::CallC();//含代码C::show();无法正常显示,改为C::exec()则能正常显示 1、你是在堆中定义的窗口,函数执行完毕自然就会释放掉;如果你是通过new出来的窗口,就不会出现这种问题,直到你释放。 2、show():显示一个非模式对话框。控制权即刻返回给调用函数。exec(): 显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧