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()重新确定子窗口的位置和尺寸。这是个比较笨的法子 。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt,可以使用多种方式来实现多个窗口之间的布局,下面介绍几种常见的方式: 1. 使用QMainWindow和QDockWidget实现窗口和浮动窗口布局: QMainWindow是一个带有菜单栏、工具栏、状态栏的窗口,可以通过设置QDockWidget实现浮动窗口布局。可以通过以下代码来实现: ``` QMainWindow *mainWindow = new QMainWindow(); QDockWidget *dockWidget1 = new QDockWidget("Dock Widget 1", mainWindow); QDockWidget *dockWidget2 = new QDockWidget("Dock Widget 2", mainWindow); mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget1); mainWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget2); mainWindow->setCentralWidget(new QWidget(mainWindow)); mainWindow->show(); ``` 2. 使用QStackedWidget实现多个窗口之间的切换: QStackedWidget是一个可以容纳多个QWidget的容器,可以通过setCurrentIndex()方法来切换显示的QWidget。可以通过以下代码来实现: ``` QStackedWidget *stackedWidget = new QStackedWidget(); QWidget *widget1 = new QWidget(); QWidget *widget2 = new QWidget(); stackedWidget->addWidget(widget1); stackedWidget->addWidget(widget2); stackedWidget->setCurrentIndex(0); stackedWidget->show(); ``` 3. 使用QTabWidget实现多个窗口之间的切换: QTabWidget是一个可以容纳多个QWidget的容器,可以通过添加QTabWidget的方式来切换显示的QWidget。可以通过以下代码来实现: ``` QTabWidget *tabWidget = new QTabWidget(); QWidget *widget1 = new QWidget(); QWidget *widget2 = new QWidget(); tabWidget->addTab(widget1, "Tab 1"); tabWidget->addTab(widget2, "Tab 2"); tabWidget->show(); ``` 以上是Qt常见的几种多个窗口之间的布局方式,根据实际需求选择合适的方式即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值