我正在尝试将UI从wxWidgets应用程序建模到QT。但是,在原始应用程序中,它们具有可以对齐并移动的Dock Widgets,除了占用主窗口。
除主窗口外,每个框似乎都是停靠窗口小部件。如果我想将数据集窗口(左上角)移动到输出调整窗口的右侧,我可以:
所以现在我的目标是尝试在QT中获取UI,以至少完成主窗口小部件左侧的停靠窗口小部件。在我的情况下,我能够至少得到宽度和高度有一些麻烦来显示相同。但是,我无法像输出调整那样创建一个QDockWidget,并将其与其他调整器相邻。另一个问题是当我尝试移动停靠小部件时,它不会捕捉到其他小部件的右侧或左侧。
这是我遇到问题的地方。我无法将其捕捉到停靠小部件的任何一侧。这是需要硬编码的东西吗?我知道我在网上看到的其他例子看起来非常类似于这种布局。但它们都是硬编码的。如果我可以随着时间的推移使用创建器添加滑块和工具栏,那将会更加简单。如果不是我需要硬编码的东西,我该如何修改我的小部件可以捕捉的位置?我尝试制作网格布局,但小部件不会进入网格。
通过在主窗口中启用停靠嵌套,您可以更加灵活地放置停靠窗口小部件,包括并排放置停靠窗口小部件。在Qt Designer中,选择主窗口,在Property Editor
面板中标记dockNestingEnabled
复选框(存在于QMainWindow
部分中)。或者,您可以通过在代码中调用方法QMainWindow::setDockNestingEnabled
来获得相同的结果。
如果您希望应用程序以与参考应用程序中并排排列的dock小部件一起开始,则必须采用QMainWindow::splitDockWidget
方法。例如,您可以在Qt Designer中创建初始排列,如下所示。
接下来,您可以在主窗口构造函数代码中重新排列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);
}
这会产生下面的结果。