Qt - UI何时完成初始化?那么可以设置滚动条位置等吗?

时间:2014-02-24 23:38:07

标签: qt qt5

我在Qt应用程序中有一个简单的用例:

构建UI并填充QGraphicsView(或任何其他QWidget)后,根据图形视图的宽度和高度(或任何图形视图)将图形视图滚动到给定位置布局引擎设置的其他属性。

然而,我无法找到一个可靠或已知的地方来做到这一点。在构造函数中,布局尚未应用,因此宽度不是用户在UI“up”时看到的最终宽度。大多数建议似乎包括黑客,如:

QTimer::singleShot(0, this, SLOT(initWidget()));

在我的情况下,这似乎不起作用,除非我将延迟设置为大约10毫秒,这似乎更冒险和hacky。当然必须有类似win32的WM_INITDIALOG之类的东西?

1 个答案:

答案 0 :(得分:1)

您可以覆盖相关班级的showEvent()resizeEvent()

经过一些实验,因为您说您正在使用showMaximized(),实际上您可能希望覆盖两者,然后在第一个resizeEvent()之后从第一个showEvent()获取大小(或整体第二resizeEvent())。我的测试应用的输出使用了showMaximized()

Starting /home/hyde/test/build-eventTest-Desktop-Debug/eventTest...
resizeEvent size QSize(200, 100) oldSize QSize(-1, -1) 
showEvent geometry QRect(0,0 200x100) 
resizeEvent size QSize(1440, 851) oldSize QSize(640, 480) 
/home/hyde/test/build-eventTest-Desktop-Debug/eventTest exited with code 0

然后做你需要做的事情。如果你只想做一次,那么添加一个布尔成员变量,如

bool mFullyInited;

并将其初始化为false,然后在overriden事件处理程序方法中,测试它并在完成初始化时将其设置为true。