我有三个QMainWindow
,EntryWindow
,WindowA
,WindowB
。 EntryWindow
中有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();
}
但这似乎不起作用。点击该按钮后,WindowA
或WindowB
就会闪烁。我该如何修改代码?
答案 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();