本文介绍: QML是一种用于创建用户界面声明语言,它是Qt生态系统中的一部分。QML使用JavaScript语言和其独特的语法定义用户界面组件,使得开发人员可以轻松地创建现代化、漂亮而又响应迅速的应用程序。QML是基于QtQuick技术构建的,QtQuick一个基于OpenGL的场景图形库,它提供了高性能渲染动画效果。QML支持各种UI元素,如按钮文本标签图像列表表格等,并且可以轻松地在这些元素之间创建交互

QML

QML是一种用于创建用户界面声明语言,它是Qt生态系统中的一部分。QML使用JavaScript语言和其独特的语法定义用户界面组件,使得开发人员可以轻松地创建现代化、漂亮而又响应迅速的应用程序

QML是基于QtQuick技术构建的,QtQuick一个基于OpenGL的场景图形库,它提供了高性能渲染动画效果。QML支持各种UI元素,如按钮、文本标签图像列表表格等,并且可以轻松地在这些元素之间创建交互

QML还支持属性信号和槽机制绑定,以及对C++和JavaScript的无缝集成这为开发人员提供了更强大的灵活性和控制力。

总的来说,QML是一个非常强大的用户界面开发工具,它提供了高性能图形渲染动画效果,以及灵活的编程方式可以帮助开发人员快速构建各种类型的现代化应用程序

+python

QML是一种用于构建用户界面的声明性语言,而Python是一种强大的通用编程语言,两者结合可以实现更加复杂高级应用程序。Pyside6是一个用于QML和Python结合的库,它提供了与Qt C++库相同的API和功能,并且可以通过Python从QML访问Qt库。

下面是一个简单示例演示如何使用Pyside6将QML和Python结合在一起。在这个示例中,我们创建一个简单的QML界面,在这个界面中,我们可以输入一个数字然后通过Python脚本该数字加倍,然后输出结果

QML文件double.qml):

import QtQuick 2.0

Item {
    width: 200; height: 100

    Rectangle {
        id: rectangle
        color: "lightgray"
        width: parent.width - 20
        height: parent.height - 20
        x: 10
        y: 10

        TextInput {
            id: input
            x: 10; y: 10
            width: parent.width - 20
            height: 30
            placeholderText: "Enter a value"
        }

        Text {
            id: output
            x: 10; y: input.y + input.height + 10
            width: parent.width - 20
            height: 30
            text: "Result: "
            font.bold: true
            font.pointSize: 14
        }

        Button {
            id: button
            x: 10; y: output.y + output.height + 10
            width: parent.width - 20
            height: 30
            text: "Double"
            onClicked: {
                var value = parseInt(input.text)
                var result = double(value)
                output.text = "Result: " + result.toString()
            }
        }
    }
}

Python文件double.py):

from PySide6.QtCore import QObject, Slot, Property
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine

class Double(QObject):
    def __init__(self):
        super().__init__()

    @Slot(int, result=int)
    def double(self, value):
        return value * 2

if __name__ == '__main__':
    app = QGuiApplication([])
    engine = QQmlApplicationEngine()
    double = Double()
    engine.rootContext().setContextProperty("double", double)
    engine.load("double.qml")
    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())

这个Python文件中,我们定义一个名为Double的类,它包含一个名为double函数,该函数将输入整数加倍,并将结果返回然后,我们将该类实例化为double对象,并将其传递到QML的上下文中,以便在QML中访问它。

最后,我们使用QQmlApplicationEngine加载QML文件,并启动应用程序

组件

