为啥我的 Qt 应用程序在执行时不显示 GUI?

Posted

技术标签:

【中文标题】为啥我的 Qt 应用程序在执行时不显示 GUI?【英文标题】:Why doesn't my Qt application present a GUI when executed?为什么我的 Qt 应用程序在执行时不显示 GUI? 【发布时间】:2014-01-30 16:01:48 【问题描述】:

我收到了一个带有 .pro 文件的 C++/C 代码,可以在 Qt 中编译(这是一个大而杂乱的代码,所以我想使用 Qt 和提供的 .pro 文件)。

该代码旨在生成一个 GUI。我可以在 Qt 中编译它而不会出现任何错误(在 Mac OS X 10.7.5 和 Mac OS X 10.8 上),并且我看到了可执行文件。但是,当我单击它时,什么也没有发生。当我通过命令行以通常的方式运行它时,什么也没有发生。这是我正在尝试的运行命令:

./calc.app/Contents/MacOS/calc

exec ./calc.app/Contents/MacOS/calc(这个结果输出:[Process completed])。

在 .pro 文件(如下)中,我没有看到任何似乎表明我想要 GUI 的内容。但是,我在 Qt 帮助站点上读到 GUI 模块不需要在 .pro 文件中指定,因为它是自动包含的。也许我误解了什么?

我的 .pro 文件有什么问题吗?

TEMPLATE = app
LANGUAGE = C++
TARGET = calc
VERSION = 3.1.0

CONFIG -= qt
CONFIG += warn_on
CONFIG += debug
#CONFIG += windows
CONFIG += console

DEFINES += IPMGEMPLUGIN
DEFINES += NOPARTICLEARRAY

!win32 
  DEFINES += __unix


GMS_CPP = ../GMS
GMS_H   = $$GMS_CPP

DEPENDPATH +=
DEPENDPATH += .
DEPENDPATH += $$GMS_H

INCLUDEPATH +=
INCLUDEPATH += .
INCLUDEPATH += $$GMS_H

QMAKE_LFLAGS +=
OBJECTS_DIR = obj

SOURCES      +=   main.cpp

include($$GMS_CPP/gms.pri)

【问题讨论】:

“在 QT 中编译”是什么意思? 尝试使用macx:CONFIG -= app_bundle 并在控制台上运行生成的二进制文件。这应该确保您看到所有输出,以防万一它是一个 CLI/非 GUI 程序(.pro 文件有些暗示,但如果没有看到代码就无法确定) @FrankOsterfeld 感谢您的建议。我尝试过这个。我看到的唯一输出是 /Users/me/Developer/trunk/standalone/GMS/trunk/build-calc-Qt_4_7_4_gcc-Debug/gmcalc ;出口;注销 这个问题是being discussed at meta @LaszloPapp 我无法重现此内容。 $$GMS_CPP/gms.pri 的内容和最小的源文件是必需的恕我直言。 【参考方案1】:

我对 Qt 一无所知,当然我们也不知道您正在编译的特定应用程序 - 所以我可以为您提供的帮助可能非常不准确。

但是,这就像拇指疼痛一样突出:

#CONFIG += windows
CONFIG += console

A quick Google search 表示 Qt 确实 支持控制台应用程序 - 即不创建 GUI 而是充当控制台/终端/命令行工具的应用程序。您正在使用的那个似乎就是这种情况。假设应用程序即使工作,它可能希望在命令行上将输入传递给它,并会产生某种类型的输出作为响应 - 但使用这种配置,它不会 em> 创建一个 GUI。

我建议联系向您提供此应用程序的人以获得进一步的支持。

【讨论】:

该选项仅适用于 Windows,因此与 Mac 无关。它在 Mac 上是无操作的。另外,请查看 qt tagwiki。它不鼓励使用“QT”,因为 QT 是 Quick Time(不同的项目和品牌)。 拉斯洛,你有点没抓住重点。如果应用程序不是为了创建 GUI 而编写的,那么它不会通过在与编写它的操作系统不同的操作系统上编译而神奇地获得一个。如果您对该主题有更广泛的了解,请考虑编写自己的答案 - 正如我立即指出的那样,除了观察我鼻子前面的东西的能力之外,我没有任何经验。 如果不按要求查看源代码和 .pri 文件,恐怕我无法写出答案。尽管 IMO 不太可能 OP 想要运行 GUI 应用程序,而他甚至没有 GUI 应用程序。我的意思是,这将是一个奇怪的错误,不是吗? :) 这是我最后的假设。我认为这条线只是复制/粘贴的不良结果,但话又说回来,在我确定之前我不会发布答案,但为此我需要看到更多。 实际上,@Laszlo,我强烈怀疑这甚至不是一个编程问题——如果现在没有在 MSO 上积极讨论这个问题,我早就迁移它了。想象一下从“网络”上下载一个你以前从未见过的应用程序,然后编译它......没有文档,充其量只是一个功能描述......你怎么知道这个应用程序的 UI 类型将呈现?您可能假设它是一个 GUI,因为这有点 Qt 的 forte - 但并不要求这实际上是真的(并且问题中的列表强烈暗示它不是)。 Shog9,我相信 OP 正在尝试接管代码库,并且可能存在一些编程错误。我同意,但是,就目前而言,这是题外话。不仅没有显示源代码,甚至没有显示 .pri 构建系统包含文件。 OT:根据 Qt 的长处:Qt 是一个应用程序框架,而不是最初推出的 GUI 框架。虽然,我能理解人们对此的困惑。【参考方案2】:

CONFIG -= qt 基本上意味着“目标是[不是] Qt 应用程序/库并且[不需要] Qt 库和头文件。”您应该删除该行。来源:http://qt-project.org/doc/qt-4.8/qmake-variable-reference.html#config

此外,添加QT += core gui 也无妨。这通常会自动为您完成,但由于您遇到项目文件问题,它不会受到伤害......另外,请确保您的 main.cpp 的 main 方法以 return a.exec(); 结尾,并且 aQApplication 实例 (Qt 4.x) 或 QGUIApplication 实例 (Qt 5.x)。 main.cpp 应该是一个简短的函数,它创建主窗口小部件或窗口,显示它,然后启动事件循环。

如果您的项目仍然无法正常工作,我强烈建议您放弃项目文件。换句话说,我会下载 Qt SDK 的 OS X 包,创建一个新项目,然后将您的文件导入到新项目中。之后,我将只从您的旧 .pro 文件中提取必要的行并将它们放入新文件中,直到它起作用(特别是,我注意到您有一些自定义的 DEFINES += ...)。但是,所有这些建议都假定故障在于项目文件,而不是您的代码。 ;-)

【讨论】:

是的,CONFIG -= qt 也证明了 OP 发布的内容与恕我直言相矛盾。它应该给出一个编译错误,因此必须在尝试构建应用程序之前将其删除。

以上是关于为啥我的 Qt 应用程序在执行时不显示 GUI?的主要内容,如果未能解决你的问题,请参考以下文章

为啥程序在登录时不执行segue?

为啥 PyCharm 中的 python 控制台在使用 pyqt 时不显示任何错误消息? [复制]

为啥 QLineEdit Style 在聚焦时不改变?

能够记住重新打开应用程序时不应显示哪些相机胶卷照片(ios)

为啥viewDidLoad在swift中完成时不显示数据? [关闭]

非GUI-Qt程序运行后显示Console(简单好用)