c++ - 如何恢复 QMainWindow 的初始 centralwidget?

标签 c++ qt user-interface qt4

我对 Qt 有点陌生,所以决定稍微尝试一下,以便有一天我可以用 GUI 制作一些程序。我一直在玩 Windows 并遇到了一个问题。除了 QMainWindow 之外,我还创建了两个新的 QWidget Form 类。使用其中之一,我能够制作一个单独的窗口弹出和消失。我想用第二个做的是......

我有一个带有按钮的 MainWindow,当按下该按钮时,CentralWidget 变为带有另一个按钮的 QWidget。然后,当我按下新按钮上的按钮时,它会将 CentralWidget 恢复为原始按钮。

我确实尝试在更改之前存储初始的 CentralWidget,但我还没有能够成功恢复它。我知道 QStackedWidget,但我想知道是否有另一种方法。谢谢!

最佳答案

似乎 Qt 删除了子 widget,当新的一个被指定为子 widget 时。下面的代码对此进行了说明并显示了解决方法

class QMyWidget: public QWidget
{
public:
    ~QMyWidget(){std::cout<<"Destroyed"<<std::endl;}
};

class QMyWidget2: public QWidget
{
public:
    ~QMyWidget2(){std::cout<<"Destroyed2"<<std::endl;}
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget(new QMyWidget());
    this->setCentralWidget(new QWidget);

    QWidget * w = new QMyWidget2();
    this->setCentralWidget(w);
    w->setParent(NULL);
    this->setCentralWidget(new QWidget);

}

MainWindow::~MainWindow()
{
    delete ui;
}

关于c++ - 如何恢复 QMainWindow 的初始 centralwidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575250/

相关文章:

c++ - 我必须使用 boost::bind 来创建多态 "transform"功能吗?

c++ - 关于抽象工厂和注入(inject)的问题

c++ - Q_DECLARE_INTERFACE() 和 Q_PLUGIN_METADATA(),interface id string 需要匹配吗?

javascript - JavaScript 中的加速器 UI

c# - 用于 Visual Studio 2008 外观的 ToolStripProfessionalRenderer

python - 如何让 for 循环在 python 2.7 中与 tkinter 一起工作?

c++ - 删除特定索引处的 vector 元素

C++ 可变参数委托(delegate)

linux - 在没有 OpenGL 的情况下,在 X11 上的 QT 中显示图像的最快方法是什么?

c++ - QThreadPool 奇怪的异常