以下是Pyside6中所有可用的QML组件

  1. QAbsorbEffect:一种透明度效果,允许在QML元素上叠加

  2. QAction:用于QAction的QML前端组件

  3. QApplication:一个QML应用程序的根对象

  4. QBoxBlur模糊效果,用于QML元素。

  5. QCheckBox:一个复选框,用于在QML界面中标记选择

  6. QColumnView:用于显示以列为基础的数据的QML前端组件

  7. QColorDialog:用于选择颜色的QML前端组件

  8. QComboBox:一个下拉选择框,用于在QML界面中选择选项

  9. QConicalGradient:用于创建锥形渐变的QML前端组件

  10. QCursor:一个QML前端组件,用于表示光标指针

  11. QDateEdit:用于编辑日期的QML前端组件。

  12. QDateTimeEdit:用于编辑日期时间的QML前端组件。

  13. QDockWidget:一个可以放置在主窗口任意侧面的可停靠窗口

  14. QDoubleSpinBox:用于编辑带有小数数字的QML前端组件。

  15. QDial:一个旋转开关,用于在QML界面中选择值。

  16. QDirModel:用于在QML前端组件中显示文件系统的QML前端组件。

  17. QErrorMessage:用于显示错误消息的QML前端组件。

  18. QFileIconProvider:与QFileSystemModel配合使用的QML前端组件,用于在QML中显示文件图标

  19. QFocusFrame:焦点框,支持透明度圆角边框

  20. QFontDialog:用于选择字体的QML前端组件。

  21. QGradientStop:一个用于指定渐变停止点的QML前端组件。

  22. QGraphicsBlurEffect:一种用于模糊图像的QML特效

  23. QGraphicsColorizeEffect:一种用于着色图像的QML特效

  24. QGraphicsDropShadowEffect:一种用于创建阴影效果的QML特效

  25. QGraphicsEffect:一种用于图形效果的QML特效

  26. QGraphicsOpacityEffect:一种用于设置QML元素不透明度的QML特效

  27. QGraphicsScene:一个QML前端组件,用于在QML中显示场景的2D图形。

  28. QGraphicsView:一个QML前端组件,用于在QML中显示场景的2D图形视图

  29. QGridLayout:一种用于在QML前端组件中排列控件布局

  30. QGroupBox:一个用于在QML界面中组织控件的QML前端组件。

  31. QInputDialog:用于输入对话框的QML前端组件。

  32. QItemDelegate:用于在列表视图显示项目的QML前端组件。

  33. QLabel:一个用于在QML界面中显示文本或图像的QML前端组件。

  34. QLineEdit:一个用于在QML界面中编辑单行文本输入的QML前端组件。

  35. QListWidget:一个用于在QML界面中显示列表的QML前端组件。

  36. QMainWindow:一个QML前端组件,用于创建主窗口。

  37. QMenu:用于在QML界面中显示菜单的QML前端组件。

  38. QMenuBar:用于在QML界面中显示菜单栏的QML前端组件。

  39. QMessageBox:一个用于显示消息框的QML前端组件。

  40. QPalette:用于管理QML前端组件颜色图标的QML前端组件。

  41. QPainter:一种用于在QML前端组件中绘制图形的QML前端组件。

  42. QProgressBar:用于在QML界面中显示进度条的QML前端组件。

  43. QProgressDialog:用于显示进度对话框的QML前端组件。

  44. QPushButton:一个用于在QML界面中显示按钮的QML前端组件。

  45. QRadialGradient:一种用于创建辐射渐变的QML前端组件。

  46. QRadioButton:用于在QML界面中选择单选框的QML前端组件。

  47. QRegExpValidator:用于验证正则表达式的QML前端组件。

  48. QScroller:一种用于滚动QML元素的QML前端组件。

  49. QScrollBar:一个用于在QML界面中显示滚动条的QML前端组件。

  50. QSpinBox:用于编辑数字的QML前端组件。

  51. QSplashScreen:用于在程序启动时显示启动画面的QML前端组件。

  52. QSplitter:用于在QML前端组件中分割区域的QML前端组件。

  53. QStackedWidget:用于在QML前端组件中显示堆栈控件的QML前端组件。

  54. QStyledItemDelegate:一种在列表视图中显示项目的QML前端组件,支持使用样式表进行自定义

  55. QSurfaceDataProxy:用于在QML前端组件中显示表面数据的QML前端组件。

  56. QSurfaceDataView:用于在QML前端组件中显示表面数据的QML前端组件。

  57. QSvgWidget:用于在QML前端组件中呈现SVG图像的QML前端组件。

  58. QSystemTrayIcon:用于在任务栏中显示图标的QML前端组件。

  59. QTabBar:用于在QML前端组件中显示选项卡的QML前端组件。

  60. QTabWidget:用于在QML前端组件中显示选项卡控件的QML前端组件。

  61. QTextBrowser:用于在QML前端组件中显示富文本的QML前端组件。

  62. QTextEdit:用于在QML界面中编辑富文本的QML前端组件。

  63. QToolBar:用于在QML前端组件中显示工具栏的QML前端组件。

  64. QToolBox:用于展示包含工具多个页面的QML前端组件。

  65. QToolButton:用于在QML前端组件中显示工具按钮的QML前端组件。

  66. QTreeView:用于在QML前端组件中显示树状结构的QML前端组件。

  67. QVBoxLayout:用于在QML前端组件中排列控件垂直布局

  68. QWidget:基础窗口类,用于创建QML前端组件。

  69. QWindow:表示一个顶级窗口或无边框窗口的QML前端组件。

