0

我有三个QMainWindows, EntryWindow, WindowA, WindowB. 里面有2个按钮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刚一闪而过。我应该如何修改代码?

4

2 回答 2

5

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

WindowA w;

所以当方法返回时它们被删除,就在之后

w.show();

也许将这些窗口作为实例变量添加到Entry类中。

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

class Entry : public QMainWindow {

//your stuff

private:

WindowA windowA;
WindowB windowB;

} 

您可以像这样更改按钮单击处理程序:

void Entry::on_chooseABtn_clicked()
{
    this->hide();
    windowA.show();
}
于 2013-05-23T09:35:52.840 回答
3

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

this->hide();
WindowA* w = new WindowsA(this);
w->show();
于 2013-05-23T09:35:17.317 回答