在QMainWindow之间切换

时间:2013-05-23 09:28:55

标签: c++ qt

我有三个QMainWindowEntryWindowWindowAWindowBEntryWindow中有2个按钮,点击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();
}

但这似乎不起作用。点击该按钮后,WindowAWindowB就会闪烁。我该如何修改代码?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:3)

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

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