如何开发桌面系统用户界面(上)|附代码
liebian365 2024-10-20 09:53 24 浏览 0 评论
Qt(发音为“ cute”,而不是“ cu-tee”)是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中也非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。前往慧都网搜索Qt可免费下载Qt最新版>>
桌面系统用户界面示例
本示例以一种简单的方式展示了应用程序管理器API,它是具有服务器端窗口装饰的经典桌面。该示例更多地关注概念,而不关注优雅或完整性。例如,没有错误检查完成。此最小桌面系统中的某些功能仅打印调试消息。
支持以下功能:
- 通过单击左上方的图标来启动应用程序
- 通过再次单击左上方的图标来停止应用程序
- 通过单击左上方的窗口装饰矩形关闭应用程序窗口
- 通过单击装饰使应用程序前进
- 通过按下窗户装饰并移动窗户来拖动窗户
- 应用启动时,系统用户界面发送“ propA”更改
- 系统界面和App2会通过调试消息对窗口属性更改做出反应
- 单击停止或重新启动App1动画
- App1在停止时将旋转角度作为窗口属性发送到系统UI
- App1暂停时在系统UI上显示一个弹出窗口
- App2启动时会使用IPC扩展
- App2记录启动它的文档URL
- 单击灯泡图标时,App2在系统用户界面中触发通知
- 显示源自外部流程的Wayland客户端窗口 appman
注意:此示例可以在单进程或多进程模式下运行。在下面的演练中,我们使用多进程及其相应的术语。术语客户和应用 ; 服务器和系统UI可以互换使用。系统UI包括合成和通用的进程间通信(IPC)。
要开始示例,请导航到该minidesk文件夹,然后运行以下命令:
-c am-config.yaml
该appman二进制文件(可执行文件),通常位于Qt的安装bin文件夹中。
系统界面窗口
import QtQuick 2.11
import QtQuick.Window 2.11
import QtApplicationManager.SystemUI 2.0
Window {
title: "Minidesk - QtApplicationManager Example"
width: 1024
height: 640
color: "whitesmoke"
Readme {}
Text {
anchors.bottom: parent.bottom
text: (ApplicationManager.singleProcess ? "Single" : "Multi") + "-Process Mode"
}
...
该QtApplicationManager.SystemUI模块需要导入来访问应用程序管理器的API。系统UI窗口具有固定的大小和“ whitesmoke”背景色。除了Window之外,root元素还可以是常规项目,例如Rectangle。应用程序管理器会为您将其包装在一个窗口中。在背景顶部,我们显示一个Readme元素,其中包含有关可用功能的信息。左下角有一个文本指示,指示应用程序管理器是在单进程模式还是多进程模式下运行。
// Application launcher panel
Column {
Repeater {
model: ApplicationManager
Image {
source: icon
opacity: isRunning ? 0.3 : 1.0
MouseArea {
anchors.fill: parent
onClicked: isRunning ? application.stop() : application.start("documentUrl");
}
}
}
}
中继器提供了设置在一个应用程序图标列在系统UI的左上角; 所述ApplicationManager元件是模型。其中,ApplicationManager提供了icon用作图像源URL 的角色。该iconURL是在应用程序的定义info.yaml文件。为了指示应用程序已启动,通过将其绑定到isRunning角色来减少相应应用程序图标的不透明度。
单击应用程序图标可通过调用ApplicationObject.start()启动相应的应用程序。可通过ApplicationManager模型中的application角色访问此功能。这两个应用程序均以(可选)文档URL开头(documentUrl)。如果应用程序已经在运行,则调用ApplicationObject.stop()。
Windows系统界面中的应用程序
// System UI chrome for applications
Repeater {
model: ListModel { id: topLevelWindowsModel }
delegate: Image {
source: "chrome-bg.png"
z: model.index
Text {
anchors.horizontalCenter: parent.horizontalCenter
text: "Decoration: " + (model.window.application ? model.window.application.name("en")
: 'External Application')
}
MouseArea {
anchors.fill: parent
drag.target: parent
onPressed: topLevelWindowsModel.move(model.index, topLevelWindowsModel.count - 1, 1);
}
Rectangle {
width: 25; height: 25
color: "chocolate"
MouseArea {
anchors.fill: parent
onClicked: model.window.close();
}
}
WindowItem {
anchors.fill: parent
anchors.margins: 3
anchors.topMargin: 25
window: model.window
Connections {
target: window
function onContentStateChanged() {
if (window.contentState === WindowObject.NoSurface)
topLevelWindowsModel.remove(model.index, 1);
}
}
}
Component.onCompleted: {
x = 300 + model.index * 50;
y = 10 + model.index * 30;
}
}
}
该模型是一个普通的ListModel ,它由WindowManager创建的窗口对象所提供。下面显示了填充此ListModel的窗口角色的代码。现在,让我们集中讨论此Repeater的代表包括什么:
- 大部分是透明的背景图片。该位置取决于model.index,因此每个应用程序窗口都有一个不同的初始位置。
- 创建该窗口的应用程序的名称,其前缀为“ Decoration”。此名称来自在应用程序的info.yaml文件中定义的相关ApplicationObject。
- 一个用于拖动和抬起窗口的MouseArea。该鼠标区域填满整个窗口。包含应用程序窗口的WindowItem放置在其顶部,因此将无法处理拖动。
- 左上角的一个小的巧克力色矩形,用于关闭窗口(请参见WindowObject.close())。由于我们的示例应用程序只有一个顶级窗口,因此关闭它会导致相应的应用程序退出。
- 核心:一个WindowItem,用于WindowObject在系统用户界面中呈现;类似于图像文件和QML的图像组件之间的关系。
- 最后,一旦从应用程序(客户端)端销毁了窗口的窗口,则将代码从ListModel中删除,这是因为它已关闭,变为不可见状态,或者应用程序本身退出或崩溃了。这些情况中的任何一种都会导致WindowObject失去其表面。如Animated Windows System UI Example中所示,更复杂的System UI可以使窗口消失动画。
未完待续.......下一篇文章我们将发布完整版代码!
本篇文章中的内容你都学会了吗?如果这篇文章没能满足你的需求、点击获取更多文章教程!现在立刻下载Qt免费试用吧!更多Qt类开发工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在线订购现直降1000元,欢迎前往慧都网咨询在线客服获取更多优惠>>
相关推荐
- 看黑客是如何获取你电脑最高权限的,一定要看
-
在渗透过程中,通过各种方式获取到一枚cmdshell,但是这个shell的权限比较低,无法让我们做我们想要做的一些操作,比如说获取系统密码,获取数据库信息,又或者比如说拿到服务器中的另一个站点的权限,...
- 是50个常用的Visual Basic代码示例:
-
以下是50个常用的VisualBasic代码示例:1.声明变量```vb...
- 电脑系统型号怎么看版本(如何看电脑系统型号)
-
有时候我们会需要进行查看电脑上安装的windows系统版本及系统版本号,但对于不懂电脑知识的小白来说要怎么查看电脑系统版本信息呢?别着急,有小编在接下来,就将查看电脑系统版本的教程来分享给你们,希望对...
- dos命令systeminfo,查看系统启动时间。电脑卡慢,win10怎么了?
-
最近一段时间,有几个反应电脑卡慢的,都是windows10的系统。询问得知每天电脑有关机,打开任务管理器,内存使用量达到百分之九十多,而程序只打开微信、wps、360浏览器。cmd窗口运行命令syst...
- systeminfo命令:全面解析系统信息!
-
你是否曾想过,仅凭一条简单的命令,就能深入了解计算机的"内心世界"?是不是有点不可思议?那么,让我们一起探寻这个神奇的命令,揭开它背后的奥秘吧!它能提供的信息超乎你的想象,从操作系统到硬件配置,再到驱...
- 电脑序列号怎么查询?只需两行命令一键查询
-
当我们的电脑出问题需要保修的时候,需要查询到电脑的型号和序列号才更便于进行下一步的操作,有包装盒的朋友还可以在包装盒上查询,笔记本用户可以在电脑底部标签上查询,没有包装盒和标签破损的用户就无从下手了。...
- 快速显示系统信息:Systeminfo命令详解
-
Systeminfo命令是windows系统中显示系统信息的命令,此命令可以显示出计算机的操作系统的详细配置信息,包括操作系统配置、安全信息、产品ID和硬件属性(如RAM、磁盘空间和网卡)。使用...
- dos命令systeminfo图文教程,显示操作系统配置信息msinfo32
-
大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频。今天我们学习systeminfo命令,该工具显示本地或远程机器(包括服务包级别)的操作系统配置的信息,...
- 基于uniapp+vue3跨端仿制chatgpt实例uniapp-chatgpt
-
#夏日生活打卡季#...
- 原创新作uniapp+vue3+pinia2高仿微信App聊天
-
前段时间有给大家分享一个flutter3.x桌面端os系统。今天再分享一款最新原创之作uniapp-vue3-wechat聊天实例。uni-vue3-wechat采用...
- UniApp开发的设备适配(uniapp服务器配置)
-
UniApp是一个跨平台开发框架,支持多端应用(如H5、小程序、iOS、Android等)。由于不同设备的屏幕尺寸、分辨率、操作系统等存在差异,设备适配是开发过程中需要重点关注的问题。以下是Uni...
- 如何用服务器搭建自己的个人网站(自己服务器怎么做网站)
-
这篇教程主要是告诉大家如何利用TCP和HTTP协议来完成网站的搭建。首先你需要有C/C++语言基础,且有服务器、客户端概念,如果你了解TCP或者HTTP协议的话,那么将会帮助你更快的学会如何搭建个人网...
- 大话C语言:字符数组(c语言字符数组教学视频)
-
1字符数组概述C语言中没有字符串这种数据类型,可以通过char的数组来替代。数字0(和字符'\0'等价)结尾的char数组就是一个字符串,字符串是一种特殊的char的数组。...
- 源码分享:在pdf上加盖电子签章(pdf怎么加电子签章)
-
在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...
- C语言wcstombs函数详解:宽字符字符串到多字节的「翻译官」
-
核心定位wcstombs是C语言中用于将宽字符字符串转换为多字节字符串的「翻译官」,它能将宽字符(wchar_t)转换为多字节字符(如UTF-8编码的中文)。就像一位翻译官,它能将一种语言(宽字符...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)