Skip to content

Commit e5ec7b9

Browse files
committed
Add support for building against Qt6
- Update CMakeLists.txt to try to load Qt6 and fallback to Qt5 if this is not possible - Update C++ standard requirement to C++17 since Qt6 requires a C++17 compiler now - Replace removed `QRegExp` with `QRegularExpression` - Replace `QString::SkipEmptyParts` with `Qt::SkipEmptyParts` for Qt>=6 (in order to support all Qt5 versions we still have to use `QString::SkipEmptyParts` since `Qt::SkipEmptyParts` was first introduced with Qt 5.14)
1 parent e27890f commit e5ec7b9

File tree

6 files changed

+31
-19
lines changed

6 files changed

+31
-19
lines changed

CMakeLists.txt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ project(StyleSheets CXX)
2424
set(StyleSheets_VERSION_MAJOR 0)
2525
set(StyleSheets_VERSION_MINOR 1)
2626

27-
# Enable C++11
27+
# Enable C++17
2828
include(CheckCXXCompilerFlag)
2929
if(MSVC)
3030
# Check if we are using Visual Studio 2015 or later
3131
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
3232
message(FATAL_ERROR "You are using an unsupported Windows compiler! (Visual C++ 2015 or later required)")
3333
endif()
3434
else()
35-
set(cxx11_options -std=c++11)
36-
CHECK_CXX_COMPILER_FLAG(${cxx11_options} COMPILER_SUPPORTS_CXX11)
35+
set(cxx17_options -std=c++17)
36+
CHECK_CXX_COMPILER_FLAG(${cxx17_options} COMPILER_SUPPORTS_CXX17)
3737

38-
if(NOT COMPILER_SUPPORTS_CXX11)
39-
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has insufficient C++11 support. Please use a different C++ compiler.")
38+
if(NOT COMPILER_SUPPORTS_CXX17)
39+
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has insufficient C++17 support. Please use a different C++ compiler.")
4040
endif()
4141
endif()
4242

@@ -82,10 +82,8 @@ set(PLUGIN_INSTALL_DIR "${PROJECT_BINARY_DIR}/lib/qml")
8282

8383
enable_testing()
8484

85-
find_package(Qt5Quick 5.3.0 REQUIRED)
86-
find_package(Qt5Qml 5.3.0 REQUIRED)
87-
find_package(Qt5Test 5.3.0 REQUIRED)
88-
find_package(Qt5QuickTest 5.3.0 REQUIRED)
85+
find_package(QT NAMES Qt6 Qt5 COMPONENTS Quick Qml Test QuickTest REQUIRED)
86+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Quick Qml Test QuickTest REQUIRED)
8987

9088
if(DEFINED Boost_INCLUDE_DIR)
9189
get_filename_component(Boost_INCLUDE_DIR ${Boost_INCLUDE_DIR} ABSOLUTE)

