QT基础篇(20)QT Quick Controls2新颖界面开发

1.QT Quick Controls2简介

QT Quick Controls2是一套用于构建现代风格用户界面的框架,它是QT框架的一部分。它提供了一系列预定义的控件,可以用来创建交互式和响应式的界面,包括按钮、文本框、滑块、菜单等。QT Quick Controls2具有高度可定制性,开发人员可以根据自己的需求自定义控件的外观和行为。它还支持主题和样式,使开发人员可以轻松应用不同的外观和风格。使用QT Quick Controls2,开发人员可以快速构建易于使用和具有现代外观的应用程序界面。

1.1 一个简单的QT Quick Controls2程序

下面是一个简单的QT Quick Controls 2程序示例:

main.qml文件:

import QtQuick 2.12
import QtQuick.Controls 2.12ApplicationWindow {visible: truewidth: 400height: 300title: "QT Quick Controls 2 Demo"Column {spacing: 10anchors.centerIn: parentButton {text: "Click me"onClicked: {console.log("Button clicked")}}TextField {placeholderText: "Enter your name"onTextChanged: {console.log("Text changed: " + text)}}Slider {value: 50onValueChanged: {console.log("Slider value changed: " + value)}}}
}

main.cpp文件:

#include <QGuiApplication>
#include <QQmlApplicationEngine>int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;engine.load(QUrl(QStringLiteral("qrc:/main.qml")));return app.exec();
}

在此程序中,我们创建了一个简单的QT Quick Controls 2应用程序窗口。窗口中包含一个按钮、一个文本字段和一个滑块。当按钮被点击时,会在控制台上输出一条消息。当文本字段的内容发生变化时,也会在控制台上输出一条消息。滑块被拖动时,也会输出一条消息。

为了运行这个程序,您需要配置好Qt开发环境,并使用Qt Creator或命令行编译和运行程序。

注意:示例中使用了Qt Quick Controls 2的QML类型,因此确保您的Qt版本支持并包含了Qt Quick Controls 2模块。

1.2 QT Quick Controls2程序的构成

QT Quick Controls2程序主要由以下几个部分构成:

  1. QML文件:QML(Qt Meta-Object Language)是QT框架中用于编写用户界面的语言。QML文件是QT Quick Controls2程序的主要组成部分,其中定义了界面的元素、布局和交互逻辑等。

  2. Qt Quick Controls2模块:Qt Quick Controls2是QT框架中的一个模块,提供了一套用于构建现代化用户界面的控件和样式。这些控件可以通过QML文件进行定义和使用。

  3. 样式表:QT Quick Controls2程序可以使用样式表来定义控件的外观和样式。样式表可以通过QML文件中的属性或者单独的样式表文件进行定义,从而实现界面的自定义和风格统一。

  4. 逻辑与交互:QT Quick Controls2程序可以通过QML中的信号和槽机制来实现逻辑和交互。例如,当用户点击一个按钮时,可以通过信号和槽机制触发相应的操作。

  5. 资源文件:QT Quick Controls2程序可以使用资源文件来管理和引用程序所需的资源,如图片、音频和字体等。资源文件可以在QML中进行引用,并且可以在编译时打包到可执行文件中,方便程序的发布和部署。

以上是QT Quick Controls2程序的基本构成,不同的应用场景和需求可能会有不同的扩展和定制。

2. QT Quick Controls 2 和 QT Quick Controls 1 的比较
2.1 ApplicationWindow结构不同

QT Quick Controls 2和QT Quick Controls 1是QT框架中用于构建用户界面的两个模块,它们在一些方面有一些区别。

