我需要帮助。我正在尝试在启动时打开 2 个可能的窗口中的 1 个。程序决定在屏幕尺寸上打开哪个窗口。
#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();
}
它运行完美(主窗口将在返回后打开)。我什至无法想象问题出在哪里......非常感谢
最佳答案
您在 if
和 else
block 中本地定义窗口变量。这意味着窗口在显示后立即被销毁。
您有两种解决方案。如果您不介意创建两个窗口,但只显示一个窗口,请执行以下操作:
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。如果您还没有,请在程序结束时使用原始指针而不是手动删除
。
关于c++ - 决定启动时在 QT 中打开哪个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18441257/