qt 主窗口中排列多个子窗口的布局问题

       笔者原本以为这是个很容易的问题,早期的想法是在主窗口中使用布局管理器。只能说想法太简单。如果在窗口中放置一般的由QWidget派生出的部件,如QPushButton,QTextEdit等,这自然是可以办到的。但是如果在主窗口中放置QMainWindow,QDialog这样的子窗口,布局管理器就没什么办法。这样放置的结果是这些窗口嵌入到主窗口中了,但是没有标题栏以及最大最小化按钮等边框部分,这应该是QT布局管理器的默认设置。QMainWindow,QDialog的标题栏以及最大最小化按钮等边框部分的显示与否与flag有关: Qt::Window |Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint | Qt::WindowTitleHint;只有当Window是一个顶级Window的时候,后面的几个属性才有意义,才有效果。

       关于 Qt::Window这个属性在博友的文章http://blog.csdn.net/dbzhang800/article/details/6737540中有详细表述。

      笔者的考虑是,一旦设置QMainWindow的Qt::Window属性,它所在布局管理器就无效了。

       因此,笔者使用了比较常规的方法:精确定位。

      先获取通过主窗口的pos(),frameGeometry(), weight(),height()等属性,使用move(),setResize()来设置子窗口的位置和尺寸,为了保证子窗口跟随主窗口变化,在主窗口的事件管理器showEvent()和resizeEvent()中分别使用move(),setResize()重新确定子窗口的位置和尺寸。这是个比较笨的法子 。

你可能感兴趣的:(QT)