[go] 360安全卫士四 --更多的页面

永远的GitHub地址: https://github.com/JianBiHua/go_360_safe

这节我们会加入更丰富的界面,之前有说过QT的*.ui文件,这节将会使用!这节本应该加入6个界面,但是里面的代码大多一样,就不全部添加,各位可以下了源码,自行添加,权当学习了;

最好学习方法不是看多少书,而是走多少路;动手才是硬道理!!!


1. 看下图,我们先打开QT Creator,创建一个page_home.ui,如下图(如果完全不会QT,请百度,别人说的肯定更清楚)

  1. 创建一个page_home.ui在这里插入图片描述
  2. 双击page_home.ui, 拖动控件,并保存;这个是第一个page页面,其它页面根据需要添加不同的控件即可,现在还是蛮丑的,一会就漂亮了.
    在这里插入图片描述

2.看看我的代码结构,如下,加入了6个页面,为啥是6个,而不是8个,因为360安全卫士,的后最后两个是特殊处理的,而不是页面显示的!!在这里插入图片描述

这次我们加的文件较多,但是实际上,那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没有继承接口的概念,所以这里实现使用转换来处理的

好了,界面应该是可以显示出来了。

在这里插入图片描述

矮油,左边中间还少一块呀,这个说起来比较复杂,我会单独开一节讲解

猜你喜欢

转载自blog.csdn.net/dkaily1314/article/details/88907889