常用组件

以下是 PySide6 中常用的 QML 组件及其简介

  1. Text 组件:用于显示文本内容
import QtQuick 2.15
import QtQuick.Controls 2.15

Text {
    text: "Hello world!"
    font.pointSize: 16
}
  1. Rectangle 组件:用于创建矩形区域
import QtQuick 2.15
import QtQuick.Controls 2.15

Rectangle {
    color: "red"
    width: 100
    height: 100
    border.width: 3
    border.color: "black"
    radius: 10
}
  1. Image 组件:用于显示图片
import QtQuick 2.15
import QtQuick.Controls 2.15

Image {
    source: "image.png"
    width: 100
    height: 100
}
  1. ListView 组件:用于显示列表
import QtQuick 2.15
import QtQuick.Controls 2.15

ListView {
    model: ["Item 1", "Item 2", "Item 3"]
    delegate: Text {
        text: modelData
    }
}
  1. Button 组件:用于创建按钮
import QtQuick 2.15
import QtQuick.Controls 2.15

Button {
    text: "Click me!"
    onClicked: console.log("Button clicked!")
}
  1. TextField 组件:用于输入文本
import QtQuick 2.15
import QtQuick.Controls 2.15

TextField {
    placeholderText: "Type something here"
    onAccepted: console.log("Text entered:", text)
}
  1. CheckBox 组件:用于创建复选框
import QtQuick 2.15
import QtQuick.Controls 2.15

CheckBox {
    text: "Check me!"
    onClicked: console.log("Checked:", checked)
}
  1. RadioButton 组件:用于创建单选按钮
import QtQuick 2.15
import QtQuick.Controls 2.15

RadioButton {
    text: "Option 1"
    checked: true
    onClicked: console.log("Option 1 selected!")
}

RadioButton {
    text: "Option 2"
    onClicked: console.log("Option 2 selected!")
}
  1. ProgressBar 组件:用于显示进度条
import QtQuick 2.15
import QtQuick.Controls 2.15

ProgressBar {
    value: 50
    from: 0
    to: 100
}
  1. Slider 组件:用于创建滑块
import QtQuick 2.15
import QtQuick.Controls 2.15

Slider {
    value: 50
    from: 0
    to: 100
    onValueChanged: console.log("Slider value changed:", value)
}

布局

关于QML布局,PySide6提供了以下几种

  1. RowLayout:水平布局,将组件水平放置

示例代码

import QtQuick
import QtQuick.Layouts

RowLayout{
    Button { text: "Button1" }
    Button { text: "Button2" }
    Button { text: "Button3" }
}
  1. ColumnLayout:垂直布局,将组件垂直放置

示例代码

import QtQuick
import QtQuick.Layouts

ColumnLayout {
    Button { text: "Button1" }
    Button { text: "Button2" }
    Button { text: "Button3" }
}
  1. GridLayou:网格布局,将组件放置网格中。

示例代码

import QtQuick
import QtQuick.Layouts

GridLayout {
    columns: 2
    Button { text: "Button1" }
    Button { text: "Button2" }
    Button { text: "Button3" }
    Button { text: "Button4" }
}
  1. FlowLayout:流式布局,可以自适应组件大小

示例代码

import QtQuick
import QtQuick.Layouts

