Qt实现360安全卫士标题栏(界面)

    转载一去二三里大佬的博客:http://blog.sina.com.cn/s/blog_a6fb6cc90101e8lf.html。

    大佬的博客对每个知识点都讲解的非常详细,Qt实现360安全卫士,对我这个刚刚入门的小白来说,犹如珍品。

     首先我将这个大项目按照自己的想法划分了一下,标题栏的界面,标题栏的各大功能(设置,关于我们,新版特性,换肤,反馈建议,),中央界面,登录界面。

今天主要讲的是标题栏的界面实现,如下图所示:

 

关于标题栏的按钮样式(皮肤,最大化,最小化,关闭等),采取三种状态:正常,鼠标划过和鼠标点击,有QPushButton实现。 关于标题“360安全卫士9.2”由QLabel实现,设置字体颜色这有两种方法:

     第一种:

     QLabel *version_title=new QLabel();

     version_title->setStyleSheet("color:white;");

      第二种结合QSS

      version_title->setObjectName("whiteLabel");

      QLabel#whiteLabel{
          color:white;
       }

 关于标题栏里的“电脑体验”“木马查杀”等这部分功能,通过点击不同的按钮来切换到不同的界面,按钮由QToolButton实 现,设置其文本在图标之下。

  代码实现如下:

#pragma once

#include<QWidget>
#include<QLabel>
#include<QPushButton>
#include<QHBoxLayout>
#include<QSignalMapper>
#include"tool_button.h"
#include"push_button.h"
class title_widget : public QWidget
{
	Q_OBJECT

public:
	title_widget(QWidget *parent=0);
	~title_widget();
	void translateLanguage();
signals:

	void showSkin();
	void showMin();
	void showMainMenu();
	void closeWidget();
	void turnPage(int current_page);
public slots:
     void turnPage(QString current_page);
private:
	QPoint press_point;        //鼠标按下去的点
	bool is_move;

	QLabel *version_title;     //标题
	push_button *medal_button; //勋章墙
	push_button *skin_button;  //换肤
	push_button *main_menu_button;//设置
	push_button *min_button;   //最小化   
	push_button *feedback_button;//反馈建议
	push_button *close_button; //关闭
	
	QLabel *safe_360_label;    //360安全卫士
	QLabel *safe_label;        //360安全卫士

	QList<tool_button *> button_list;
};
#include "title_widget.h"
#include "push_button.h"
#include"tool_button.h"
#pragma execution_character_set("utf-8")
title_widget::title_widget(QWidget *parent)
	: QWidget(parent)
{
	//去掉边框和设置背景为透明
	setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
	/*setAttribute(Qt::WA_TranslucentBackground);*/


	version_title = new QLabel();
	medal_button = new push_button(); //勋章墙
	skin_button = new push_button();  //换肤
	main_menu_button = new push_button();//设置
	min_button = new push_button();   //最小化   
	feedback_button = new push_button();//反馈建议
	close_button = new push_button(); //关闭

	//version_title->setObjectName("whiteLabel");
	//设置图片
	medal_button->setPicName(QString(":/sysButton/medal"));
	skin_button->setPicName(QString(":/sysButton/skin"));
	feedback_button->setPicName(QString(":/sysButton/feedback"));
	main_menu_button->setPicName(QString(":/sysButton/menu"));
	min_button->setPicName(QString(":/sysButton/min"));
	close_button->setPicName(QString(":/sysButton/close"));
	//关联
	connect(skin_button, SIGNAL(clicked()), this, SIGNAL(showSkin()));
	connect(main_menu_button, SIGNAL(clicked()), this, SIGNAL(showMainMenu()));
	connect(min_button, SIGNAL(clicked()), this, SIGNAL(showMin()));
	connect(close_button, SIGNAL(clicked()), this, SIGNAL(closeWidget()));

	//水平布局
	QHBoxLayout *title_layout = new QHBoxLayout();
	title_layout->addWidget(version_title,0,Qt::AlignVCenter);
	title_layout->addStretch();
	title_layout->addWidget(medal_button,0,Qt::AlignTop);
	title_layout->addWidget(skin_button, 0, Qt::AlignTop);
	title_layout->addWidget(feedback_button, 0, Qt::AlignTop);
	title_layout->addWidget(main_menu_button, 0, Qt::AlignTop);
	title_layout->addWidget(min_button, 0, Qt::AlignTop);
	title_layout->addWidget(close_button, 0, Qt::AlignTop);

	title_layout->setSpacing(0);
	title_layout->setContentsMargins(0,0,5,0);
	version_title->setContentsMargins(15,0,0,0);
	skin_button->setContentsMargins(0,0,10,0);

	QStringList string_list;
	string_list << ":/toolWidget/tiJian" << ":/toolWidget/muMa" << ":/toolWidget/repair" << ":/toolWidget/qingLi"
		<< ":/toolWidget/jiaSu" << ":/toolWidget/expert" << ":/toolWidget/menZhen" << ":/toolWidget/gongNeng";

	QHBoxLayout *button_layout = new QHBoxLayout();
	QSignalMapper *signal_mapper = new QSignalMapper(this);
	for (int i = 0; i < string_list.size();i++)
	{
		//贴图
		tool_button *tol_button = new tool_button(string_list.at(i));
		button_list.append(tol_button);
		connect(tol_button, SIGNAL(clicked()),signal_mapper,SLOT(map()));
		signal_mapper->setMapping(tol_button,QString::number(i,10));

		button_layout->addWidget(tol_button,0,Qt::AlignBottom);
	}

	connect(signal_mapper,SIGNAL(mapped(QString)),this,SLOT(turnPage(QString)));
	safe_360_label = new QLabel();
	safe_label = new QLabel();

	QVBoxLayout *safe_layout = new QVBoxLayout();
	safe_layout->addWidget(safe_360_label);
	safe_layout->addWidget(safe_label);
	safe_layout->setSpacing(5);
	safe_layout->setContentsMargins(0,0,0,0);

	//标题栏里的那个360图标
	QLabel *logo_label = new QLabel();
	QPixmap pixmap(":/img/safe");
	logo_label->setPixmap(pixmap);
	logo_label->setFixedSize(pixmap.size());

	/*safe_360_label->setObjectName("whiteLabel");
	safe_label->setObjectName("whiteLabel");*/
	QFont safe_360_font = safe_360_label->font();
	safe_360_font.setPointSize(18);
	safe_360_font.setBold(true);
	safe_360_label->setFont(safe_360_font);

	safe_360_label->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
	safe_label->setAlignment(Qt::AlignHCenter | Qt::AlignTop);

	QFont safe_font = safe_label->font();
	safe_font.setPointSize(14);
	safe_font.setBold(true);
	safe_label->setFont(safe_font);

	button_layout->addStretch();
	button_layout->addLayout(safe_layout);
	button_layout->addWidget(logo_label);
	button_layout->setSpacing(8);
	button_layout->setContentsMargins(15, 0, 15, 0);

	QVBoxLayout *main_layout = new QVBoxLayout();
	main_layout->addLayout(title_layout);
	main_layout->addLayout(button_layout);
	main_layout->setSpacing(0);
	main_layout->setContentsMargins(0, 0, 0, 0);

	this->translateLanguage();

	setLayout(main_layout);
	setFixedHeight(110);
	setFixedWidth(870);
	is_move = false;

}

