如何在Qt替换部分窗口?

时间:2014-04-18 19:57:31

标签: qt user-interface qt5

我想在Qt UI Designer中创建窗口,窗口的一部分可以通过某些条件替换。 所以我希望通过Qt UI Design设计窗口的所有部分,并在运行时在设计的应用程序之间动态切换。 例如,窗口的一部分可以是带有小部件的矩形面板。 什么是最恰当的方式?

2 个答案:

答案 0 :(得分:1)

您可以使用布局:

red border line is QHBoxLayout

红色边框线是QHBoxLayout。

在Qt Designer中将ui元素从左侧面板拖放到需要的布局(我将布局重命名为mainLt)。然后,您将能够编写以下代码:

#include "widget.h"
#include "ui_widget.h"

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

void Widget::keyPressEvent(QKeyEvent *)
{
    ui->mainLt->removeWidget(ui->label);
    ui->label->hide();
    ui->mainLt->insertWidget(0, new QSpinBox());
}

此代码用QSpinBox替换左边的QLabel。因此,当您显示窗口时,它看起来像:

Window state before press any key

然后按任意键......

Window state after press any key

瞧!

这个小例子很漂亮:两个旋转框出现,因为我使用Alt + PrintScreen截取屏幕截图,这意味着我按下了两个按钮而pressEvent已经调用了两次:)但我认为你得到了它。 绘制小部件并根据您的设计将它们添加到布局中。在您的条件成立后,删除一些小部件并插入其他小部件。

答案 1 :(得分:1)

您可以使用的一种方法是在您的用户界面中放置QScrollArea小部件,并使用QScrollArea::setWidget功能设置内部小部件。

这种方法有两个好处。首先,QScrollArea提供了一个用于获取和设置内部窗口小部件的简单API。第二,QScrollArea将能够处理任何大小的小部件,并且如果内部小部件超出滚动区域的大小限制,则将显示滚动条。

有关详细信息,您可以查看QScrollArea class的Qt文档。