2

我需要帮助。我正在尝试在启动时打开 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();
}

它运行完美(MainWindow 将在返回后打开)。我什至无法想象问题出在哪里......非常感谢

4

1 回答 1

4

您在ifandelse块中本地定义窗口变量。这意味着窗口在显示后立即被销毁。

你有两个解决方案。如果您不介意创建两个窗口,但只显示一个,请执行以下操作:

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在​​程序结束时手动使用原始指针。

于 2013-08-26T09:53:10.923 回答