修改QDockWidget默认捕捉位置?

问题描述 投票:0回答:1

我正在尝试将UI从wxWidgets应用程序建模到QT。但是,在原始应用程序中,它们具有可以对齐并移动的Dock Widgets,除了占用主窗口。

Example UI

除主窗口外,每个框似乎都是停靠窗口小部件。如果我想将数据集窗口(左上角)移动到输出调整窗口的右侧,我可以:

Example UI II

所以现在我的目标是尝试在QT中获取UI,以至少完成主窗口小部件左侧的停靠窗口小部件。在我的情况下,我能够至少得到宽度和高度有一些麻烦来显示相同​​。但是,我无法像输出调整那样创建一个QDockWidget,并将其与其他调整器相邻。另一个问题是当我尝试移动停靠小部件时,它不会捕捉到其他小部件的右侧或左侧。

My UI

这是我遇到问题的地方。我无法将其捕捉到停靠小部件的任何一侧。这是需要硬编码的东西吗?我知道我在网上看到的其他例子看起来非常类似于这种布局。但它们都是硬编码的。如果我可以随着时间的推移使用创建器添加滑块和工具栏,那将会更加简单。如果不是我需要硬编码的东西,我该如何修改我的小部件可以捕捉的位置?我尝试制作网格布局,但小部件不会进入网格。

c++ qt qwidget qdockwidget
1个回答
1
投票

通过在主窗口中启用停靠嵌套,您可以更加灵活地放置停靠窗口小部件,包括并排放置停靠窗口小部件。在Qt Designer中,选择主窗口,在Property Editor面板中标记dockNestingEnabled复选框(存在于QMainWindow部分中)。或者,您可以通过在代码中调用方法QMainWindow::setDockNestingEnabled来获得相同的结果。

如果您希望应用程序以与参考应用程序中并排排列的dock小部件一起开始,则必须采用QMainWindow::splitDockWidget方法。例如,您可以在Qt Designer中创建初始排列,如下所示。

enter image description here

接下来,您可以在主窗口构造函数代码中重新排列dock小部件,

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
  ui->setupUi(this);

  // Changes the dock widgets arrangement.
  splitDockWidget(ui->dock1, ui->dock3, Qt::Orientation::Horizontal);
  splitDockWidget(ui->dock1, ui->dock2, Qt::Orientation::Vertical);
}

这会产生下面的结果。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.