FlowLayout {
    Button { text: "Button1" }
    Button { text: "Button2" }
    Button { text: "Button3" }
    Button { text: "Button4" }
}
  1. StackLayout:堆栈布局,将组件叠加在一起。

示例代码:

import QtQuick
import QtQuick.Layouts

StackLayout {
    id: stack
    Button { text: "Button1" }
    Button { text: "Button2" }
    Button { text: "Button3" }
}

VIEW

PySide6提供了多种QML的view,以下是其中一些重要的:

  1. QQuickView:用于显示QML文件的主窗口,可与PySide6应用程序结合使用
from PySide6.QtCore import QUrl
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView

app = QGuiApplication([])
view = QQuickView()
view.setSource(QUrl("main.qml"))
# 显示QML窗口
view.show()
# 进入事件循环
app.exec()
  1. QQuickWidget:用于将QML视图嵌入到PySide6应用程序中的小部件。可以像其他小部件一样添加到布局中。
from PySide6.QtWidgets import QApplication, QVBoxLayout, QWidget
from PySide6.QtQuickWidgets import QQuickWidget

app = QApplication([])
widget = QWidget()
layout = QVBoxLayout(widget)
view = QQuickWidget()
view.setSource(QUrl("main.qml"))
layout.addWidget(view)
widget.show()
app.exec()
  1. QML ListView:使用数据模型在QML中显示列表的标准视图
import QtQuick 2.0

ListView {
    width: 200; height: 200
    model: ["Apple", "Banana", "Cherry"]
    delegate: Text {text: modelData}
}
  1. QML GridView:使用数据模型在QML中显示网格标准视图
import QtQuick 2.0

GridView {
    width: 200; height: 200
    model: ["Apple", "Banana", "Cherry"]
    delegate: Text {text: modelData}
}
  1. QML PathView:使用数据模型在QML中显示可滚动路径的视图。
import QtQuick 2.0

PathView {
    model: ["Apple", "Banana", "Cherry"]
    path: Path {
        startX: 50; startY: 50
        PathQuad {x: 200; y: 0; controlX: 125; controlY: -125}
        PathQuad {x: 400; y: 50; controlX: 275; controlY: 125}
        PathQuad {x: 400; y: 200; controlX: 400; controlY: 50}
        PathQuad {x: 400; y: 350; controlX: 425; controlY: 275}
        PathQuad {x: 200; y: 400; controlX: 400; controlY: 400}
        PathQuad {x: 0; y: 350; controlX: 125; controlY: 425}
        PathQuad {x: 0; y: 200; controlX: 0; controlY: 350}
        PathQuad {x: 0; y: 50; controlX: -25; controlY: 125}
        PathQuad {x: 200; y: 0; controlX: 0; controlY: 0}
    }
    delegate: Text {text: modelData}
}
  1. QML TableView:使用数据模型在QML中显示表格标准视图。
import QtQuick 2.0

TableView {
    width: 240; height: 200
    TableViewColumn {title: "Name"; role: "name"; width: 120}
    TableViewColumn {title: "Age"; role: "age"; width: 60}
    model: ListModel {
        ListElement {name: "John"; age: 32}
        ListElement {name: "Bob"; age: 25}
        ListElement {name: "Mary"; age: 27}
    }
}

切换界面

在Pyside6中通过QML切换两个页面可以使用StackView控件。StackView控件可以将多个页面压入堆栈中,然后通过push()和pop()方法控制页面切换。

以下是一个简单示例

import QtQuick 2.0
import QtQuick.Controls 2.0

StackView {
    id: stackView

    // 第一个页面
    Page1 {
        onButtonClicked: {
            // 切换到第二个页面
            stackView.push(page2)
        }
    }

    // 第二个页面
    Page2 {
        onButtonClicked: {
            // 切换回第一个页面
            stackView.pop()
        }
    }
}

在上面的示例中,我们先定义了一个StackView控件,并将两个页面Page1和Page2压入堆栈中。当Page1中的按钮被点击时,我们调用push()方法将第二个页面Page2压入堆栈中,从而实现了页面切换。当Page2中的按钮被点击时,我们调用pop()方法将当前页面弹出堆栈,从而切换回第一个页面。

