永远的GitHub地址: https://github.com/JianBiHua/go_360_safe
这节我们会加入更丰富的界面,之前有说过QT的*.ui文件,这节将会使用!这节本应该加入6个界面,但是里面的代码大多一样,就不全部添加,各位可以下了源码,自行添加,权当学习了;
最好学习方法不是看多少书,而是走多少路;动手才是硬道理!!!
1. 看下图,我们先打开QT Creator,创建一个page_home.ui,如下图(如果完全不会QT,请百度,别人说的肯定更清楚)
- 创建一个page_home.ui
- 双击page_home.ui, 拖动控件,并保存;这个是第一个page页面,其它页面根据需要添加不同的控件即可,现在还是蛮丑的,一会就漂亮了.
2.看看我的代码结构,如下,加入了6个页面,为啥是6个,而不是8个,因为360安全卫士,的后最后两个是特殊处理的,而不是页面显示的!!![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/441804a687fbce86b483532ddf4e4438.png)
这次我们加的文件较多,但是实际上,那6个页面基本一样,一个会了其它就会了.
3. 看代码了,先看PageHome.go中怎么实现的。
package views
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/uitools"
"github.com/therecipe/qt/widgets"
)
// 这个结构体,暂时只需要一个QWidget,之后肯定会被扩充
type PageHome struct {
widget *widgets.QWidget
}
// 这些都跟之前一样的
func NewPageHome () *PageHome {
ph := new(PageHome)
ph.init()
return ph;
}
// 从UI中加载widget
// 核心代码
func (ph *PageHome) init () {
ph.widget = widgets.NewQWidget(nil, 0)
// 核心代码1: 加载page_home.ui,加载不同的页面,需要修改*.ui
var loader = uitools.NewQUiLoader(nil)
var file = core.NewQFile2("ui/page_home.ui")
// 核心代码2:让page_home.ui与widget关联
file.Open(core.QIODevice__ReadOnly)
loader.Load(file, ph.widget)
file.Close()
var (
// 核心代码3: 从ui中获取objectname=roundButton等的控件,
// 注意NewQSpinBoxFromPointer,NewQLabelFromPointer对应不一样的控件,
ui_pushbutton = widgets.NewQPushButtonFromPointer(ph.widget.FindChild("roundButton", core.Qt__FindChildrenRecursively).Pointer())
ui_title = widgets.NewQLabelFromPointer(ph.widget.FindChild("title", core.Qt__FindChildrenRecursively).Pointer())
ui_subtitle = widgets.NewQLabelFromPointer(ph.widget.FindChild("subtitle", core.Qt__FindChildrenRecursively).Pointer())
fangHuZhongXin = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("fangHuZhongXin", core.Qt__FindChildrenRecursively).Pointer())
wangGouXianPei = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("wangGouXianPei", core.Qt__FindChildrenRecursively).Pointer())
fanLeSuo = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("fanLeSuo", core.Qt__FindChildrenRecursively).Pointer())
tbApp = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("tbApp", core.Qt__FindChildrenRecursively).Pointer())
tbService = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("tbService", core.Qt__FindChildrenRecursively).Pointer())
tbHandler = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("tbHandler", core.Qt__FindChildrenRecursively).Pointer())
tbFix = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("tbFix", core.Qt__FindChildrenRecursively).Pointer())
tbMore = widgets.NewQToolButtonFromPointer(ph.widget.FindChild("tbMore", core.Qt__FindChildrenRecursively).Pointer())
)
// 修改控件的样式
ui_pushbutton.SetStyleSheet(`border:none;
background-color: #16da6c;
border-radius: 30px;
color: #FFFFFF;
font-size: 25px;`)
ui_title.SetStyleSheet(`color: #444444;font-size: 25px;`)
ui_subtitle.SetStyleSheet(`color: #9b9999;font-size: 16px;`)
// 这个是ToolButton上节出现的,这里又加了一个构造函数,
var tb = NewToolButton3(fangHuZhongXin, "防护中心", "resources/other/icon_fanghuzhongxin.png", 40, 40)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
`)
tb = NewToolButton3(wangGouXianPei, "网购先陪", "resources/other/icon_wanggou.png", 40, 40)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
`)
tb = NewToolButton3(fanLeSuo, "反勒索服务", "resources/other/icon_fanlesuo.png", 40, 40)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
`)
tb = NewToolButton3(tbApp, "软件管理", "resources/other/icon_app.png", 42, 42)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
padding-bottom: 10px;
`)
tb = NewToolButton3(tbService, "主页修复", "resources/other/icon_fix.png", 42, 42)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
padding-bottom: 10px;
`)
tb = NewToolButton3(tbHandler, "手机助手", "resources/other/icon_handler.png", 42, 42)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
padding-bottom: 10px;
`)
tb = NewToolButton3(tbFix, "更多功能", "resources/other/icon_more.png", 42, 42)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
padding-bottom: 10px;
`)
tb = NewToolButton3(tbMore, "人工服务", "resources/other/icon_help.png", 42, 42)
tb.Widget().SetStyleSheet(`
border: 0px;
border-radius: 0px;
background-color: #00000000;
color:rgb(124, 124, 124);
font-size: 10px;
padding-bottom: 10px;
`)
}
// 这玩意,跟之前都是一样的,为了在其它页面调用到QT的控件指针,方便修改属性等
func (ph *PageHome) Widget () *widgets.QWidget {
return ph.widget
}
这个QToolbutton显示出来很奇怪,部分显示正常,部分显示不正常,我也没看出来哪里的问题,就暂时不修改了, 太费时了! 咱的主要意图是学习怎么用,如果想做的效果好点,自定义一个QWidget代替QToolbutton最好了,想显示啥样就啥样.
4. 自定义的Page是有了,该显示了。
看代码,很简单哦
package views
import "github.com/therecipe/qt/widgets"
type WidgetInterface interface{
Widget () *widgets.QWidget
}
// showStackedWidget
// 显示stackedWidget
func (mw *MainWindow) showStackedWidget() {
mw.stackWidget = widgets.NewQStackedWidget(mw.window)
mw.stackWidget.SetGeometry2(0, 120, WIDTH, HEIGHT-120)
mw.stackWidget.SetCurrentIndex(0)
mw.stackWidget.SetStyleSheet("background: #FFFFFF")
// 接口的初次应用
var widgetInterface WidgetInterface
// 将PageHome,断言转换为接口
// 因为go没有继承接口的概念,所以这里实现使用转换来处理的
widgetInterface = NewPageHome()
//创建Page,并显示。
mw.stackWidget.AddWidget(widgetInterface.Widget())
// 将HorseHome,断言转换为接口
// 因为go没有继承接口的概念,所以这里实现使用转换来处理的
widgetInterface = NewPageHorse()
//创建Page,并显示。
mw.stackWidget.AddWidget(widgetInterface.Widget())
widgetInterface = NewPageClear()
mw.stackWidget.AddWidget(widgetInterface.Widget())
widgetInterface = NewPageFix()
//创建Page,并显示。
mw.stackWidget.AddWidget(widgetInterface.Widget())
widgetInterface = NewPageOptimize()
//创建Page,并显示。
mw.stackWidget.AddWidget(widgetInterface.Widget())
widgetInterface = NewPageActions()
//创建Page,并显示。
mw.stackWidget.AddWidget(widgetInterface.Widget())
}
这里第一次用了接口,实际上就相当于JAVA的接口,IOS的Delegate,C++的虚函数;
因为go没有继承接口的概念,所以这里实现使用转换来处理的
好了,界面应该是可以显示出来了。
矮油,左边中间还少一块呀,这个说起来比较复杂,我会单独开一节讲解