Qt案例-ApplicationExamples-Calqlatr

项目

一个Qt Quick应用程序设计的横向和纵向设备,使用自定义组件,响应式布局和JavaScript的应用程序逻辑。

项目路径: Qt\Examples\Qt-6.7.1\demos

环境:Qt6.7.1 MSVC 2019 64位

复制代码
项目目录: 
calqlatr
	--CMakeList.txt 
	--main.cpp
	--Main.qml
	--qmldir
	--calqlatr.pro
	++content 
		--NUmberPad.qml
		--Dispaly.qml
		--calculator.js
		--BackspaceButton.qml
		--CalculatorButton.qml

CMakeList.txt

复制代码
创建一个动态链接库------作为QML模块的插件------该库将包含定义自定义QML元素的C++类和其他资源。
自动创建一个qrc文件,该文件将包含指定源文件中的所有资源,例如图片、样式表和翻译文件
qt_add_qml_module(calqlatrexample
    URI demos.calqlatr
    VERSION 1.0
    QML_FILES
        "Main.qml"
        "content/Display.qml"
        "content/NumberPad.qml"
        "content/CalculatorButton.qml"
        "content/BackspaceButton.qml"
        "content/calculator.js"
    RESOURCES
        "content/images/backspace.svg"
        "content/images/backspace_fill.svg"
)

main.cpp

复制代码
//QQuickStyle类允许配置应用程序样式.
QQuickStyle::setStyle("Basic");
//从uri指定的模块加载QML类型typeName。如果类型源自位于远程url的QML文件,则该类型将被异步加载。监听objectCreated信号以确定对象树何时准备好。
 engine.loadFromModule("demos.calqlatr", "Main");

Main.qml

复制代码
LayoutItemProxy类为布局中的QQuickItems提供了一个占位符。
显示空间和键盘空间。使用列布局和行布局进行切换。
子控件: 结果显示组件,操作按钮组件。

Display.qml

复制代码
自定义显示区组件。 使用ListView显示计算结果。
 列表项: 操作符和操作数。
positionViewAtEnd()将视图定位在开头或结尾,同时考虑到任何页眉或页脚。
定义方法:显示操作符,创建一个新行,添加操作数,删除和清空。

CalCulatorButton.qml

复制代码
自定义按钮组件。内部提供:
子控件: 背景和文本。
提供方法: 获取背景颜色, 获取边框颜色,获取文本颜色。 颜色属性。
属性: 是否可模糊,是否已经模糊的。
一个颜色变化的动画。

BackspaceButton.qml

复制代码
自定义按钮组件。
定义方法: 获取图标颜色, 获取图标。

NUmberPad.qml

复制代码
使用component 定义组件: 数字按钮和操作按钮。

QML组件的构建顺序:

复制代码
子节点从左往右是按照代码的从上向下排列的,即处于代码下面的组件先被创建出来。另外,组件展示层级是由上而下的,即写在代码后面的组件被展示在顶部图层,即先创建的占据顶部图层。
win{
	Item{
		Dispaly{
		}
		NumberPad{
		}
		ColumnLayout {
		}
		RowLayout {
		}
	}
}

qml: 窗口构建完成
qml: 主界面构建完成
qml: 行布局构建完成
qml: 列布局构建完成
qml: 数字键盘构建完成
qml: 显示组件构建完成

逻辑处理使用calculator.js

复制代码
在主窗口提供调用处理操作符和操作数的方法。
		 // 操作按钮
        function operatorPressed(operator) {
            CalcEngine.operatorPressed(operator, display)
        }
        // 处理数字函数
        function digitPressed(digit) {
            CalcEngine.digitPressed(digit, display)
        }
        // 是否显示按钮
        function isButtonDisabled(op) {
            return CalcEngine.isOperationDisabled(op, display)
        }
		 Keys.onPressed: function(event) {
            switch (event.key) {
                case Qt.Key_0: digitPressed("0"); break;
                case Qt.Key_Plus: operatorPressed("+"); break;
                }
       }
相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能16 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G16 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt