gpt4 book ai didi

c++ - 如何动态更改 QMainWindow 的内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:50 24 4
gpt4 key购买 nike

我有一个 QMainWindow,它一开始只有一个菜单栏和一个有两个选项的菜单。单击第一个时,窗口应填充 QLabel 和各种输入小部件以接收数据。单击第二个选项时,窗口应该填充 QTextEdit(显然删除了当时窗口上的任何内容)

以下是我试过的代码:

void OrderWindow::displayAddOrder(){
QVBoxLayout* tlayout = new QVBoxLayout();
QHBoxLayout* row = new QHBoxLayout();
row->addWidget(nameLbl);
tlayout->addLayout(row);
qDeleteAll(children());
delete layout();
setLayout(tlayout);
}

这有点乱,因为我一直在尝试各种事情。当我使用此代码单击菜单选项时,它只是说应用程序已停止工作。

如有任何帮助,我们将不胜感激。

最佳答案

您至少有以下选择:

  • 始终显示实际的小部件,隐藏其余部分。对于您的示例中的两个小部件,这很简单。您可以将此技术与观察者设计模式一起用于任意数量的小部件。

  • 使用 QStackedWidget class它的行为方式基本上与您的自定义观察者模式实现方式相同,尽管您需要为此使用一个额外的类。

因此,我建议编写如下代码:

订单窗口.h

...
class QStackedWidget;
class OrderWindow
{
...
public:
explicit OrderedWindow(QWidget *parent);
...
private:
QStackedWidget m_stackedWidget;
...
}
...

订单窗口.cpp

#include "orderwindow.h"

#include <QStackedWidget>
...

OrderWindow::OrderWindow(QWidget *parent)
: QWidget(parent)
, m_stackedWidget(new QStackedWidget(this))
{
QWidget *firstPageWidget = new QWidget;
QWidget *secondPageWidget = new QWidget;

m_stackedWidget->addWidget(firstPageWidget);
m_stackedWidget->addWidget(secondPageWidget);

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget);
setLayout(layout);
}

...

void OrderWindow::displayAddOrder() {
m_stackedWidget->setCurrentWidget(nameLbl);
}

...

关于c++ - 如何动态更改 QMainWindow 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23154056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com