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