Qt如何捕获指示所有GUI元素都准备就绪的事件

7

我想知道是否有可能捕获所有Qt对象初始化并准备就绪时生成的事件?

似乎有些事情不能在窗口构造函数中完成,但在slot实现中可以正常工作。

例如,当我想访问我的应用程序的根窗口时,我会这样做

// in *.h
MainWindow* rootWindow

// in *.cpp
rootWindow = qobject_cast<MainWindow *>(this->window());

如果在构造函数中完成,我将无法使用rootWindow对象 - 这会导致运行时错误。
没有相关的插槽可以实现。而且QMainWindow类中的创建事件不是虚拟的。
感谢您的帮助 :)

你将你的小部件转换成什么? - Eugene
这是我的主窗口类,基于QMainWindow。它是当前类的属性,是主窗口的子级。 - user660975
2个回答

10
您可以使用单次定时器来实现此操作。在您的主窗口类中定义一个名为say的槽函数,appReady()。在构造函数中,使用QTimer::singleShot(0, this, SLOT(appReady()));创建并连接一个单次定时器。此定时器应在事件循环启动并且没有其他启动事件未决时立即触发。

0

你怎么确定根窗口实际上是MainWindow?在项目的后期,你可能会将小部件提供给不同的父级(例如几层QFrame装饰用于布局目的),这段代码将失败。

最好在构造函数中将其作为显式参数传递。

除非一直都是MainWindow :)


我的表单是在QtCreator的GUI设计器中构建的。我认为我不能改变对象创建的方式。使用"升级至"机制,我认为这是不可能的。 - user660975

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接