qml mysql_QML(一)HelloWorld

本文介绍了Qt Widgets、QML、Qt Quick的区别,并通过创建Qt Quick Application的几个模板工程,如Empty、Scroll、Stack、Swipe,展示了QML的基础用法,包括窗口、滚动条、分页等元素的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Qt Widgets、QML、Qt Quick 的区别

参考:

二、基础教程

参考:

三、HelloWorld

使用Qt Creator直接新建工程,有如下选项(我的没有Canvas 3D,应该时没有安装)

4b697a7a598ccb8fdee384d1261fd303.png

按照这里介绍,第一个Qt Quick Application - Empty 为空白窗体模板工程,Scroll 为带滚动条的窗体模板工程,Stack 为带分页的窗体模板工程, Swipe 为滑动窗体模板工程,(Canvas 3D 为3D动态模板工程)

一路默认创建完成只有运行分别长这样

535d06cc8883e9d8e11f3680eacf6cdd.png 

8af396dd456b8ce35bf92074306ca884.png 

9ed6934c8cd075ccbf10695569553d5b.png 

919b306cbfca76a0cd75c428cad98380.png

注意:从Scroll工程开始有一步选择Qt Quick Controls Styls的步骤,有如下几种样式:

8653b5e6ef14c7a638c1cf5249f40734.png

第一个空项目只有main.cpp与main.qml两个文件

main.cpp

#include #include

int main(int argc, char *argv[])

{

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//使能高分屏(High-DPI),Qt从5.6.0开始支持

QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;//实现C++与QML混合编程

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));if(engine.rootObjects().isEmpty())return -1;returnapp.exec();

}

main.qml

import QtQuick 2.9

import QtQuick.Window 2.2

Window{visible:true // 是否显示

width: 640 // 宽

height: 480 // 高

title: qsTr("Hello World") // 窗口标题}

main.qml就像js一样,首先import核心的Qt Quick,然后要使用Window对象,再import Qt Quick.Window模块,下面定义了一个Window窗口对象

然后第二个Scroll项目,main.cpp是一样的,都是加载main.qml文件,其main.qml文件如下:

import QtQuick 2.9

import QtQuick.Controls 2.2

ApplicationWindow{visible:true

width: 640

height: 480

title: qsTr("Scroll")

// 滚动条对象

ScrollView {

anchors.fill: parent

ListView {

width: parent.width // 宽度等于父对象,也就是Window的宽度

model: 20 // 元素数量

delegate: ItemDelegate { // 每一个元素对象

text: "Item " + (index + 1)

width: parent.width}}

}

}

为了使用 ScrollView 类,import了 QtQuick.Controls 模块,窗口对象由 ApplicationWindow 类定义,除了窗口属性之外多了一个 ScrollView对象,该对象定义了一个滚动条视图,当item数量超出屏幕显示范围时会出现滚动条,但是这里的宽度好像并没有什么用。

此外还有个qtquickcontrols2.conf配置文件,其中定义了上面建项目时选的Qt Quick Controls Styls样式。

第三个Stack分屏项目,每个弹出页面分别定义了一个ui文件,然后在qml文件点击事件中加载

import QtQuick 2.9

import QtQuick.Controls 2.2

ApplicationWindow{id:window

visible: true

width: 640

height: 480

title: qsTr("Stack")

// 头部工具栏

header: ToolBar {

contentHeight: toolButton.implicitHeight

// 页面切换按钮

ToolButton {

id: toolButton // 按钮id

text: stackView.depth > 1 ? "\u25C0" : "\u2630" // 按钮样式,三个横杠还是小三角形

font.pixelSize: Qt.application.font.pixelSize * 1.6 // 字体大小

onClicked: { // 点击事件

if (stackView.depth > 1) {

stackView.pop() // 页面深度大于1则返回主页}else{drawer.open() // 否则打开新特面}}

}

// 工具栏标签

Label{text:stackView.currentItem.title // 工具栏标题为当前页面标题

anchors.centerIn: parent // 固定于父对象}}

// 弹出式页面选项遮罩层

Drawer{id:drawer

width: window.width * 0.66 // 选项卡宽度

height: window.height // 高度

// 子页面选项元素定义

Column {

anchors.fill: parent

ItemDelegate {

text: qsTr("Page 1")

width: parent.width

onClicked: {

stackView.push("Page1Form.ui.qml") // 点击的时候加载新的ui文件

drawer.close() // 然后关闭选项卡}}

ItemDelegate{text:qsTr("Page 2")

width: parent.width

onClicked: {

stackView.push("Page2Form.ui.qml")

drawer.close()}}

}

}

// 当前弹出页面对象

StackView{id:stackView

initialItem: "HomeForm.ui.qml"

anchors.fill: parent}}

第四个Swipe项目,和Stack页面一样,不过由弹出式的StackView对象变成了滑动式的SwipeView对象

import QtQuick 2.9

import QtQuick.Controls 2.2

ApplicationWindow{visible:true

width: 640

height: 480

title: qsTr("Tabs")

// 滑动页面对象

SwipeView {

id: swipeView

anchors.fill: parent

currentIndex: tabBar.currentIndex

// 两个可滑动页面元素,对象名就是对应的ui文件名

Page1Form {}Page2Form{

}}

// 没有头部工具栏,而是页脚,定义了两个按钮,没有页脚也可以滑动页面

footer: TabBar{id:tabBar

currentIndex: swipeView.currentIndex

TabButton {

text: qsTr("Page 1")}TabButton{text:qsTr("Page 2")}}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值