在ApplicationWindow结构方面,QT Quick Controls 2引入了一种新的组织结构,即使用ApplicationWindow作为窗口的根元素。相比之下,QT Quick Controls 1使用的是Window作为根元素。下面是两者之间的比较:

  1. 导入语句: 在QT Quick Controls 2中,需要导入QtQuick.Controls模块来使用ApplicationWindow

    import QtQuick.Controls 2.12
    

    在QT Quick Controls 1中,需要导入QtQuick.Controls模块来使用Window

    import QtQuick.Controls 1.4
    

  2. 根元素: 在QT Quick Controls 2中,ApplicationWindow作为根元素,可以直接包含其他控件:

    ApplicationWindow {// ...Button {// ...}
    }
    

    在QT Quick Controls 1中,Window作为根元素,需要使用Item作为中间元素来包含其他控件:

    Window {// ...Item {// ...Button {// ...}}
    }
    

  3. 按钮位置: 在QT Quick Controls 2中,默认情况下,按钮位置是在标题栏的右侧。可以通过titleBar属性控制是否显示标题栏:

    ApplicationWindow {title: "My Application"titleBar: AppTitleBar {visible: false}
    }
    

    在QT Quick Controls 1中,默认情况下,按钮位置是在窗口的底部。

总的来说,QT Quick Controls 2在ApplicationWindow结构方面提供了更简洁、直观的方式来构建用户界面。同时,QT Quick Controls 2还引入了更多的控件和样式选项,更加灵活和易于定制。但是,根据实际需求和项目的兼容性考虑,选择使用哪个版本的QT Quick Controls仍然取决于具体情况。

2.2 Menu

QT Quick Controls 2和QT Quick Controls 1是QT框架中用于构建用户界面的两个模块,它们在菜单(Menu)方面也有一些区别。

在菜单方面,QT Quick Controls 2引入了一些新的控件和功能,相对于QT Quick Controls 1来说更加灵活和易于定制。下面是两者之间的比较:

  1. 控件名称: 在QT Quick Controls 2中,菜单相关的控件名称以Menu开头,例如Menu, MenuBar, MenuItem等:

    Menu {title: "File"MenuItem { text: "Open" }MenuItem { text: "Save" }
    }
    

    在QT Quick Controls 1中,菜单相关的控件名称以MenuMenuBar开头,例如Menu, MenuBar, MenuItem等:

    Menu {title: "File"MenuItem { text: "Open" }MenuItem { text: "Save" }
    }
    

  2. 子菜单: 在QT Quick Controls 2中,菜单可以嵌套使用,创建子菜单非常方便:

    Menu {title: "File"MenuItem { text: "Open" }Menu {title: "Save"MenuItem { text: "Save As..." }MenuItem { text: "Save All" }}
    }
    

    在QT Quick Controls 1中,菜单不能直接嵌套,需要通过在MenuItem中添加新的Menu来实现子菜单:

    Menu {title: "File"MenuItem {text: "Open"}MenuItem {text: "Save"Menu {title: "Save"MenuItem { text: "Save As..." }MenuItem { text: "Save All" }}}
    }
    

  3. 样式和主题: 在QT Quick Controls 2中,可以通过提供自定义的样式来定制菜单的外观,同时支持不同的主题,例如Default, Universal, Material等。

    ApplicationWindow {style: ApplicationWindowStyle {menuBarStyle: MenuBarStyle {background: "blue"textColor: "white"}}
    }
    

    在QT Quick Controls 1中,样式和主题的定制相对较少,只能通过配置一些基本的属性来调整菜单的外观。

总的来说,QT Quick Controls 2在菜单方面提供了更多的控件和功能,使菜单的创建和定制更加灵活和易于实现。如果你需要较复杂的菜单结构或定制样式和主题,QT Quick Controls 2可能是更好的选择。然而,选择使用哪个版本的QT Quick Controls还取决于具体项目的需求和兼容性考虑。

2.3控件实现差异