注意,在StackView中,页面的切换顺序是由它们被push()到堆栈中顺序决定的。因此,如果您需要初始显示特定页面,请将其作为第一个压入堆栈中

QML常用属性

以下是常用的QML属性(包括但不限于):

  1. id指定该元素的唯一标识符,可以在QML文件中用于引用该元素。

  2. width指定元素的宽度

  3. height指定元素的高度

  4. visible指定元素是否可见。

  5. opacity指定元素的透明度

  6. x指定元素相对于其父元素的横坐标

  7. y指定元素相对于其父元素的纵坐标

  8. anchors指定元素相对于其父元素的布局方式

  9. color:指定元素的颜色

  10. border:指定元素的边框属性,包括颜色宽度样式等。

  11. text:指定文本元素的文本内容

  12. font:指定文本元素的字体属性,包括字体大小粗细等。

  13. rotation:指定元素的旋转角度

  14. scale:指定元素的缩放比例。

  15. clip:指定元素是否剪裁超出边界内容

  16. z:指定元素的Z轴顺序,用于控制元素的层级关系

以上是常用的QML属性,具体使用方式可以参见Pyside6文档

注意事项

以下是使用 PySide6 和 QML 进行开发需要注意事项

  1. 安装 PySide6:首先需要安装 PySide6,可以通过 pip 工具进行安装,也可以从 PySide6 官网下载安装包进行安装。

  2. 安装 Qt Creator:如果您希望使用 Qt Creator 进行 QML 的可视化设计需要先安装 Qt Creator。Qt Creator 是一个集成开发环境(IDE),可以用于创建 QML 界面并将其与 Python 代码集成

  3. QML 文件的创建:QML 文件可以单独创建,也可以与 Python 代码集成。在创建 QML 文件时,需要根据界面的需求确定 QML 的基础结构及组件,并编写相关的代码。

  4. PySide6 中的 QML 引擎:PySide6 中的 QML 引擎可以将 QML 文件解析并显示在界面中。在 Python 代码中,需要使用 QMLApplicationEngine 类来加载 QML 文件,并将其与界面集成

  5. 与 Python 代码集成:QML 文件可以与 Python 代码集成,通过信号和槽机制进行通信。在 Python 代码中,可以定义信号和槽方法,并通过 QML 的 signalslot 机制来实现交互

  6. 调试错误处理:在开发过程中,需要注意调试和错误处理。可以使用 PySide6 中的调试工具来帮助定位问题,并了解 QML 文件的执行情况。

  7. 布局和样式:在编写 QML 文件时,需要注意布局和样式。可以使用 QML 中的布局组件和样式属性来完成界面的设计。

  8. 多语言支持:QML 文件支持多语言,可以通过在 QML 文件中定义翻译字符串并使用翻译器来实现多语言支持。

  9. 性能优化:在进行 QML 开发时,需要注意性能优化。可以通过使用 QML 中的列表组件和缓存机制来提升性能,并减少资源消耗。

总之,使用 PySide6 和 QML 进行开发需要注意许多方面,需要仔细阅读文档,并在实践中不断总结经验,才能更好完成项目开发。

学习

  1. PySide6官方文档https://doc.qt.io/qtforpython-6/index.html
  2. PySide6官方GitHub仓库https://github.com/PySide/PySide6
  3. PySide6教程(英文)https://pyside6.com/
  4. PySide6教程(中文)https://www.cnblogs.com/zhbzzq/p/14194651.html
  5. PySide6教程(中文):https://www.bilibili.com/video/BV1Kz4y1T7to
  6. PySide6教程(中文):https://www.jianshu.com/p/24b97e08b2e1
  7. Qt for Python(PySide6)编程实战:https://www.qtrac.eu/pyqtbook.html
  8. PySide6文档翻译计划:https://github.com/huangy10/PySide6-CN-Doc
  9. PySide6常见问题及解答:https://www.programmersought.com/article/46467372720/
  10. PySide6学习笔记:https://www.cnblogs.com/onepiecepark/p/13884719.html

原文地址:https://blog.csdn.net/liudadaxuexi/article/details/134707067

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49400.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注