在尝试运行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/

10-09 05:58