决定在QT开始时打开哪个窗口

时间:2013-08-26 09:48:06

标签: c++ qt

我需要帮助。我试图在开始时打开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将在返回后打开)。我甚至无法想象问题出在哪里......非常感谢你

1 个答案:

答案 0 :(得分:4)

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

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

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