我刚开始使用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*)'
这是一个链接问题,但我该如何解决?
答案 0 :(得分:4)
以下是我认为您遗失的内容:
find_package(Qt4 REQUIRED QtGui)
查看您的cmake,您可能希望更改target_link_libraries
以获取以下内容:
target_link_libraries(new ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
答案 1 :(得分:2)
你有三个问题:
您没有链接Gui模块(Qt 5中的Widgets模块)。这包含在the other answer。
您必须在基于窗口小部件的应用程序中使用.....
var newDoc = new HtmlDocument();
newDoc.LoadHtml(new_script);
var newScript = newDoc.DocumentNode.SelectSingleNode("//script");
scriptNode.ParentNode.ReplaceChild(newScript, script);
。由于QApplication
来自Gui模块(Qt5中的小部件),因此您不能仅使用QPushButton
或QCoreApplication
:一旦尝试实例化{QGuiApplication
,您的程序就会崩溃{1}}。
您没有显示该按钮,因此当您的程序启动时,一旦您解决了上述问题,您将看不到任何内容。
您的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