Libqxt在Qt Creator下的应用

4
我想创建一个需要全局快捷键的小应用程序。因此,我已经下载了当前版本的libqxt(0.5.1),并在Qt Creator中将其打开为项目。
以这种方式编译libqxt没有问题,因此我认为将其添加到我的项目的“依赖项”选项卡中,它会像Eclipse使用JAR库一样被自动添加到构建中(我知道它们是不同的IDE,但它似乎是它们之间的共同特点)。
发生了什么?当需要时,Qt Creator会在我的项目之前编译qxt,但当我想要包含其头文件时,Qt Creator会不断警告无法找到它们。
可能我错过了正确的头文件名称(我尝试了qxt文档中显示的头文件:http://doc.libqxt.org/0.5.0/classQxtGlobalShortcut.html
顺便说一下,我查看了全局快捷键的代码,并认为我可以将其摘出并按原样在我的应用程序中使用,并且我将给予qxt团队信用,并公开我的应用程序的代码。

你是否将Qxt包含文件夹添加到了你的INCLUDEPATH qmake变量中? - rpg
我现在尝试了一下,但是它不起作用。我在我的.pro文件中添加了以下内容:INCLUDEPATH += ~/tmp/libqxt-0.5.1/deploy/include/这有点令人失望,因为其他IDE中可用的东西都可以在这里使用。如果不行,那么依赖项选项卡有什么用呢? - Dario Castañé
好的,我想我会让这个问题保持开放状态,但是我通过在系统中安装库(make install)来解决了我的问题。顺便说一下,我将INCLUDEPATH中使用的路径更改为/home/dario/libqxt-0.5.1/deploy/include/,它开始找到头文件,但由于其他缺失的头文件而无法编译。 - Dario Castañé
请查看您的deploy/include目录。您是否在其中看到了QxtGlobalShortcut?在我的Windows安装中,该头文件位于QxtGui文件夹内,因此您需要#include "QxtGui/QxtGlobalShortcut"。 - rpg
是的,它位于你所说的位置。无论如何,虽然Qt Creator可以找到头文件,但它无法编译libqxt项目。我刚刚安装了libqxt并在我的.pro文件中添加了以下内容:CONFIG += console qxt QXT += core gui现在,它可以完美地工作,我能够构建我的应用程序。顺便说一句,Qt Creator是一个非常好的工具。 - Dario Castañé
2个回答

11

从文档中获取

将以下行添加到您的.pro文件中:

 CONFIG  += qxt
 QXT     += core gui

注意:在Linux上构建Qxt时,不要忘记执行 sudo make install,否则这个小魔术可能无法正常工作。


哇,这真的有效!似乎“make install”步骤修改了SDK中的某个文件,以让其知道它的存在。看起来是QtSDK/Desktop/Qt/473/gcc/mkspecs/features/qxt.prf。 - Sandeep Datta

6

Qt Creator不知道如何将不同的库暴露给您的项目,这是开发者的职责。依赖性仅确保在构建主要项目之前已经构建了所提到的项目。

您真正关心的是在没有正确安装Qxt的情况下使用它。假设已经运行了configure并已经构建了libqxt(使用Qt Creator或通过qmake+make手动构建),我的解决方案是将以下代码片段(带有明显的QXT_DIR自定义)添加到.pro文件中:

QXT_DIR = $${IN_PWD}/../libqxt-0.5.1
LIBS += -L$${QXT_DIR}/deploy/libs
INCLUDEPATH += $${QXT_DIR}/deploy/include
for(module, QXT) {
 MODNAME = $$upper($$replace(module, "(.).*", "\1"))$$replace(module, "^.", "")
 INCLUDEPATH += $${QXT_DIR}/deploy/include/Qxt$${MODNAME}
 INCLUDEPATH += $${QXT_DIR}/src/$${module}
 win32:CONFIG(debug, debug|release):MODNAME = $$join(MODNAME,,,d)
 LIBS += -lQxt$${MODNAME}
}

很遗憾,我不确定它能在复杂项目中使用。
默认情况下,Qxt是以release模式构建的,但是Qt Creator使用debug模式,这会导致在Windows下依赖于Qxt的项目二进制文件损坏。您必须将项目切换到release模式或者以debug模式构建Qxt(运行configure -debug并重新构建Qxt)。
最后一件事:即使您成功构建了项目,在Windows下也无法从Qt Creator运行您的项目。您必须将所需的Qwt*.dll文件(如果您处于debug模式,则使用带有d后缀的版本)从libqxt-0.5.1/deploy/libs复制到your_project/(release|debug)目录中。

+1 感谢提供配置文件!我可以问一下这行代码是干什么的吗:MODNAME = $$upper($$replace(module, "(.).*", "\1"))$$replace(module, "^.", "")。再次感谢! - Viet
@Viet:Qxt在提供QXT变量中的模块名称时使用小写字母,但在库名称和一些包含的目录中使用CamelCase。这类似于Qt。上述代码行使用简单函数(upper()是一个未记录的函数,但很容易理解)和正则表达式将module转换为CamelCase版本,并将其设置为MODNAME - przemoc
@SDX2000 谢谢你的提醒。我会在某一天查看它。 - przemoc
@przemoc 现在它非常简单... 几乎难以置信...看看aep的答案。 - Sandeep Datta
@SDX2000 我的回答是关于在不安装Qxt的情况下使用它,因此“make install”在这里不是一个选项。aep是Qxt的共同作者,所以显然他知道这些东西。 :) - przemoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接