我在Qt应用程序中有一个简单的用例:
构建UI并填充QGraphicsView
(或任何其他QWidget
)后,根据图形视图的宽度和高度(或任何图形视图)将图形视图滚动到给定位置布局引擎设置的其他属性。
然而,我无法找到一个可靠或已知的地方来做到这一点。在构造函数中,布局尚未应用,因此宽度不是用户在UI“up”时看到的最终宽度。大多数建议似乎包括黑客,如:
QTimer::singleShot(0, this, SLOT(initWidget()));
在我的情况下,这似乎不起作用,除非我将延迟设置为大约10毫秒,这似乎更冒险和hacky。当然必须有类似win32的WM_INITDIALOG
之类的东西?
答案 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。