Cmake链接问题:对QPushButton的未定义引用

时间:2016-04-27 11:47:08

标签: c++ qt cmake qt4

我刚开始使用Qt。编译第一个例子时遇到问题 main.cpp中:

#include <QCoreApplication>
#include <QPushButton>

int main(int argc, char** argv)
{
  QCoreApplication app(argc, argv);
  QPushButton button ("Hello world !");

 return app.exec();
}

CMake.txt:

 cmake_minimum_required(VERSION 2.6)
 project(new)
 find_package(Qt4 REQUIRED)
 enable_testing()
 include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
 set(source_SRCS main.cpp)
 qt4_automoc(${source_SRCS})
 add_executable(new ${source_SRCS})
 target_link_libraries(new${QT_QTCORE_LIBRARY})
 add_subdirectory(tests)
 install(TARGETS new RUNTIME DESTINATION .)

我构建的错误是:

undefined reference to `QPushButton::QPushButton(QString const&,QWidget*)'

这是一个链接问题,但我该如何解决?

5 个答案:

答案 0 :(得分:4)

以下是我认为您遗失的内容:

find_package(Qt4 REQUIRED QtGui)

查看您的cmake,您可能希望更改target_link_libraries以获取以下内容:

target_link_libraries(new ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})

答案 1 :(得分:2)

你有三个问题:

  1. 您没有链接Gui模块(Qt 5中的Widgets模块)。这包含在the other answer

  2. 您必须在基于窗口小部件的应用程序中使用..... var newDoc = new HtmlDocument(); newDoc.LoadHtml(new_script); var newScript = newDoc.DocumentNode.SelectSingleNode("//script"); scriptNode.ParentNode.ReplaceChild(newScript, script); 。由于QApplication来自Gui模块(Qt5中的小部件),因此您不能仅使用QPushButtonQCoreApplication:一旦尝试实例化{QGuiApplication,您的程序就会崩溃{1}}。

  3. 您没有显示该按钮,因此当您的程序启动时,一旦您解决了上述问题,您将看不到任何内容。

  4. 您的QWidget应如下:

    main.cpp

答案 2 :(得分:0)

您还需要链接QtGui和QtWidgets库。在qmake中它可以处理Qt中的哪些库,你必须在cmake中手动执行此操作。

如果您查看QPushButton(http://doc.qt.io/qt-5/qpushbutton.html)的文档,那么&#34; qmake&#34; line显示了你需要的库。

答案 3 :(得分:0)

考虑使用qmake代替cmake和Qt。

无论如何,QCoreApplication(参见docs)是主应用程序类的控制台版本,在GUI应用程序中不起作用。 QPushButton是一个小部件类,可以单独存在,并且会创建一个窗口(尽管你必须明确地show()),但只能使用QApplication

在* .pro文件中使用qmake时,您需要包含widgets,如下所示:

CONFIG += widgets

并确保您没有

CONFIG -= gui

如果您坚持使用cmake,请参阅here

答案 4 :(得分:-1)

这个答案解决了我同样的问题:)


  

好吧,   我可以自己解决。

     

尽管他们也遇到了问题:

     

该错误源自使用“ Q_OBJECT”。   要解决该错误,请右键单击该项目,然后选择“运行qmake”,然后在“此”之后:“重建”。

     

然后该错误应消失;-)

     

-casisto

     

https://forum.qt.io/topic/52439/get-undefined-reference-error-but-don-t-know-why/2