我需要帮助。我试图在开始时打开2个可能的窗口中的一个。程序决定在屏幕尺寸上打开哪个窗口。
#include <QApplication>
#include <QDesktopWidget>
#include "mainwindow.h"
#include "vincellform.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDesktopWidget mydesk;
if (mydesk.screenGeometry().width() == 800 && mydesk.screenGeometry().height() == 480)
{
VincellForm vf;
vf.show();
}
else
{
MainWindow w;
w.show();
}
return a.exec();
}
我认为这段代码是正确的,但事实并非如此。如果我在不同的屏幕上(我认为1280 * 1024)程序转到其他部分(MainWindow w; w.show();)然后返回,但没有打开窗口。但是,如果我将代码更改为:
#include <QApplication>
#include <QDesktopWidget>
#include "mainwindow.h"
#include "vincellform.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDesktopWidget mydesk;
if (mydesk.screenGeometry().width() == 800 && mydesk.screenGeometry().height() == 480)
{
VincellForm vf;
vf.show();
}
MainWindow w;
w.show();
return a.exec();
}
它运行完美(MainWindow将在返回后打开)。我甚至无法想象问题出在哪里......非常感谢你
答案 0 :(得分:4)
您正在if
和else
块中本地定义窗口变量。这意味着窗口在显示后立即被销毁。
你有两个解决方案。如果你不介意创建两个窗口,但只显示一个窗口,请执行以下操作:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDesktopWidget mydesk;
VincellForm vf;
MainWindow w;
if (mydesk.screenGeometry().width() == 800 && mydesk.screenGeometry().height() == 480)
{
vf.show();
}
else
{
w.show();
}
return a.exec();
}
如果您只想创建其中一个,则必须采用动态分配:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDesktopWidget mydesk;
std::unique_ptr<VincellForm> vf;
std::unique_ptr<MainWindow> w;
if (mydesk.screenGeometry().width() == 800 && mydesk.screenGeometry().height() == 480)
{
vf.reset(new VincellForm);
vf->show();
}
else
{
w.reset(new MainWindow);
w->show();
}
return a.exec();
}
注意:std::unique_ptr
来自C ++ 11。如果还没有,请在程序结束时手动使用原始指针代替delete
。