云网牛站
所在位置:首页 > Linux编程 > 在Deepin系统下做一个基于DTK开发的浏览器应用程序

在Deepin系统下做一个基于DTK开发的浏览器应用程序

2020-12-04 10:41:30作者:Maicss稿源:深度站

下面演示如何在深度Deepin系统下做一个基于DTK(Deepin Tool Kit)开发的浏览器应用程序,可以基于这个DTK框架,就能开发各种酷炫的GUI应用了。

 

前言

参考:Deepin Tool Kit(Dtk):构建深度样式应用程序的工具

项目地址:https://gitee.com/Maicss/deepin-browser

在Deepin系统下做一个基于DTK开发的浏览器应用程序

说明:

支持窗口模糊特效,未来支持透明度调节(支持关掉以节省资源)。

支持明暗切换。

有圆角,跟随系统设置调节。

有收藏夹功能(目前比较简陋,只能有一个一级列表)。

除收藏夹外,其他设置还没法保存。

 

实践

1、现在介绍一下这个主窗口的组成:

在Deepin系统下做一个基于DTK开发的浏览器应用程序

如果不需要模糊特效的话,完全可以使用DMainWindow来代替DBlurEffectWidget(图中拼写错误)和DTitlebar的组合,因为DMainWindow就是一个圆角无边框窗口和一个DTitlebar的组合,但是DMainWindow提供了一些接口来定义阴影的宽度,深度,颜色,标题栏阴影等。

2、DTitlebar,这是块好地,得好好利用。

这个标题栏中支持添加任何控件,用setCustomWidget方法,添加一个Widget在里边,然后在这个Widget里边添加布局和控件即可。

如图:

在Deepin系统下做一个基于DTK开发的浏览器应用程序

这个标题栏也有很多有趣的接口,比如:

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);//用这个接口关闭模糊后,效果是下边这个鬼样子,完全透明!

在Deepin系统下做一个基于DTK开发的浏览器应用程序

我找了一圈也没研究明白这玩意怎么让他变成不透明,没找到。

于是乎我就来了一波实践操作,在这个窗口上再放一个子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的应用程序。

 

相关主题

DDE Store介绍和安装:它是使用DTK构建的DDE应用商店

精选文章
热门文章