Qt-Creator下的Libqxt

Qt-Creator下的Libqxt,qt,qt4,qt-creator,Qt,Qt4,Qt Creator,我想创建一个需要全局快捷方式的小应用程序。因此,我下载了libqxt的当前版本(0.5.1),并在Qt Creator中作为项目打开 Libqxt以这种方式编译没有问题,所以我认为在我的项目的选项卡依赖项中添加它会在构建中自动添加,就像Eclipse使用JAR库一样(我知道它们是不同的ide,但这似乎是它们之间的一个共同特性) 会发生什么?当需要时,QtCreator会在我的项目之前编译qxt,但当我想包含它的头时,QtCreator会不断警告我它找不到它们 可能我缺少标题的正确名称(我尝试了q

我想创建一个需要全局快捷方式的小应用程序。因此,我下载了libqxt的当前版本(0.5.1),并在Qt Creator中作为项目打开

Libqxt以这种方式编译没有问题,所以我认为在我的项目的选项卡依赖项中添加它会在构建中自动添加,就像Eclipse使用JAR库一样(我知道它们是不同的ide,但这似乎是它们之间的一个共同特性)

会发生什么?当需要时,QtCreator会在我的项目之前编译qxt,但当我想包含它的头时,QtCreator会不断警告我它找不到它们

可能我缺少标题的正确名称(我尝试了qxt文档中显示的标题:)


顺便说一句,我查看了全局快捷方式的代码,我想我可以把它撕下来并按原样在我的应用程序中使用,我要感谢qxt团队并打开我的应用程序的代码。

Qt Creator不知道如何将不同的库公开给你的项目。这是开发者的职责。依赖关系只确保在构建主项目之前已经构建了提到的项目

您真正关心的是在没有正确安装的情况下使用Qxt。假设
configure
已经运行并且
libqxt
已经构建(使用Qt-Creator或通过
qmake
+
make
手动),我的解决方案是将以下代码段(带有明显的QXT\u-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}
}
 CONFIG  += qxt
 QXT     += core gui
不幸的是,我不确定它是否适用于复杂的项目

默认情况下,Qxt是在发布模式下构建的,但QtCreator使用调试模式,这会导致项目的二进制文件损坏,具体取决于Windows下的Qxt。您必须将项目切换到发布模式或在调试模式下构建Qxt(运行
configure-debug
并重建Qxt)

最后一件事:在Windows中,您将无法从Qt Creator运行您的项目,即使您成功地构建了它。您必须将所需的
Qwt*.dll
文件(如果处于调试模式,请使用
d
-后缀版本)从
libqxt-0.5.1/deploy/libs
复制到
您的_项目/(发布|调试)
目录。

将以下行添加到.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}
}
 CONFIG  += qxt
 QXT     += core gui

注意:在Linux上构建Qxt时,不要忘了执行
sudo make安装
,否则这一小魔术可能会失败。

您是否将Qxt include文件夹添加到INCLUDEPATH qmake变量中?我现在尝试了,但不起作用。我在.pro文件中添加了这个:INCLUDEPATH+=~/tmp/libqxt-0.5.1/deploy/include/这有点令人失望,因为其他IDE中都有类似的东西。如果没有,那么Dependencies选项卡有什么用呢?好吧,我想我会留下这个问题,但是我解决了在系统中安装lib的问题(makeinstall)。顺便说一下,我将INCLUDEPATH中使用的路径更改为/home/dario/libqxt-0.5.1/deploy/include/,它开始查找头文件,但由于内部缺少其他头文件,因此无法编译。请查看deploy/include目录。你在那里看到QxtGlobalShortcut了吗?在我的Windows安装中,标题位于QxtGui文件夹内,因此必须包含“QxtGui/QxtGlobalShortcut”。是的,它位于您所说的位置。无论如何还是要感谢您,但是当Qt Creator找到标题时,它不会使用libqxt项目进行编译。我刚刚安装了libqxt并将其添加到我的.pro文件中:CONFIG+=console qxt qxt+=core gui现在,它可以完美地工作,并且我能够构建我的应用程序。顺便说一下,Qt Creator是一个非常好的工具。+1感谢您的配置!请问这一行是做什么的:MODNAME=$$upper($$replace(module,“().*”,“\1”)$$replace(module,“^.”,”)。再次感谢@越南:Qxt对
Qxt
变量中提供的模块名称使用小写,但对库名称和一些包含的目录使用CamelCase。这类似于Qt。上面提到的行使用简单函数(
upper()
是未记录的函数,不言而喻)和正则表达式将
MODNAME
设置为
module
的CamelCase版本。@SDX2000感谢您的注意。总有一天我会看的。@przemoc现在非常简单…几乎难以置信…看看aep的答案。@SDX2000我的答案是关于使用Qxt w/o安装,所以
make install
在这里不是一个选项。aep是Qxt的合著者,显然他知道这些东西哇,这真有效!似乎
makeinstall
步骤修改了SDK中的一些文件,让它知道它的存在。似乎是QtSDK/Desktop/Qt/473/gcc/mkspecs/features/qxt.prf