我对 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/