下面演示如何在深度Deepin系统下做一个基于DTK(Deepin Tool Kit)开发的浏览器应用程序,可以基于这个DTK框架,就能开发各种酷炫的GUI应用了。
前言 参考:Deepin Tool Kit(Dtk):构建深度样式应用程序的工具。 项目地址:https://gitee.com/Maicss/deepin-browser
说明: 支持窗口模糊特效,未来支持透明度调节(支持关掉以节省资源)。 支持明暗切换。 有圆角,跟随系统设置调节。 有收藏夹功能(目前比较简陋,只能有一个一级列表)。 除收藏夹外,其他设置还没法保存。
实践 1、现在介绍一下这个主窗口的组成:
如果不需要模糊特效的话,完全可以使用DMainWindow来代替DBlurEffectWidget(图中拼写错误)和DTitlebar的组合,因为DMainWindow就是一个圆角无边框窗口和一个DTitlebar的组合,但是DMainWindow提供了一些接口来定义阴影的宽度,深度,颜色,标题栏阴影等。 2、DTitlebar,这是块好地,得好好利用。 这个标题栏中支持添加任何控件,用setCustomWidget方法,添加一个Widget在里边,然后在这个Widget里边添加布局和控件即可。 如图:
这个标题栏也有很多有趣的接口,比如: titlebar->setBackgroundTransparent(true); //可以让titlebar变为透明,此时如果父窗口是模糊特效窗口,将会把效果显示出来,否则将覆盖模糊效果 值得注意的是: 通常通过调用SetWindowIcon无法改变标题栏左侧的图标,你需要再次调用DTitlebar的setIcon接口才可以实现。 如果想要在标题栏的菜单按钮添加菜单,只需要定义一个QMenu然后调用setMenu即可。 3、亮色和暗色模式的适配,不得不说支持亮色模式和暗色模式绝对是软件本身的加分项。 connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=](DGuiApplicationHelper::ColorType themeType) { QColor main_color; main_color=DGuiApplicationHelper::instance()->applicationPalette().highlight().color();//这是系统的活动用色 if(themeType==DGuiApplicationHelper::DarkType){//这里判断是否是暗色模式,判断后对你的图标,贴图,颜色等进行修改,用来展现一个你心目中最完美的暗色模式 qDebug()<<"Dark"; //在这里执行暗色模式下对ui界面的修改 btn_left->setIcon(QIcon::fromTheme("arrow-left")); btn_right->setIcon(QIcon::fromTheme("arrow-right")); btn_f5->setIcon(QIcon::fromTheme("refresh")); }else { qDebug()<<"Light"; //在这里执行亮色模式下对ui界面的修改 btn_left->setIcon(QIcon::fromTheme("arrow-left-dark")); btn_right->setIcon(QIcon::fromTheme("arrow-right-dark")); btn_f5->setIcon(QIcon::fromTheme("refresh_dark")); } //在这里执行对活动用色的UI界面修改 }); 上边这个是给大家提供的模板,需要包含头文件DGuiApplicationHelper。 当主题被修改时,会触发themeTypeChanged信号,然后返回他的颜色主题还有亮暗模式两个参数 活动用色想必大家都知道,在控制中心-个性化-通用中可以调节。 4、兼顾低性能主机,适当关闭模糊特效。 DBlurEffectWidget有一个接口可以用来关闭模糊特效,但是这个接口多少有点多余。 setBlurEnabled(false);//用这个接口关闭模糊后,效果是下边这个鬼样子,完全透明!
我找了一圈也没研究明白这玩意怎么让他变成不透明,没找到。 于是乎我就来了一波实践操作,在这个窗口上再放一个子Widget,然后用以下方法让他变成不透明并定义颜色: QPalette plt; plt.setColor(QPalette::Background,QColor(40,40,40,255)); w->setPalette(plt); 这里需要通过上边亮色和暗色模式来设置颜色,具体怎么办我就不赘述了。
结语 下边和大家分享一下我学习DTK的几个途径,一些重要的链接: 1.官方文档页面(https://linuxdeepin.github.io/dtk/)。 2.gitee文档页面(https://deepin-opensource.gitee.io/dtk)比较旧。 3.官方代码仓库(https://github.com/linuxdeepin)。 4.官方例子(https://github.com/linuxdeepin/dtkwidget/tree/master/examples)需要clone下载自己编译。 5.搜索(可找到的资源相对比较少)。 6.如果想马上上手,可以先用这个链接(https://gitee.com/deepin-opensource/DtkDemo),这时我写的一个简单的样例,里边有详细的介绍,在这里就不多说了。
说明 以上这些教程对于基本操作基本够用了,由于个人技术和能力的限制,这个浏览器只是一个学习开发的项目,目前并没有打算以后正式打包发放给大家,大家如果想试用的话可以去项目地址下载源代码自行编译。 这是一个基础教程,可以自由的发挥开发出各种基于DTK的应用程序。
相关主题 |