Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QMainWindows之间切换_C++_Qt - Fatal编程技术网

C++ 在QMainWindows之间切换

C++ 在QMainWindows之间切换,c++,qt,C++,Qt,我有三个QMainWindows、EntryWindow、WindowA、WindowB。EntryWindow中有两个按钮,单击buttonA显示WindowA并退出EntryWindow,单击buttonB显示WindowB并退出EntryWindow 在main.cpp中: int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForCStrings(QTextC

我有三个
QMainWindow
s、
EntryWindow
WindowA
WindowB
EntryWindow
中有两个按钮,单击
buttonA
显示
WindowA
并退出
EntryWindow
,单击
buttonB
显示
WindowB
并退出
EntryWindow

main.cpp
中:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    Entry w;
    w.show();
    return a.exec();
}
entryWindow.cpp
中:

void Entry::on_chooseABtn_clicked()
{
    this->hide();
    WindowA w;
    w.show();
}

void Entry::on_chooseBBtn_clicked()
{
    this->hide();
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    WindowB w;
    w.show();
}

但这似乎不起作用。单击按钮后,
WindowA
WindowB
刚刚闪烁。我应该如何修改代码?

将窗口创建为指针,否则它们会在超出范围时自动删除:

this->hide();
WindowA* w = new WindowsA(this);
w->show();

在堆栈上创建WindowA和WindowB类的实例:

WindowA w;
所以,当方法返回时,它们被删除,就在

w.show();
可以将这些窗口作为实例变量添加到
条目
类中

编辑:一些代码示例。在.h文件中:

class Entry : public QMainWindow {

//your stuff

private:

WindowA windowA;
WindowB windowB;

} 
您可以更改按钮单击处理程序,如下所示:

void Entry::on_chooseABtn_clicked()
{
    this->hide();
    windowA.show();
}

正确,除了C++中没有“垃圾收集”),如果对象不必是成员变量,也可以使用W-> SETAtQualt(QT::WAYDELTEONEONGORD)。当窗口关闭时,它将自动对对象调用delete.Works。但是真的没有垃圾收集机制。谢谢