c++ - 决定启动时在 QT 中打开哪个窗口

标签 c++ qt

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

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

最佳答案

您在 ifelse 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/

相关文章:

函数模板的 C++ 问题(未找到实例)

c++ - 从片段着色器返回 float

c++ - 我如何让 Xcode Instruments 将未分配的内存报告为泄漏?

c++ - 将仅包含 C++ header 的模板编译为共享库

c++ - 模仿基于 QApplication::palette() 的颜色样式行为

c++ - Qt 中的自定义和默认消息处理程序

c++ - 没有规则使目标 : Codeblocks

c++ - 使用 64 位包编译 32 位 Qt 应用程序

linux - 为什么我不能在分辨率为 800x600 的显示器上运行 Qt Qml 应用程序?

c++ - 具有多个 QWidget 的 QScrollArea 仅显示空框