Qt6 函数未定义

Qt6 functions are undefined

提问人:Black Hat 提问时间:10/28/2023 最后编辑:genpfaultBlack Hat 更新时间:11/4/2023 访问量:54

问:

我使用命令在 Ubuntu 上安装了 Qt6。我创建了Clion Qt6项目并编写了简单的窗口代码:sudo apt install qt6-base-dev

#include <QCoreApplication>
#include <QDebug>
#include <QtWidgets/QWidget>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QWidget window;
    window.resize(320, 240);
    window.show();
    window.setWindowTitle(
            QCoreApplication::translate("toplevel", "Notepad")
    );
    return QCoreApplication::exec();
}

所以,我试着建造它。并得到错误

/home/usr/CLionProjects/untitled/main.cpp:8:(.text+0x58): undefined reference to `QWidget::QWidget(QWidget*, QFlags<Qt::WindowType>)'
/usr/bin/ld: /home/usr/CLionProjects/untitled/main.cpp:10:(.text+0x7a): undefined reference to `QWidget::show()'
/usr/bin/ld: /home/usr/CLionProjects/untitled/main.cpp:11:(.text+0xb2): undefined reference to `QWidget::setWindowTitle(QString const&)'
/usr/bin/ld: /home/usr/CLionProjects/untitled/main.cpp:15:(.text+0xd2): undefined reference to `QWidget::~QWidget()'
/usr/bin/ld: /home/usr/CLionProjects/untitled/main.cpp:15:(.text+0x119): undefined reference to `QWidget::~QWidget()'
/usr/bin/ld: CMakeFiles/untitled.dir/main.cpp.o: в функции «QWidget::resize(int, int)»:
/usr/include/x86_64-linux-gnu/qt6/QtWidgets/qwidget.h:881:(.text._ZN7QWidget6resizeEii[_ZN7QWidget6resizeEii]+0x48): undefined reference to `QWidget::resize(QSize const&)'
collect2: error: ld returned 1 exit status

这是CMakeLists.txt:

cmake_minimum_required(VERSION 3.26)
project(untitled)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)


find_package(Qt6 COMPONENTS
  Core
  REQUIRED)

add_executable(untitled main.cpp)
target_link_libraries(untitled
  Qt::Core
)

我进入了 Qt6 文件。并发现,所有标头都有类、命名空间等的声明。但是所有 C 文件都有一个字符串 - (其中 C 文件是 a.c,header 是 A.h)。#include <A>

我试图重新安装Qt6。但这无济于事。我该如何解决?

C++ cmake clion undefined-reference qt6

评论

5赞 orhtej2 10/28/2023
您需要添加到 .Qt6::Widgetstarget_link_libraries
0赞 Abderrahmene Rayene Mihoub 10/28/2023
您是否阅读过Qt文档:构建C++ GUI应用程序

答:

1赞 in1tiate 11/4/2023 #1

您需要将QWidget添加到链接的库中,如下所示:

CMakeLists.txt:

find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
target_link_libraries(myapp
  Qt::Core
  Qt::Widgets
)

此外,要使用 QWidgets,您需要使用 ,而不是 ,因为后者适用于无头(非 GUI)应用程序。 我建议阅读Qt的CMake应用指南中专注于GUI应用的部分。QApplicationQCoreApplication