在控件实现方面,QT Quick Controls 2和QT Quick Controls 1之间存在一些差异。下面是它们之间的比较:

  1. 控件的命名: QT Quick Controls 2的控件命名采用驼峰式命名法,例如Button、TextField、Slider等。而QT Quick Controls 1则在控件命名上采用带下划线的命名法,例如Button、Text_Field、Slider等。

  2. 控件的层次结构: QT Quick Controls 2采用更简洁和直观的层次结构。大多数控件可以作为ApplicationWindow的子控件直接使用,或者作为其他控件的子控件。例如,可以在ApplicationWindow中直接使用Button、TextField等控件:

    ApplicationWindow {Button {text: "Click Me"}TextField {placeholderText: "Enter your name"}
    }
    

    而在QT Quick Controls 1中,需要使用一些额外的容器控件,如GroupBox、StackView等来包装和管理控件,以实现层次结构:

    StackView {GroupBox {Button {text: "Click Me"}}GroupBox {TextField {placeholderText: "Enter your name"}}
    }
    

  3. 控件的样式和主题: QT Quick Controls 2支持更灵活和定制化的控件样式和主题。可以通过定义自定义样式或使用已经定义好的样式来改变控件的外观。还可以选择不同的主题,如Default、Material、Universal等。而QT Quick Controls 1的样式和主题定制相对较少,只能通过一些基本的属性设置来调整控件的外观。

总的来说,QT Quick Controls 2在控件实现方面更加简洁和直观,提供了更多的控件和样式定制选项。如果你需要更灵活和定制化的控件外观和行为,QT Quick Controls 2可能是更好的选择。然而,选择使用哪个版本的QT Quick Controls还取决于具体项目的需求和兼容性考虑。

3.滑动翻页及隐藏面板

要实现滑动翻页效果和隐藏面板的功能,你可以使用Qt Quick Controls 2中的SwipeView和Collapsable来实现。

首先,你需要导入Qt Quick Controls 2库:

import QtQuick.Controls 2.15

然后,创建一个SwipeView,并在其中添加多个页面。你可以使用SwipeView的currentIndex属性来切换页面:

SwipeView {id: swipeViewcurrentIndex: 0Page1 { }Page2 { }Page3 { }
}

接下来,你可以在SwipeView上设置一个SwipeDelegate来实现滑动翻页效果:

delegate: SwipeDelegate {width: swipeView.widthheight: swipeView.height// 在这里定义滑动翻页效果
}

要实现隐藏面板的功能,你可以使用Collapsable。Collapsable提供了一个折叠/展开的效果,并且可以将内容打包在内部。

