TL; DR:我正在使用MainWindow内的嵌入式表单进行缩放。我不确定下一步该怎么做。
好的,我还有另一个尺码问题。
这是我正在尝试做的一个示例应用程序:
当我单击各种工具栏选项时,我打算相应地更改中央小部件的内容。也许我应该只使用选项卡小部件,但我想这样做。
以最简单的形式,具有这样的小部件布局:
我将中央窗口小部件的布局设置为“水平”,然后将“内部窗口小部件”设置为FormLayout,然后将内部窗口小部件的扩展规则设置为可扩展任何可扩展字段。当我调整窗口大小时,简单的行编辑会根据需要扩展和收缩。
当我单击工具栏中的总线图标时,会用一个单独的面板换出中央窗口小部件的内容。该面板具有一个具有表单布局的小部件,并且还设置为展开和折叠。以下是第二个面板的布局规则:
我的触发代码执行此操作:
currentCenter = ui->innerWidget; // In the constructor
currentCenter->hide();
if (v1Form == nullptr) {
v1Form = new V1Form(ui->centralWidget);
}
v1Form->show();
currentCenter = v1Form;
我为此尝试了各种命令,并尝试使用setCentralWidget()。在所有情况下,即使原来的中心区域扩展和折叠,新的中心区域仍保持固定大小。
有效的方法:我可以很容易地将内部包含更改为不同的形式。很好(花了一段时间才弄清楚。)
-或者-我可以制作简单的弹出表单,以适当地增长和收缩。
当我将表单嵌入到中央窗口小部件中或使用setCentralWidget时,无法正常工作是增长/收缩。
我不确定还能尝试什么。
答案 0 :(得分:0)
也许我应该只使用选项卡小部件,但是我想这样做。
您绝对应该使用QTabWidget
作为中央窗口小部件。它是专门为您的用例设计的,它将大大简化您的代码。
我的触发代码执行此操作:
currentCenter = ui->innerWidget; // In the constructor currentCenter->hide(); if (v1Form == nullptr) { v1Form = new V1Form(ui->centralWidget); } v1Form->show(); currentCenter = v1Form;
使用QTabWidget
,您的触发代码可以简化为:
ui->innerTabWidget->setIndex(1)
。
您不需要动态构造V1Form。只需使用Qt Designer在QTabWidget
中创建多个页面,并在MainWindow.ui
中实现所有子面板小部件即可。
(尽管如此,如果您想在各自的* .ui文件中实现每个子面板,您仍然可以promote QTabWidget
中的每个页面到自定义窗口小部件。)
当我将表单嵌入到中央窗口小部件中或使用setCentralWidget时,无法正常工作是增长/收缩。
要解决您的原始症状:小部件不会增长/缩小,因为您没有将其放在主窗口一部分的布局中。
答案 1 :(得分:0)
我找到了一种解决方法,可以从开始就做。我必须添加一行代码:
void MainWindow::switchForm(QWidget *widget) {
if (centralForm != widget) {
if (centralForm != nullptr) {
centralForm->hide();
centralForm = nullptr;
}
if (widget != nullptr) {
centralForm = widget;
centralForm->show();
ui->centralwidget->layout()->addWidget(centralForm);
}
}
}
void MainWindow::on_actionSetup_triggered()
{
if (setupForm == nullptr) {
setupForm = new SetupForm(ui->centralwidget);
}
switchForm(setupForm);
}
缺少的行-将我的新表单添加到布局中
ui->centralwidget->layout()->addWidget(centralForm);