src/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ add_library(StyleSheetParser
4242
target_include_directories(StyleSheetParser PUBLIC
4343
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include;${PROJECT_SOURCE_DIR}/third-party;${Boost_INCLUDE_DIRS}>")
4444
target_compile_options(StyleSheetParser
45-
PUBLIC ${cxx11_options} ${warning_options})
45+
PUBLIC ${cxx17_options} ${warning_options})
4646

47-
target_link_libraries(StyleSheetParser Qt5::Quick)
47+
target_link_libraries(StyleSheetParser Qt${QT_VERSION_MAJOR}::Quick)
4848

4949
add_library(StylePlugin MODULE
5050
StyleChecker.cpp
@@ -63,7 +63,7 @@ add_library(StylePlugin MODULE
6363
StylesDirWatcher.cpp
6464
StylesDirWatcher.hpp
6565
)
66-
target_link_libraries(StylePlugin StyleSheetParser Qt5::Quick)
66+
target_link_libraries(StylePlugin StyleSheetParser Qt${QT_VERSION_MAJOR}::Quick)
6767

6868
if(WIN32)
6969
set_target_properties(StylePlugin PROPERTIES PREFIX "")

src/Convert.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ THE SOFTWARE.
2525
#include "Warnings.hpp"
2626

2727
SUPPRESS_WARNINGS
28+
#include <QtCore/QRegularExpression>
2829
#include <QtGui/QColor>
2930
#include <QtGui/QFont>
3031
#include <boost/algorithm/clamp.hpp>
@@ -148,10 +149,10 @@ FontSize takeFontSizeFromTokenList(QStringList& tokens)
148149
if (!tokens.isEmpty()) {
149150
const QString sizeStr = tokens.takeFirst();
150151

151-
if (sizeStr.contains(QRegExp("^\\d+px$"))) {
152-
fontSize.pixelSize = sizeStr.split(QRegExp("px")).at(0).toInt();
153-
} else if (sizeStr.contains(QRegExp("^\\d+(\\.\\d+)?pt$"))) {
154-
fontSize.pointSize = sizeStr.split(QRegExp("pt")).at(0).toDouble();
152+
if (sizeStr.contains(QRegularExpression("^\\d+px$"))) {
153+
fontSize.pixelSize = sizeStr.split(QRegularExpression("px")).at(0).toInt();
154+
} else if (sizeStr.contains(QRegularExpression("^\\d+(\\.\\d+)?pt$"))) {
155+
fontSize.pointSize = sizeStr.split(QRegularExpression("pt")).at(0).toDouble();
155156
} else {
156157
tokens.prepend(sizeStr);
157158
}
@@ -173,7 +174,11 @@ font: "italic smallcaps bold 16px Times New Roman"
173174
*/
174175
QFont fontDeclarationToFont(const QString& fontDecl)
175176
{
176-
QStringList tokens = fontDecl.split(QRegExp("\\s* \\s*"), QString::SkipEmptyParts);
177+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
178+
QStringList tokens = fontDecl.split(QRegularExpression("\\s* \\s*"), QString::SkipEmptyParts);
179+
#else
180+
QStringList tokens = fontDecl.split(QRegularExpression("\\s* \\s*"), Qt::SkipEmptyParts);
181+
#endif
177182

178183
const QFont::Style fontStyle = takeFontStyleFromTokenList(tokens);
179184
const QFont::Capitalization capMode = takeCapitalizationStyleFromTokenList(tokens);

src/StyleSet.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ std::vector<std::string> styleClassName(QObject* pObj)
7272
std::vector<std::string> classNames;
7373

7474
if (pStyleSet) {
75+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
7576
for (auto className : pStyleSet->name().split(" ", QString::SkipEmptyParts)) {
77+
#else
78+
for (auto className : pStyleSet->name().split(" ", Qt::SkipEmptyParts)) {
79+
#endif
7680
classNames.emplace_back(className.toStdString());
7781
}
7882
}

tests/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ add_library(AqtTestUtilsPlugin MODULE
3030
TestUtils.cpp
3131
)
3232
target_compile_options(AqtTestUtilsPlugin
33-
PUBLIC ${cxx11_options} ${warning_options})
33+
PUBLIC ${cxx17_options} ${warning_options})
3434
target_link_libraries(AqtTestUtilsPlugin
35-
Qt5::Qml Qt5::Test Qt5::QuickTest)
35+
Qt${QT_VERSION_MAJOR}::Qml
36+
Qt${QT_VERSION_MAJOR}::Test
37+
Qt${QT_VERSION_MAJOR}::QuickTest
38+
)
3639

3740
if(WIN32)
3841
set_target_properties(StylePlugin PROPERTIES PREFIX "")

tests/TestUtils.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ class MsgTracker : public QObject
5959
{
6060
if (pattern.userType() == QMetaType::QRegularExpression) {
6161
QTest::ignoreMessage(QtMsgType(level), pattern.toRegularExpression());
62+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
6263
} else if (pattern.userType() == QMetaType::QRegExp) {
6364
QTest::ignoreMessage(
6465
QtMsgType(level), QRegularExpression(pattern.toRegExp().pattern()));
66+
#endif
6567
} else {
6668
QTest::ignoreMessage(QtMsgType(level), pattern.toString().toUtf8().data());
6769
}

0 commit comments

Comments
 (0)