在Qt的5 CMake的手册指出所述qt5_use_modules宏弃用:
这个宏已经过时了.请将target_link_libraries与IMPORTED目标一起使用.
...但qt5_use_modules不仅仅是指定链接库:它指定包含目录,必要的编译标志等(请参阅上面链接文档中的完整描述).
那么,假设变量QTMODULES包含一些应该用于项目的Qt模块列表,那么替换以下"已弃用"的CMake线的"推荐"方法是什么?
qt5_use_modules(${myProjectName} ${QTMODULES})
Run Code Online (Sandbox Code Playgroud)
以下不起作用,主要是因为它不添加任何Qt包含路径:
target_link_libraries(${myProjectName} IMPORTED ${QTMODULES})
Run Code Online (Sandbox Code Playgroud)
QTMODULES变量是否需要手动迭代,以便include_directories可以为每个单独的模块名称调用?这似乎是向后退一步qt5_use_modules,这很简单,"只是有效".我错过了什么吗?
我愿意在Qt Quick Controls 2和C ++中的CMake项目中使用样式。而且我很难使颜色正确。
C ++,qml和样式代码来自qt博客,并且只要我使用.pro项目文件,它就可以正常工作,但是当我转向CMakeLists.txt时,我无法正确设置颜色(我相信它们是默认的颜色深色/紫色,而不是深色/橙色)。
在.pro项目中,我的main.cpp如下所示:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickStyle>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQuickStyle::setStyle("Material");
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我的qml.qrc文件看起来像这样:
<!DOCTYPE RCC>
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>CustomLabel.qml</file>
<file>PageBackground.qml</file>
<file>SideBar.qml</file>
<file>SideBarForm.ui.qml</file>
<file>Light.qml</file>
<file>LightForm.ui.qml</file>
<file>Heating.qml</file>
<file>HeatingForm.ui.qml</file>
<file>Security.qml</file>
<file>SecurityForm.ui.qml</file>
<file>qtquickcontrols2.conf</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
和我的qtquickcontrols2.conf文件是这样的:
[Controls]
Style=Material
[Universal]
Theme=Dark
Accent=DeepOrange
[Material]
Theme=Dark
Accent=DeepOrange
Run Code Online (Sandbox Code Playgroud)
现在,我的CMake项目文件夹包含完全相同的文件(实际上是.pro项目文件夹的副本和粘贴),除了我删除了.pri和.pro文件,现在它包含一个CMakeLists.txt …
来自这个主题: Ubuntu CMake添加到CMAKE_MODULE_PATH的路径
我尝试在我的项目中运行QT5,因为QT4不允许我包含QWebView.
按照上述主题的指南,我现在有一个CMakeList.txt:
cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
project (simpleTree)
find_package(Qt5 REQUIRED COMPONENTS Widgets Core)
find_package (VTK REQUIRED)
find_package (PCL 1.8.0 REQUIRED)
include_directories (${PCL_INCLUDE_DIRS})
link_directories (${PCL_LIBRARY_DIRS})
add_definitions (${PCL_DEFINITIONS})
set (project_SOURCES export/exportply.cpp export/writecsv.cpp main.cpp
controller.cpp
gui/pclviewer.cpp
import/importpcd.cpp
method/SphereFollowing.cpp
Model/crown.cpp
Model/Cylinder.cpp
Model/Segment.cpp
Model/Tree.cpp)
set (project_HEADERS controller.h
export/writecsv.h
export/exportply.h
gui/pclviewer.h
import/importpcd.h
method/SphereFollowing.h
Model/crown.h
Model/Cylinder.h
Model/Segment.h
Model/Tree.h)
set (project_FORMS gui/pclviewer.ui)
set (VTK_LIBRARIES vtkRendering vtkGraphics vtkHybrid QVTK)
QT5_WRAP_CPP (project_HEADERS_MOC ${project_HEADERS})
QT5_WRAP_UI (project_FORMS_HEADERS ${project_FORMS})
INCLUDE (${QT_USE_FILE})
ADD_DEFINITIONS (${QT_DEFINITIONS})
ADD_EXECUTABLE (simpleTree ${project_SOURCES}
${project_FORMS_HEADERS}
${project_HEADERS_MOC})
TARGET_LINK_LIBRARIES (simpleTree …Run Code Online (Sandbox Code Playgroud) 我的操作系统是Ubuntu.我想在我的项目中从QT4更改为QT5.虽然本机包在Ubuntu中是4.x版本.
我从QT主页下载了Linux安装程序并安装了QT5.4 /opt/Qt/5.4/
找不到此路径
find_package (Qt5 REQUIRED)
Run Code Online (Sandbox Code Playgroud)
我尝试添加
set(CMAKE_MODULE_PATH "/opt/QT/5.4;${CMAKE_MODULE_PATH}")
Run Code Online (Sandbox Code Playgroud)
对我而言CMAKELIST.txt,这没有用.
我在哪里链接,或者我使用错误的语法?
在通过调用提示之后的一些编辑:
cmake -DCMAKE_PREFIX_PATH=/opt/QT/5.4/gcc_64/ ../src/
Run Code Online (Sandbox Code Playgroud)
我也删除了CMAKE_MODULE_PATH变量.我仍然得到同样的错误:
CMake Error at CMakeLists.txt:3 (find_package):
Found package configuration file:
/usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake
but it set Qt5_FOUND to FALSE so package "Qt5" is considered to be NOT
FOUND. Reason given by package:
The Qt5 package requires at least one component
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会在阅读https://blogs.kde.org/2008/12/12/how-get-cmake-find-what-you-want-it后发生这种情况 .在那里声明,将在默认搜索目录之前搜索路径.我现在使用的路径似乎是:
/opt/QT/5.4/gcc_64/
Run Code Online (Sandbox Code Playgroud)
添加子文件夹gcc_64必须正确,因为此子文件夹具有"lib","include"等子文件夹.
我记得我也打过电话
sudo apt-get install QT5-default
Run Code Online (Sandbox Code Playgroud)
前一段时间.这没有用,我需要QT的安装程序.虽然我再次删除了qt5-default以防止cmake找到错误的包配置文件,但仍会出现相同的错误.
请参阅下面的讨论,转到此处: Cmake和QT5 - Include只接受一个参数
我有一个简单的CMake项目:
proj (project folder)
??? a.h
??? a.cpp
??? CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
的CMakeLists.txt:
cmake_minimum_required(VERSION 3.2)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_AUTOMOC ON)
project(proj)
set( proj_SOURCE
a.cpp
)
find_package(Qt5Core)
set( proj_LIBRARIES
Qt5::Core
)
add_library(proj SHARED ${proj_SOURCE})
target_link_libraries(proj ${proj_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
啊:
#pragma once
#include <QObject>
class A : public QObject
{
Q_OBJECT
public:
explicit A(QObject *parent = 0);
};
Run Code Online (Sandbox Code Playgroud)
a.cpp:
#include "a.h"
A::A(QObject *parent) : QObject(parent)
{
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.接下来,我尝试将头文件和源文件移动到不同的文件夹中,如下所示:
proj (project folder)
??? include
? ??? a.h
??? src
? ??? a.cpp
??? CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
并尝试了以下调用的不同配置:
include_directories("include")
include_directories("src")
set( …Run Code Online (Sandbox Code Playgroud)