让你的 Qt 桌面程序看上去更加 native(一共六篇)

《让你的 Qt 桌面程序看上去更加 native》是一个系列文章。在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native。这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的“细节”,而有时候恰恰是这些“细节”决定着用户体验。同时,这里的程序都是指桌面程序,不包括各个嵌入式平台。

关于 Qt 的介绍这里就不再赘述。这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing。Qt 的大部分组件都是由自己的绘图系统绘制出来的,这一点决定了 Qt 的效率不会像 MFC 或者 wxWidgets 那么高。同时,也正是由于这一点,使得 Qt 的桌面程序有时候看起来不是那么原生。

所谓 native,也就是这里所说的“原生”。任何桌面,Windows、GNOME、KDE、MacOS,都有着自己独特的风格。这种风格就称为 native。通常,获取一个窗口最最 native 的方式就是调用系统自己的函数,例如在 Windows 平台上使用 win32 API 创建一个窗口,这个窗口一定是 native 的。同样,你使用 Gnome 或者 KDE 的 API,也会获得一个原生的窗口。各个平台上的窗口组件布局也是不同的。在 Windows 上,菜单上面的 Help 总是出现在其他菜单项相邻的位置,菜单栏最右侧往往是一片空白。但是在 MacOS 上,Help 菜单是出现在菜单栏的最右侧,Help 菜单与其他菜单之间会有一大段空白。这就是两个平台的 native 风格的差异。如果你的程序仅仅按照 Windows 平台上的样式编写,MacOS 用户就会觉得这个程序很山寨。这对于一个真正跨平台的程序来说是不足的。

现在我们说明,这个系列所做的工作,就是让 Qt 桌面程序在 Windows、GNOME、KDE 和 MacOS 下都有着同原生程序一样的效果。当然,有些时候这个目的很难实现,因此,我们只是朝这个努力一下。

在开始正文之前,我们应该知道,实际上,各个平台都有自己的界面设计指南,告诉你在本平台上,确定按钮和取消按钮究竟谁在前谁在后,应用程序通常字体是什么,几号字等等。这些指导性文档都是可以在网上找到,下面我们列出来供大家参考:

Windows:Windows 用户体验交互指南(Windows User Experience Interaction Guidelines)

Apple:Apple 用户界面指南(Apple Human Interface Guidelines)

GNOME:GNOME 用户界面指南(GNOME Human Interface Guidelines)

KDE:KDE 用户界面指南( KDE User Interface Guidelines)

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/455917

时间: 2024-12-04 05:32:34

让你的 Qt 桌面程序看上去更加 native(一共六篇)的相关文章

关于xfce桌面程序启动失败

当双击桌面图标的时候,出现如下错误信息:Process org.xfce.FileManager exited with status 1 于是做出如下尝试: 1. ps aux | grep FileManager未找到 2. pacman -Qs FileManager未找到 3. pacman -Ql | grep FileManager找到一个相关的文件 /usr/share/dbus-1/services/org.xfce.FileManager.service根据路径名,猜测与dbu

突破短板,传统桌面程序 使用webapi 扩展迎合web和移动端融合的需求

传统桌面程序不能完全被web和移动端替代,但是需要改造.这里要说的是巧用webapi把以前用dll和com组件,ocx等方式做接口,做分布式开发的方式,改成restful 风格api的方式实现跨平台,多客户端(类型).并分享几则案例. 1.智能储物柜 项目背景:某智慧城市项目需要用到有智能锁的储物柜,用app扫码控制存取,并和智慧城市后台交互.智能锁系统是工业的塔式控制器,使用modbus ascii协议控制,端口使用串口.储物柜配备了工控电脑32寸竖屏,工控电脑控制塔式控制器(单片机),工控机

桌面程序开发入门(WinForm with C#)

1.使用Visual Studio 2013创建新项目 2.创建一个主窗体和4个子窗体 3.创建一个数据库.一个表.一个存储过程 4.在配置文件里添加数据库连接字符串 5.真正的编码工作. 第一步:创建新项目,一张图片抵一万字!看图说话,呵呵.. 第二步:创建4个子窗体,名称分别是formCommandProc.cs.formDataAdapterProc.cs.formXMLCreate.cs.formXMLRead.cs. 三.创建一个数据库.一个表.一个存储过程.打开MS SQL Serv

windows之桌面程序引导功能

经常使用windows系统的同学可能都会遇到这样一种情况,刚按照完的应用程序,可能会在桌面产生一个提示信息,指示当前快捷方式可以使用了,并给出相应的文字说明,指示该快捷方式的功能.那么大家有没有考虑过这供功能是怎么实现的呢,使用一般的窗口spy工具应该都能抓取windows系统桌面使用的窗口类,我使用彗星小助手抓取了下,效果如图1所示.原来windows桌面窗口是一个listview,那么问题就变得简单了,我们只需要拿到窗口句柄,并向其发送消息LVM_GETITEMCOUNT消息,获取到窗口it

Eclipse RCP开发桌面程序

所谓RCP,就是Rich Client Platform的缩写,即富客户平台,是Eclipse进化的产物(自3.0版以后出现),是Eclipse组织向用户提供的强大的开放性开发平台,能够使用户方便地创建自己的基于Eclipse的应用程序,并且这些应用程序能够得到Eclipse的底层支持.更重要的是,我们可以利用Java创建象Eclipse这么漂亮的桌面程序. 我相信,在未来的几年里,RCP一定会变得非常流行.使用RCP,我们可以开发界面象Eclipse这样漂亮的桌面程序,比如医院管理系统啊.CA

分享我用Qt开发的应用程序【二】在Qt应用程序中使用字体图标fontawesome

为了使用简单,需要先写一个单件类,头文件的代码如下: 其中静态方法Instance保证IconHelper的实例全局唯一 (注意构造函数已经私有化了) #ifndefICONHELPER_H #defineICONHELPER_H #include<QObject> #include<QMutex> #include<QMutexLocker> #include<QtGui> #include<QtWidgets> #include<qfo

转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因

转自: http://my.oschina.net/u/2306127/blog/370495 终于搞清楚了为什么Java桌面程序总是感觉慢的原因!    按照道理服务器和浏览器都在用脚本和虚拟机,那些不慢,而Java的桌面程序总是感觉响应迟钝呢?主要有两个原因,一是服务器和浏览器都是异步的,提交到渲染出来这中间有足够的时间去处理,而且网络IO要远远慢于本地CPU调用:二是浏览器的界面其实不是JavaScript渲染(很多人可能都会以为HTML是JS绘制的),而是浏览器在操作系统层原生支持的,甚

迁移桌面程序到MS Store(5)——.NET Standard

接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来写UWP版本,所以我建议将迁移的过程分阶段,通过几个版本的迭代,慢慢地从传统桌面程序,转变成一个可以通过MS Store审核的APPX程序.至于之后要不要变成真·UWP可以视市场反馈决定. 假设现有的桌面程序包含一个MainUI的WPF工程,多个.NET Framework 4.5的类库,以及一个C

迁移桌面程序到MS Store(10)——在Windows S Mode运行

首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需审核,同时APP在沙盒环境下,以普通用户权限运行,不能偷偷摸摸地干坏事,抢占资源的情况也不会发生,自然体验流畅,系统性能提升.一切都是那么的美好,但Windows S Mode就是没有人用…… 这个悲剧真是不好说,也许是用户习惯,也许是违背人性,同时侵犯了厂商(要审核,要分成)和用户的利益(很多软件