Collapsable {id: collapsablecontentHeight: contentItem.heightcollapsed: trueRectangle {id: headerItem// 在这里定义用于折叠/展开的头部内容}Rectangle {id: contentItem// 在这里定义折叠的内容}
}

你可以通过设置Collapsable的collapsed属性来控制折叠/展开效果。

希望这些信息对你有帮助!

4.选项列表

在QT Quick Controls 2中,可以使用ListView或ComboBox来创建选项列表。

  1. ListView: ListView是一个用于显示列表数据的控件,可以自定义列表项的外观和交互。下面是一个简单的例子:
ListView {model: ListModel {ListElement { text: "Option 1" }ListElement { text: "Option 2" }ListElement { text: "Option 3" }}delegate: Item {width: listView.widthheight: 40Text {anchors.centerIn: parenttext: modelData}MouseArea {anchors.fill: parentonClicked: {// 处理选中项}}}
}

  1. ComboBox: ComboBox是一个下拉列表框,通过点击下拉按钮展开选项列表。下面是一个简单的例子:
ComboBox {model: ["Option 1", "Option 2", "Option 3"]width: 100height: 30onCurrentIndexChanged: {// 处理选中项的变化}
}

你可以根据实际需求自定义列表项的样式和交互行为,以满足你的需求。这只是一个示例,你可以根据你的具体情况进行调整和扩展。

希望这些信息对你有帮助!

5.带功能按钮的列表

你可以使用QT Quick Controls 2中的ListView和Delegate来创建带有功能按钮的列表。下面是一个示例:

ListView {model: ListModel {ListElement { text: "Item 1" }ListElement { text: "Item 2" }ListElement { text: "Item 3" }}delegate: Item {width: listView.widthheight: 40Row {spacing: 10Button {text: "Edit"onClicked: {// 处理编辑按钮点击事件}}Button {text: "Delete"onClicked: {// 处理删除按钮点击事件}}Text {text: modelData.text}}}
}

在这个例子中,我们使用ListView来显示一个列表,然后通过自定义的Delegate来定义列表项的外观和交互。在Delegate中,我们使用Row来包裹按钮和文本,按钮可以根据需要添加自定义的点击事件处理程序。

这只是一个简单的示例,你可以根据自己的需要进行调整和扩展。希望这对你有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序:类型三级分类

一、效果图片 二、代码 <template><view class"customPosition"><!-- header --><navBar :border"false" :hasBack"true" :title"titleName"></navBar><!-- 查询 --><view class"search…

ChatGPT提示“Unauthorized“错误

问题&#xff1a;当出现下图错误时我们应该如何解决&#xff1f; 解决办法一、 退出重新登录 原因&#xff1a;没有正确登录或者登录会话已经过期 解决办法二、 “更换线路” 原因&#xff1a;网络配置或者代理设置会导致认证失败 如果还不行可以叫我看一下 无限使用gpt4教…

手把手教你搭建属于自己的网站(获取被动收入),无需服务器,使用github托管

大家好&#xff0c;我是亚洲著名程序员青松&#xff0c;本次教大家如何搭建一个属于自己的网站。 下面是我自己搭建的一个网站&#xff0c;是一个网址导航网站。托管在了github上面&#xff0c;目前已经运营了三个月&#xff0c;每天的访问量大约有100ip左右。 下图是在51.la上…

猫用空气净化器好吗?好用的养猫宠物空气净化器品牌推荐

作为一个养猫五年的资深铲屎官&#xff0c;我对如何轻松快乐地养猫有一些心得。猫咪每天在家里奔跑&#xff0c;导致家里经常会出现“猫毛雪”&#xff0c;沙发、地板和衣服都成了重灾区。在除猫毛的问题上&#xff0c;我真的尝试了各种方法&#xff0c;几乎用上了所有的技能。…

简单说说-docker网络类型

概述 容器网络是指容器之间或非 Docker 工作负载之间连接和通信的能力。容器默认启用网络&#xff0c;并且可以建立传出连接。容器不知道它所连接的网络类型&#xff0c;容器只能看到带有 IP 地址、网关、路由表、DNS 服务和其他网络详细信息的网络接口。也就是说&#xff0c;…

每日OJ题_算法_模拟①_力扣1576. 替换所有的问号

目录 模拟算法原理 力扣1576. 替换所有的问号 解析代码 模拟算法原理 模拟算法是一种常用的计算机算法&#xff0c;它模拟了实际问题的运行过程&#xff0c;并通过数学模型来预测结果。模拟算法可以应用于各个领域&#xff0c;例如物理、化学、生物、计算机网络等等。 模拟算…

怎么去除图片中不需要的部分?这三种高效方法快来试一下

在数字图像处理的浩瀚世界中&#xff0c;去除图片中不必要部分的任务&#xff0c;宛如一幅细致的画卷&#xff0c;需精心描绘。这些不必要部分&#xff0c;可能是背景、水印、无关紧要物体或错误部分&#xff0c;它们如同图片中的瑕疵&#xff0c;需要被巧妙地修饰或去除。这不…

《每天一分钟学习C语言·十三》

1、清屏函数和暂停函数 头文件stdlib.h system(“cls”); system(“pause”); //暂停函数&#xff0c;按任意键继续 2、动态内存释放的问题 int ** p new int*[3]; p[0] new int(0); p[1] new int(1); p[2] new int(2);先申请一个二级指针内存空间&#xff0c;每个元素是…

09. 配置Eth-Trunk

文章目录 一. 初识Eth-Trunk1.1. Eth-Trunk的概述1.2. Eth-Trunk的优势1.3. Eth-Trunk的模式的优势 二. 实验专题2.1. 实验1&#xff1a;手工模式2.1.1. 实验拓扑图2.1.2. 实验步骤&#xff08;1&#xff09;配置PC机的IP地址&#xff08;2&#xff09;在交换机接口划入VLAN&am…

【Tomcat与网络11】如何自己实现一个简单的HTTP服务器

在前面我们尝试解释Tomcat的理论&#xff0c;但是呢&#xff0c;很多时候那些复杂的架构和设计会让我们眼花缭乱&#xff0c;以至于忽略了最进本的问题——服务器到底是什么&#xff1f;今天我们就用尽量简单的代码实现一个简易的HTTP服务器。 HTTP启动之后要持续监听&#xf…

校园网网络规划与设计——计算机网络实践报告

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 目录 一、设计目的 二、软硬件环境 三、理论基础 四、设计方案 五、网络配置步骤 六、设计过程中出现的问题及相应解决办法 八、参考资料 一、设计目的 深入理解网络工程的三层层次设计模型&#xff1b; 掌握网络…

Python实现GCJ02坐标系向WGS84坐标系的转换

GCJ02坐标系 GCJ-02&#xff08;官方称地形图非线性保密处理算法&#xff0c;俗称火星坐标系、国测局坐标&#xff09;是一种基于WGS-84制定的大地测量系统&#xff0c;由中国大陆国家测绘地理信息局制定。此坐标系所采用的混淆算法会在经纬度中加入看似随机的偏移。 使用GCJ…

ubuntu nginx配置密码访问并下载

nginx配置密码访问_htpasswd: cannot create file-CSDN博客 sudo apt-get install nginx sudo apt install apache2-utils # htpasswd -c /htpasswd/passwd.db test htpasswd -c /etc/nginx/htpasswd.d/nginx_passwd.kibana test # htpasswd -c ccreate 创建文件 # /htp…

2024年美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

【Java】阻塞队列

目录 BlockingQueue BlockingQueue接口 三个主要实现类介绍&#xff1a; ArrayBlockingQueue&#xff1a;有界队列 LinkedBlockingQueue&#xff1a;无界队列 SynchronousQueue:同步队列 队列对比 BlockingQueue 对于Queue而言&#xff0c;BlockingQueue是主要的线程安全…

有深浅入数据分析 - 启发法(凭人类的天性做分析)

在做数据分析的时候&#xff0c;往往最优的方法是艰难耗时间的 凭经验处理&#xff0c;迅速做出决策&#xff0c;确识能够奏效&#xff0c;进行数据分析的重要而必要的技能 领导的要求是&#xff1a; 邋遢集的处理方式是&#xff1a; 计量的方式处理 上图的调查问卷可以…

pytorch模型里 safetensors 文件、bin文件和pth文件区别、加载和保存方式

目录 PyTorch模型中的safetensors文件和bin文件区别 safetensors文件 bin文件 结论 区别bin文件和pth文件 1. 文件格式 2. 通用性 3. 期望内容 4. 兼容性和移植性 结论 加载和保存safetensors文件 保存safetensors文件 加载safetensors文件 加载和保存bin文件 保…

JVM 内存配置参数积累

0、简介 在进行JVM内存配置时&#xff0c;应当考虑到应用程序的实际需求和运行环境的资源限制&#xff0c;合理分配Xmx、Xms和Xmn参数&#xff0c;以获得最佳的性能表现。通常建议将Xms和Xmx设置为相同的值&#xff0c;以避免JVM在运行过程中动态调整堆大小带来的性能损耗。而…

Axure 动态面板初使用-实现简单的tab切换页面效果

使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure 9&#xff0c;默认进入一个空白页&#xff0c;首先从元件库拉一个动态面板到页面中&#xff0c;位置肯定是C位咯~ 2、将面板尺寸调整一下&#xff0c;设置成你喜欢的数字&#xff0c;比如我就喜欢800600 3、然后…

学习日志以及个人总结(13) 指针!

指针 定义 访问内存地址 操控硬件 指针&#xff1a; 指针基本数据据类 指针数组 指针函数 指针指针 1.指针&#xff1a;就是地址-----就是内存的单元的编号 2.指针变量 语法&#xff1a; 基类型* 指针变量名&#xff1b; 基类型-------数据类型//基础数据类型 //数组…