port to Qt5

This commit is contained in:
numzero 2026-10-20 03:09:48 +03:00
parent f56fd9f7db
commit a78b5da75c
4 changed files with 20 additions and 12 deletions

View File

@ -5,12 +5,14 @@ project(gear-cutter VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Gui Widgets)
find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets X11Extras)
find_program(CARGO cargo REQUIRED)
set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/cargo")
include(cbindgen.cmake)
qt_standard_project_setup()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
include(GNUInstallDirs)
add_subdirectory(ui)

View File

@ -1,6 +1,6 @@
include(impl.cmake)
qt_add_executable(gear-cutter
add_executable(gear-cutter
src/api.cxx
src/main.cxx
src/main_window.cxx
@ -8,6 +8,6 @@ qt_add_executable(gear-cutter
src/viewport.cxx
)
target_link_libraries(gear-cutter PRIVATE Qt6::Gui Qt6::Widgets)
target_link_libraries(gear-cutter PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::X11Extras X11-xcb)
target_link_libraries(gear-cutter PRIVATE gear_cutter_impl)
target_include_directories(gear-cutter PRIVATE src)

View File

@ -1,7 +1,10 @@
#include "main_window.hxx"
#include "ui_main_window.h"
#include <cmath>
#include <QtMath>
GearCutter::GearCutter(QWidget* parent)
: QMainWindow(parent),
m_ui(new Ui::MainWindow) {

View File

@ -3,6 +3,10 @@
#include <QApplication>
#include <QEvent>
#include <QGuiApplication>
#include <QX11Info>
// must be the last as it is macro-heavy
#include <X11/Xlib-xcb.h>
Viewport::Viewport(QWidget* parent, Qt::WindowFlags f)
: QWidget(parent, f) {
@ -55,15 +59,14 @@ void Viewport::resizeEvent(QResizeEvent* event) {
}
void Viewport::recreate() try {
auto* app = qobject_cast<QGuiApplication*>(QApplication::instance());
if (!app)
throw std::runtime_error("not a GUI application (WTF?)");
auto* xlib_display = QX11Info::display();
if (!xlib_display)
throw std::runtime_error("got no X11 display");
auto* native = app->nativeInterface<QNativeInterface::QX11Application>();
if (!native)
throw std::runtime_error("X11 interface is not available");
auto* xcb_connection = XGetXCBConnection(xlib_display);
if (!xcb_connection)
throw std::runtime_error("failed to get the XCB connection from the X11 display");
auto* xcb_connection = native->connection();
std::uint32_t x11_window = winId();
fprintf(stderr, "connection %p, window %#08x\n", xcb_connection, x11_window);