отказался от Qt Quick и перешел на Qt Widgets

This commit is contained in:
2026-08-17 23:29:32 +06:00
parent 1616fb113f
commit 65ee88885c
7 changed files with 121 additions and 129 deletions
+46 -21
View File
@@ -2,44 +2,69 @@ cmake_minimum_required(VERSION 3.16)
project(Zenith VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Quick)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
qt_standard_project_setup(REQUIRES 6.10)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
# Content of downloaded design from Figma to Qt or similar
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/importedcontent/CMakeLists.txt")
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/importedcontent)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(Zenith
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET Zenith APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(Zenith SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(Zenith
${PROJECT_SOURCES}
)
endif()
endif()
qt_add_executable(appZenith
main.cpp
)
qt_add_qml_module(appZenith
URI Zenith
QML_FILES
Main.qml
)
target_link_libraries(Zenith PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
set_target_properties(appZenith PROPERTIES
# MACOSX_BUNDLE_GUI_IDENTIFIER com.example.appZenith
if(${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.Zenith)
endif()
set_target_properties(Zenith PROPERTIES
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
target_link_libraries(appZenith
PRIVATE Qt6::Quick
)
install(TARGETS appZenith
include(GNUInstallDirs)
install(TARGETS Zenith
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(Zenith)
endif()
-90
View File
@@ -1,90 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Basic
ApplicationWindow {
id: window
width: 640
height: 480
minimumWidth: 200
minimumHeight: 250
visible: true
title: qsTr("Hello World")
property bool lightMode: Application.styleHints.colorScheme === Qt.Light
property color reallyDark: "#1f1f1f"
property color dark: "#262626"
property color reallyLight: "#e7e7e7"
property color light: "#e0e0e0"
GridLayout {
id: grid
columns: width < 400 ? 1 : 2
rowSpacing: 0
columnSpacing: 0
anchors.fill: parent
Rectangle {
id: rectangle1
color: window.lightMode ? window.reallyLight : window.reallyDark
Layout.fillHeight: true
Layout.fillWidth: true
ColumnLayout {
anchors.fill: parent
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Label {
id: text1
color: window.lightMode ? window.dark : window.light
font.pixelSize: 120
fontSizeMode: Text.Fit
text: qsTr("Hello World")
Layout.fillWidth: true
Layout.fillHeight: true
Layout.margins: 16
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
Rectangle {
id: rectangle2
color: window.lightMode ? window.light : window.dark
Layout.fillHeight: true
Layout.fillWidth: true
ColumnLayout {
anchors.fill: parent
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
Button {
id: button1
text: window.lightMode ? qsTr("\u263D Dark mode")
: qsTr("\u263C Light mode")
Layout.bottomMargin: 16
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
contentItem: Text {
text: button1.text
color: window.lightMode ? window.light : window.dark
font: button1.font
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
background: Rectangle {
implicitWidth: 120
implicitHeight: 36
radius: 8
color: window.lightMode ? window.dark : window.light
}
onClicked: window.lightMode = !window.lightMode
}
}
}
}
}
-4
View File
@@ -1,4 +0,0 @@
# Downloaded Design from Figma to Qt
Save the downloaded design from Figma to Qt here, including the CMakeLists.txt.
The main project CMakeLists.txt picks this up automatically.
+7 -14
View File
@@ -1,18 +1,11 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreationFailed,
&app,
[]() { QCoreApplication::exit(-1); },
Qt::QueuedConnection);
engine.loadFromModule("Zenith", "Main");
return QGuiApplication::exec();
QApplication a(argc, argv);
MainWindow w;
w.show();
return QApplication::exec();
}
+14
View File
@@ -0,0 +1,14 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
+23
View File
@@ -0,0 +1,23 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>23</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>