【问题标题】:Arrange QDockWidgets in QMainWindow in multiple columns将 QMainWindow 中的 QDockWidgets 排列成多列
【发布时间】:2016-09-28 00:55:19
【问题描述】:

我有一个继承自 QMainWindow 的类。在构造函数中,我将Central Widget 设置为NULL,然后添加几个QDockWidgets 以创建一个仅包含QDockWidgets 的用户界面:

UserWidget::UserWidget(QWidget * parent) : QMainWindow(parent)
{
    this->setCentralWidget(NULL);
    // create Widgets for User communication e.g. PushButtons etc.
    // ...
    dockWidget_ = new QDockWidget;
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
    dockWidget->setWidget(userWidget_);
    this->addDockWidget(Qt::RightDockWidgetArea);

现在我添加了另一个 QDockWidget,但我选择了 Qt::LeftDockWidgetArea,而不是 Qt::RightDockWidgetArea

    dockWidget_ = new QDockWidget;
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
    dockWidget->setWidget(userWidget2_);
    this->addDockWidget(Qt::LeftDockWidgetArea);

到这里,我的程序的外观是这样的:

继续添加另一个QDockWidget

    dockWidget_ = new QDockWidget;
    dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);
    dockWidget->setWidget(userWidget3_);
    this->addDockWidget(Qt::LeftDockWidgetArea /* or Qt::RightDockWidgetArea*/);

我最终得到了一个在中间分裂的区域:

但我想将布局分成3列,类似于:

但是,我没有找到任何合适的方法来做到这一点。将该区域设置为Qt::TopDockWidgetAreaQt::BottomDockWidgetArea 都不能提供所需的行为。我真的很感激这里的任何帮助。

【问题讨论】:

    标签: c++ qt user-interface layout qdockwidget


    【解决方案1】:

    你只需要使用函数splitDockWidget()

    void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
    

    在你的情况下,你可以把一个QDockWidget(我们叫他dock1)放在左边,另外两个放在右边(dock2dock3),然后像这样调用函数:

    splitDockWidget(dock2, dock3, Qt::Horizontal);
    

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 2019-10-06
      • 2013-01-21
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      相关资源
      最近更新 更多