title_widget::~title_widget()
{
  
}
void title_widget::translateLanguage()
{
	version_title->setText(tr("title") + QString("9.2"));
	skin_button->setToolTip(tr("change skin"));
	main_menu_button->setToolTip(tr("main menu"));
	min_button->setToolTip(tr("minimize"));
	feedback_button->setToolTip(tr("feedback"));
	close_button->setToolTip(tr("close"));

	button_list.at(0)->setText(tr("power"));
	button_list.at(1)->setText(tr("mummy"));
	button_list.at(2)->setText(tr("repair"));
	button_list.at(3)->setText(tr("clear"));
	button_list.at(4)->setText(tr("optimize"));
	button_list.at(5)->setText(tr("expert"));
	button_list.at(6)->setText(tr("hole"));
	button_list.at(7)->setText(tr("software"));

	safe_360_label->setText(tr("360"));
	safe_label->setText(tr("safe"));
}
void title_widget::turnPage(QString current_page)
{
	bool ok;
	int current_index = current_page.toInt(&ok, 10);

	for (int i = 0; i<button_list.count(); i++)
	{
		tool_button *tol_button = button_list.at(i);
		if (current_index == i)
		{
			tol_button->setMousePress(true);
		}
		else
		{
			tol_button->setMousePress(false);
		}
	}

	emit turnPage(current_index);
}
 #include "push_button.h" 和#include"tool_button.h"封装了QPushButton和QToolButton类
 
#include <QApplication>
#include <QTextCodec>
#include <QTranslator>
#include"title_widget.h"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	QTextCodec *codec = QTextCodec::codecForName("System");
	QTextCodec::setCodecForLocale(codec);
        //可以对界面中的菜单栏,label,对话框等进行翻译
	QTranslator translator;
	translator.load(QString(":/qm/qt_zh_CN"));
	a.installTranslator(&translator);

	QTranslator translator_zh;
	translator_zh.load(QString(":/qm/360safe_zh"));
	a.installTranslator(&translator_zh);

	//加载QSS样式表
	QFile qss(":/qss/360safe");
	qss.open(QFile::ReadOnly);
	qApp->setStyleSheet(qss.readAll());
	qss.close();


	title_widget w;
	w.show();

	return a.exec();
}

小技巧:

   以前贴图的时候,从来没给图片的路径起个别名,代码看着舒服。




猜你喜欢

转载自blog.csdn.net/m0_37806112/article/details/79992393