From ed61fea3372332db9429de74edff1fcdba04df41 Mon Sep 17 00:00:00 2001 From: xiepengfei Date: Tue, 2 Jun 2026 16:40:43 +0800 Subject: [PATCH] test: adapt unit tests for Qt5/Qt6 dual compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add qteventcompat.h with QT_COMPAT_MOUSE_EVENT and QT_COMPAT_WHEEL_EVENT macros to handle QMouseEvent and QWheelEvent constructor signature changes between Qt5/Qt6. Update CMakeLists.txt to auto-detect Qt version (5 or 6), upgrade C++ standard to C++17, use modern cmake target-based linking, and remove deprecated qt5_use_modules. 添加qteventcompat.h兼容头文件,处理Qt5/Qt6鼠标和滚轮 事件构造函数签名差异;更新CMake构建系统自动检测Qt版本, 升级C++标准至C++17,使用现代CMake链接方式。 Log: 单元测试适配Qt5/Qt6双版本兼容 Influence: 测试代码可同时兼容Qt5和Qt6构建环境,无需 手动修改事件构造代码即可在不同Qt版本上编译运行。 --- tests/CMakeLists.txt | 55 +++++++++++++++----------- tests/testItems/publicApi.cpp | 27 +++++++------ tests/testItems/qteventcompat.h | 57 +++++++++++++++++++++++++++ tests/testItems/test_ellipseItem.cpp | 9 +++-- tests/testItems/test_function.cpp | 11 ++++-- tests/testItems/test_lineItem.cpp | 9 +++-- tests/testItems/test_pictureItem.cpp | 10 +++-- tests/testItems/test_polygonItem.cpp | 9 +++-- tests/testItems/test_rectItem.cpp | 9 +++-- tests/testItems/test_startItem.cpp | 9 +++-- tests/testItems/test_textItem.cpp | 27 +++++++------ tests/testItems/test_triangleItem.cpp | 9 +++-- tests/test_qtestmain.cpp | 8 ++-- 13 files changed, 167 insertions(+), 82 deletions(-) create mode 100644 tests/testItems/qteventcompat.h diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b6a936f44..12f1a5263 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,8 +1,8 @@ # 定义需要的cmake版本 -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) -# 设置cmake参数 -set(CMAKE_CXX_STANDARD 14) +# 设置cmake参数(与主工程保持一致,使用 C++17) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) @@ -11,6 +11,20 @@ set(CMAKE_AUTOUIC ON) # 设置工程名字 project(deepin-draw-test) +# 测试代码需要使用主工程设置的 Qt / DTK 版本 +if(NOT DEFINED QT_VERSION_MAJOR) + find_package(Qt6 QUIET) + if(Qt6_FOUND) + set(QT_VERSION_MAJOR 6) + set(DTK_VERSION_MAJOR 6) + else() + find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Test) + set(QT_VERSION_MAJOR 5) + set(DTK_VERSION_MAJOR "") + endif() +endif() +message(STATUS "Tests will be built against Qt${QT_VERSION_MAJOR} / DTK${DTK_VERSION_MAJOR}") + option(DEEPINDRAW_TEST_OFFSCREENT "test in off screen." ON) if(DEEPINDRAW_TEST_OFFSCREENT) add_definitions(-DTEST_OFFSCREENT) @@ -105,28 +119,21 @@ if(DEEPINDRAW_TEST_DIALOG_ITEM) add_definitions(-DTEST_DIALOG) endif() -# 设置Qt模块 -set(QtModule Core Gui Widgets DBus PrintSupport Svg Concurrent LinguistTools Test) - -# 查找Qt相关的库链接 -find_package(Qt5 REQUIRED ${QtModule}) +# 设置Qt模块(按 Qt 主版本选择对应组件名) +if(QT_VERSION_MAJOR EQUAL 6) + set(QtModule Core Gui Widgets DBus PrintSupport Svg SvgWidgets Concurrent Test) + find_package(Qt6 REQUIRED COMPONENTS ${QtModule}) +else() + set(QtModule Core Gui Widgets DBus PrintSupport Svg Concurrent Test) + find_package(Qt5 REQUIRED COMPONENTS ${QtModule}) +endif() #注意mips不支持-fsanitize if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64") - #set(CMAKE_CXX_FLAGS "-g -O1 -fprofile-arcs -ftest-coverage") set(CMAKE_CXX_FLAGS "-g -O1 -fprofile-arcs -ftest-coverage") - #set(CMAKE_C_FLAGS "-g -O1 -fprofile-arcs -ftest-coverage") - set(CMAKE_L_FLAGS "-g -O1 -fprofile-arcs -ftest-coverage") - - #mips not support -fsanitize,so only -lgcov when link ${BASE_LIB}. set(CMAKE_EXE_LINKER_FLAGS "-lgcov") else() - #set(CMAKE_CXX_FLAGS "-fsanitize=undefined,address,leak -fno-omit-frame-pointer -g -O1 -fprofile-arcs -ftest-coverage") set(CMAKE_CXX_FLAGS "-g -O1 -fprofile-arcs -ftest-coverage") - #set(CMAKE_C_FLAGS "-fsanitize=undefined,address,leak -fno-omit-frame-pointer -g -O1 -fprofile-arcs -ftest-coverage") - set(CMAKE_L_FLAGS "-fsanitize=undefined,address,leak -fno-omit-frame-pointer -g -O1 -fprofile-arcs -ftest-coverage") - - # because ${BASE_LIB} lib is compile with -fsanitize and -lgcov,so we should add those flag when link it. set(CMAKE_EXE_LINKER_FLAGS "-fsanitize=undefined,address,leak -lgcov") # notice code that we should output memery use info. @@ -161,9 +168,11 @@ target_link_libraries(${PROJECT_NAME} gmock gmock_main gtest gtest_main pthread # 使用第三方库需要用到的一个包 find_package(PkgConfig REQUIRED) -# 检查第三方库(这里检查了名字为dtkwidget的库和名字为dtkgui的库),然后取名3RMODULES +# 检查第三方库(注意 Qt5 下名为 dtkwidget,Qt6 下名为 dtk6widget) pkg_check_modules(3RMODULES REQUIRED - dtkwidget dtkgui + dtk${DTK_VERSION_MAJOR}widget + dtk${DTK_VERSION_MAJOR}gui + dtk${DTK_VERSION_MAJOR}core ) # 添加第三方库的所有文件夹路径到工程中来(注意 *_INCLUDE_DIRS) @@ -174,5 +183,7 @@ target_link_libraries(${PROJECT_NAME} ${3RMODULES_LIBRARIES}) #------------------------------添加第三方库end------------------------------------- -# 将工程与Qt模块链接起来 -qt5_use_modules(${PROJECT_NAME} ${QtModule}) +# 将工程与 Qt 模块链接起来(兼容 Qt5 / Qt6) +foreach(module IN LISTS QtModule) + target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::${module}) +endforeach() diff --git a/tests/testItems/publicApi.cpp b/tests/testItems/publicApi.cpp index e5ef5ecc7..8418b080c 100644 --- a/tests/testItems/publicApi.cpp +++ b/tests/testItems/publicApi.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +10,7 @@ #include #include #include +#include "qteventcompat.h" #include @@ -89,7 +90,7 @@ class DMouseMoveEvent: public QTestMouseEvent QTest::lastMouseTimestamp += _delay; } - QMouseEvent me(QEvent::MouseMove, _pos, _button, _button, _modifiers); + QT_COMPAT_MOUSE_EVENT(me, QEvent::MouseMove, _pos, _button, _button, _modifiers); me.setTimestamp(ulong(++QTest::lastMouseTimestamp)); QSpontaneKeyEvent::setSpontaneous(&me); if (!dApp->notify(w, &me)) { @@ -249,8 +250,8 @@ void setBrushColor(CGraphicsItem *item, QColor color) item = dynamic_cast(item->drawScene()->getBzItems().first()); // [0] show colorPanel - QMouseEvent mousePressEvent(QEvent::MouseButtonPress, QPointF(5, 5), - Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QT_COMPAT_MOUSE_EVENT(mousePressEvent, QEvent::MouseButtonPress, QPointF(5, 5), + Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); dApp->sendEvent(brush, &mousePressEvent); QTest::qWait(200); CColorPickWidget *pickColor = brush->colorPick(); @@ -284,11 +285,11 @@ void setBrushColor(CGraphicsItem *item, QColor color) QTest::qWait(200); dApp->sendEvent(iconbutton, &mousePressEvent); QTest::qWait(200); - QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, QPointF(5, 5), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QT_COMPAT_MOUSE_EVENT(mouseReleaseEvent, QEvent::MouseButtonRelease, QPointF(5, 5), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); dApp->sendEvent(iconbutton, &mouseReleaseEvent); QTest::qWait(200); - event = QEvent(QEvent::Leave); - dApp->sendEvent(iconbutton, &event); + QEvent leaveEvent(QEvent::Leave); + dApp->sendEvent(iconbutton, &leaveEvent); QTest::qWait(200); // [4] picker color @@ -342,30 +343,30 @@ void resizeItem() for (int i = 0; i < handles.size(); ++i) { CSizeHandleRect *pNode = handles[i]; QPoint posInView = view->mapFromScene(pNode->mapToScene(pNode->boundingRect().center())); - QMouseEvent mouseEvent(QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent, QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); QApplication::sendEvent(view->viewport(), &mouseEvent); QTest::qWait(delay); - QMouseEvent mouseEvent1(QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent1, QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); QApplication::sendEvent(view->viewport(), &mouseEvent1); QTest::qWait(delay); } for (int i = 0; i < handles.size(); ++i) { CSizeHandleRect *pNode = handles[i]; QPoint posInView = view->mapFromScene(pNode->mapToScene(pNode->boundingRect().center())); - QMouseEvent mouseEvent(QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent, QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent); QTest::qWait(delay); - QMouseEvent mouseEvent1(QEvent::MouseMove, posInView - QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent1, QEvent::MouseMove, posInView - QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent1); QTest::qWait(delay); } for (int i = 0; i < handles.size(); ++i) { CSizeHandleRect *pNode = handles[i]; QPoint posInView = view->mapFromScene(pNode->mapToScene(pNode->boundingRect().center())); - QMouseEvent mouseEvent(QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent, QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent); QTest::qWait(delay); - QMouseEvent mouseEvent1(QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent1, QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent1); QTest::qWait(delay); } diff --git a/tests/testItems/qteventcompat.h b/tests/testItems/qteventcompat.h new file mode 100644 index 000000000..2d173999a --- /dev/null +++ b/tests/testItems/qteventcompat.h @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +// 本头文件提供 Qt5 / Qt6 通用的事件构造辅助宏。 +// +// 背景:QWheelEvent / QMouseEvent 在 Qt6 中删除了 Qt5 时期的兼容构造函数, +// 测试代码需要同时兼容两种 Qt 版本,因此在此集中处理差异。 +// +// 用法: +// QT_COMPAT_WHEEL_EVENT(name, pos, delta, button, modifiers) +// QT_COMPAT_MOUSE_EVENT(name, type, pos, button, buttons, modifiers) +// 这两个宏会以正确的参数列表「原地构造」对应类型的局部变量 name。 + +#ifndef QTEVENTCOMPAT_H +#define QTEVENTCOMPAT_H + +#include +#include +#include +#include +#include +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +# include +# include +#endif + +// 构造一个名为 name 的 QWheelEvent 局部变量,参数语义沿用 Qt5 风格: +// pos : 鼠标位置 (QPointF) +// delta : 滚轮增量 (int,正负代表方向) +// button : 触发按键 (Qt::MouseButton) +// modifiers : 修饰键 (Qt::KeyboardModifiers) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +# define QT_COMPAT_WHEEL_EVENT(name, pos, delta, button, modifiers) \ + QWheelEvent name((pos), (pos), QPoint(), QPoint(0, (delta)), \ + Qt::MouseButtons(button), (modifiers), \ + Qt::NoScrollPhase, false) +#else +# define QT_COMPAT_WHEEL_EVENT(name, pos, delta, button, modifiers) \ + QWheelEvent name((pos), (delta), (button), (modifiers)) +#endif + +// 构造一个名为 name 的 QMouseEvent 局部变量,参数语义沿用 Qt5 风格: +// type : 事件类型 (QEvent::Type) +// pos : 鼠标位置 (QPointF) +// button : 触发按键 (Qt::MouseButton) +// buttons : 当前按键状态 (Qt::MouseButtons) +// modifiers : 修饰键 (Qt::KeyboardModifiers) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +# define QT_COMPAT_MOUSE_EVENT(name, type, pos, button, buttons, modifiers) \ + QMouseEvent name((type), (pos), (pos), (button), (buttons), (modifiers)) +#else +# define QT_COMPAT_MOUSE_EVENT(name, type, pos, button, buttons, modifiers) \ + QMouseEvent name((type), (pos), (button), (buttons), (modifiers)) +#endif + +#endif // QTEVENTCOMPAT_H diff --git a/tests/testItems/test_ellipseItem.cpp b/tests/testItems/test_ellipseItem.cpp index 4e7f844e2..bfab41b09 100644 --- a/tests/testItems/test_ellipseItem.cpp +++ b/tests/testItems/test_ellipseItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -13,6 +13,7 @@ #include "cdrawtoolfactory.h" #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" @@ -164,11 +165,11 @@ TEST(EllipseItem, TestSelectAllEllipseItem) emit view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_function.cpp b/tests/testItems/test_function.cpp index 135dc83af..472741c40 100644 --- a/tests/testItems/test_function.cpp +++ b/tests/testItems/test_function.cpp @@ -1,7 +1,12 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later +#include "qteventcompat.h" +// Pre-include standard headers before #define private public to avoid +// breaking C++ standard library internals (e.g. std::basic_stringbuf). +#include + #define protected public #define private public #include "mainwindow.h" @@ -303,7 +308,7 @@ TEST(TestFunction, CSpinBox) box.contextMenuEvent(nullptr); - QMouseEvent e_md(QEvent::Type::MouseButtonDblClick, QPointF(1, 1), Qt::MouseButton::LeftButton, Qt::MouseButtons(), Qt::KeyboardModifier::NoModifier); + QT_COMPAT_MOUSE_EVENT(e_md, QEvent::Type::MouseButtonDblClick, QPointF(1, 1), Qt::MouseButton::LeftButton, Qt::MouseButtons(), Qt::KeyboardModifier::NoModifier); box.mouseDoubleClickEvent(&e_md); } @@ -410,7 +415,7 @@ TEST(TestFunction, CDrawToolEvent) auto scene = page->scene(); //mouse - QMouseEvent e_1(QEvent::Type::MouseButtonPress, QPointF(100, 100), Qt::MouseButton::LeftButton, Qt::MouseButtons(), Qt::KeyboardModifier::NoModifier); + QT_COMPAT_MOUSE_EVENT(e_1, QEvent::Type::MouseButtonPress, QPointF(100, 100), Qt::MouseButton::LeftButton, Qt::MouseButtons(), Qt::KeyboardModifier::NoModifier); CDrawToolEvent::fromQEvent(&e_1, scene); //touch diff --git a/tests/testItems/test_lineItem.cpp b/tests/testItems/test_lineItem.cpp index 6fc3e29e0..ef3ba4d3e 100644 --- a/tests/testItems/test_lineItem.cpp +++ b/tests/testItems/test_lineItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -11,6 +11,7 @@ #include "cviewmanagement.h" #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -219,11 +220,11 @@ TEST(LineItem, TestSelectAllLineItem) emit view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_pictureItem.cpp b/tests/testItems/test_pictureItem.cpp index f801eae66..5be4749dc 100644 --- a/tests/testItems/test_pictureItem.cpp +++ b/tests/testItems/test_pictureItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -9,6 +9,8 @@ #include "cgraphicsview.h" #include +#include "qteventcompat.h" + #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -322,11 +324,11 @@ TEST(PictureItem, TestSelectAllPictureItem) view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_polygonItem.cpp b/tests/testItems/test_polygonItem.cpp index b3367201c..786b424fe 100644 --- a/tests/testItems/test_polygonItem.cpp +++ b/tests/testItems/test_polygonItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +10,7 @@ #include #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -186,11 +187,11 @@ TEST(PolygonItem, TestSelectAllPolygonItem) emit view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_rectItem.cpp b/tests/testItems/test_rectItem.cpp index 013de3eeb..4e3cd3bcf 100644 --- a/tests/testItems/test_rectItem.cpp +++ b/tests/testItems/test_rectItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +10,7 @@ #include #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -174,11 +175,11 @@ TEST(RectItem, TestSelectAllRectItem) view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 200, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_startItem.cpp b/tests/testItems/test_startItem.cpp index a0105282c..e93757fb5 100644 --- a/tests/testItems/test_startItem.cpp +++ b/tests/testItems/test_startItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +10,7 @@ #include #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -223,11 +224,11 @@ TEST(StartItem, TestSelectAllStartItem) view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_textItem.cpp b/tests/testItems/test_textItem.cpp index 87eddaef1..f2a92efd8 100644 --- a/tests/testItems/test_textItem.cpp +++ b/tests/testItems/test_textItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +10,7 @@ #include #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -307,45 +308,45 @@ TEST(TextItem, TestTextItemProperty) CSizeHandleRect *pNode = handles[i]; QPoint posInView = view->mapFromScene(pNode->mapToScene(pNode->boundingRect().center())); - QMouseEvent mouseEvent(QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent, QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); QApplication::sendEvent(view->viewport(), &mouseEvent); QTest::qWait(delay); - QMouseEvent mouseEvent1(QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent1, QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); QApplication::sendEvent(view->viewport(), &mouseEvent1); QTest::qWait(delay); - QMouseEvent mouseEvent2(QEvent::MouseButtonRelease, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent2, QEvent::MouseButtonRelease, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier); QApplication::sendEvent(view->viewport(), &mouseEvent2); QTest::qWait(delay); } for (int i = 0; i < handles.size(); ++i) { CSizeHandleRect *pNode = handles[i]; QPoint posInView = view->mapFromScene(pNode->mapToScene(pNode->boundingRect().center())); - QMouseEvent mouseEvent(QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent, QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent); QTest::qWait(delay); - QMouseEvent mouseEvent1(QEvent::MouseMove, posInView - QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent1, QEvent::MouseMove, posInView - QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent1); QTest::qWait(delay); - QMouseEvent mouseEvent2(QEvent::MouseButtonRelease, posInView - QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent2, QEvent::MouseButtonRelease, posInView - QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent2); QTest::qWait(delay); } for (int i = 0; i < handles.size(); ++i) { CSizeHandleRect *pNode = handles[i]; QPoint posInView = view->mapFromScene(pNode->mapToScene(pNode->boundingRect().center())); - QMouseEvent mouseEvent(QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent, QEvent::MouseButtonPress, posInView, Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent); QTest::qWait(delay); - QMouseEvent mouseEvent1(QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent1, QEvent::MouseMove, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent1); QTest::qWait(delay); - QMouseEvent mouseEvent2(QEvent::MouseButtonRelease, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); + QT_COMPAT_MOUSE_EVENT(mouseEvent2, QEvent::MouseButtonRelease, posInView + QPoint(20, 20), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier | Qt::AltModifier); QApplication::sendEvent(view->viewport(), &mouseEvent2); QTest::qWait(delay); } @@ -390,11 +391,11 @@ TEST(TextItem, TestSelectAllTextItem) //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/testItems/test_triangleItem.cpp b/tests/testItems/test_triangleItem.cpp index a8e156c39..38ff773db 100644 --- a/tests/testItems/test_triangleItem.cpp +++ b/tests/testItems/test_triangleItem.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +10,7 @@ #include #undef protected #undef private +#include "qteventcompat.h" #include "ccentralwidget.h" #include "clefttoolbar.h" #include "toptoolbar.h" @@ -161,11 +162,11 @@ TEST(TriangleItem, TestSelectAllTriangleItem) view->m_itemsHEqulSpaceAlign->triggered(true); //滚轮事件 - QWheelEvent wheelevent(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ControlModifier); view->wheelEvent(&wheelevent); - QWheelEvent wheelevent2(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent2, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::NoModifier); view->wheelEvent(&wheelevent2); - QWheelEvent wheelevent3(QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); + QT_COMPAT_WHEEL_EVENT(wheelevent3, QPointF(1000, 1000), 100, Qt::MouseButton::NoButton, Qt::KeyboardModifier::ShiftModifier); view->wheelEvent(&wheelevent3); } diff --git a/tests/test_qtestmain.cpp b/tests/test_qtestmain.cpp index 8842ee541..045119806 100644 --- a/tests/test_qtestmain.cpp +++ b/tests/test_qtestmain.cpp @@ -1,7 +1,11 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later +// Pre-include standard headers before #define private to avoid +// breaking C++ standard library internals (e.g. std::basic_stringbuf). +#include + #define private protected #include #undef private @@ -48,7 +52,6 @@ static void initQrcIfStaticLib() #define QMYTEST_MAIN(TestObject) \ QT_BEGIN_NAMESPACE \ - QTEST_ADD_GPU_BLACKLIST_SUPPORT_DEFS \ QT_END_NAMESPACE \ int main(int argc, char *argv[]) \ { \ @@ -56,7 +59,6 @@ static void initQrcIfStaticLib() initQrcIfStaticLib();\ Application app(argc, argv); \ QTEST_DISABLE_KEYPAD_NAVIGATION \ - QTEST_ADD_GPU_BLACKLIST_SUPPORT \ TestObject tc; \ QTEST_SET_MAIN_SOURCE_PATH \ return QTest::qExec(&tc, argc, argv); \