在尝试运行qt教程中的窗口布局示例时,我正在使用标题中提到的组合。主要看起来像这样:
#include <QtGui>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QWidget window;
QLabel *label = new QLabel(QApplication::translate("windowlayout", "Name:"));
QLineEdit *lineEdit = new QLineEdit();
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(label);
layout->addWidget(lineEdit);
window.setLayout(layout);
window.setWindowTitle(
QApplication::translate("windowlayout", "Window layout"));
window.show();
return app.exec();
}
和CMakeLists.txt像这样:
PROJECT(test)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE_DIRECTORIES(${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR})
SET(test_SRCS main.cc)
QT4_AUTOMOC(${test_SRCS})
ADD_EXECUTABLE(test ${test_SRCS})
TARGET_LINK_LIBRARIES(test ${QT_QTGUI_LIBRARIES} ${QT_QTCORE_LIBRARIES})
构建和编译工作正常,但是当我运行该应用程序时,它始终显示命令提示符。如何避免这种情况?
最佳答案
在带有Qt4的CMakeFile中,您无需在编译时更改CPP代码或添加标志。只需使用
set(QT_USE_QTMAIN TRUE)
它将自动将qtmain.lib与您的可执行文件链接。该库定义了其他常见的main()签名,包括WinMain()。
使用此技巧,您的应用程序可以在Windows下使用MSVC进行编译,而无需更改原始的main()函数,并且在IDE(例如QtCreator)之外运行应用程序时也无需显示控制台。
最终生成的CMakeLists.txt可以是:
PROJECT(test)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
FIND_PACKAGE(Qt4 REQUIRED)
if(WIN32)
SET(QT_USE_QTMAIN TRUE)
endif(WIN32)
INCLUDE(${QT_USE_FILE})
SET(test_SRCS main.cc)
QT4_AUTOMOC(${test_SRCS})
ADD_EXECUTABLE(test ${test_SRCS})
TARGET_LINK_LIBRARIES(test ${QT_LIBRARIES})
此外,您不需要包括QtCore和QtGui,它们默认包含在QT_USE_FILE(对于包含文件夹)和QT_LIBRARIES(对于库)中。
您只需设置要使用的模块或不使用的模块(对于Gui):
# Use Network and Sql modules
set(QT_USE_QTNETWORK TRUE)
set(QT_USE_QTSQL TRUE)
# Do not use Gui module
set(QT_DONT_USE_QTGUI TRUE)
关于c++ - Qt + CMake + VC++产生命令提示符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9555375/