Qt实现360安全卫士主界面(中央窗体)

      中央窗口可以分为左右两部分,左半边由QWidget实现,包含三个QLabel,一个QPushButton,QLabel主要用来显示图片,文本信息,还有一个按钮负责“立即体验”。

       右半边由QSplitter实现分割窗口,每个QWidget又包含不同的组件。

       整体部分由QSplitter将左半边的QWidget与右半边的QSplitter分割,分割线均不可拖动。

      

 

#pragma once

#include <QWidget>
#include <QSplitter>
#include <QToolButton>
#include <QPushButton>
#include <QLabel>
#include <QProgressBar>
#include <QPainter>
#include <QPen>
#include <QHBoxLayout>
#include <QEvent>
#include <QVBoxLayout>
class content_widget : public QWidget
{
	Q_OBJECT

public:
	explicit content_widget(QWidget *parent=0);
	~content_widget();
	void translateLanguage();
private:
	void initLeft();     //主窗口左边
	void initRight();
	void initRightTop(); //主窗口右上部
	void initRightCenter();
	void initRightCenterFuntion();
	void initRightButton();

protected:
	bool eventFilter(QObject *obj, QEvent *event);

private:
	QSplitter *main_splitter;

	QWidget *left_widget;
	QLabel *label;
	QLabel *suggest_label;
	QLabel *system_safe_label;
	QPushButton *power_button; //立即体验按钮

	QSplitter *right_splitter;
	QWidget *right_top_widget;

	QPushButton *login_button; //登录我的360账号
	QLabel *priv_label;        //黄砖图标
	QLabel *info_label;        //开启炫动卫视图标
	QLabel *privilege_label;   //专享特权
	QPushButton *register_button; //10秒免费注册
	QPushButton *safe_button;     //特权领360炫动logo
	QPushButton *tab_button;      //领取炫动导航功能图标
	QPushButton *pet_button;      //宠物安仔精灵
	QPushButton *lottery_button;  //按在抱枕大派送
	QPushButton *cloud_five_button;  //5G云盘
	QPushButton *caipiao_button;     //彩票

	QWidget *right_center_widget;
	QToolButton *fireproof_button;    //360防火墙
	QToolButton *triggerman_button;   //360保镖
	QToolButton *net_shop_button;     //网购先赔
	QLabel *line_label_1;             //虚线
	QLabel *line_label_2;             //虚线


	QWidget *right_center_funtion_widget;
	QLabel *funtion_label;             //功能大全
	QPushButton *more_button;          //更多
	QList<QToolButton *> button_list;  //按钮容器

	QWidget *right_botton_widget;
	QLabel *icon_label;                //云图标
	QLabel *connect_label;             //成功连接云安全
	QLabel *version_label;             //版本号
	QPushButton *version_button;       //版本升级
};
#include "content_widget.h"

content_widget::content_widget(QWidget *parent)
	: QWidget(parent)
{
	//初始化
	setAttribute(Qt::WA_TranslucentBackground);
	main_splitter = new QSplitter();

	main_splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
	main_splitter->setOrientation(Qt::Horizontal);           //水平线
	main_splitter->setHandleWidth(1);                        //设置分界线的宽度

	initLeft();
	initRight();
	initRightTop();
	initRightCenter();
	initRightCenterFuntion();
	initRightButton();

	right_splitter->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
	right_splitter->setOrientation(Qt::Vertical);
	right_splitter->setHandleWidth(1);

	right_top_widget->setFixedSize(250, 130);
	right_center_widget->setFixedSize(250, 90);
	right_botton_widget->setFixedSize(250, 15);
	right_splitter->addWidget(right_top_widget);
	right_splitter->addWidget(right_center_widget);
	right_splitter->addWidget(right_center_funtion_widget);
	right_splitter->addWidget(right_botton_widget);

	main_splitter->addWidget(left_widget);
	main_splitter->addWidget(right_splitter);


	for (int i = 0; i <right_splitter->count(); i++)
	{
		//分界线是QSplitterHandle 类对象
		//如果有多条分界线,怎么操作第一条分界线
		QSplitterHandle *handle = right_splitter->handle(i);
		handle->setEnabled(false);
	}

	//主分割只有一条分界线
	QSplitterHandle *handle = main_splitter->handle(1);
	handle->setEnabled(false);

	//水平
	QHBoxLayout *main_layout = new QHBoxLayout();
	main_layout->addWidget(main_splitter);
	main_layout->setSpacing(0);
	main_layout->getContentsMargins(0, 0, 0, 0);

	setLayout(main_layout);
	translateLanguage();


}

content_widget::~content_widget()
{
}
void content_widget::initLeft()
{
	left_widget = new QWidget();
	label = new QLabel();
	suggest_label = new QLabel();
	system_safe_label = new QLabel();
	power_button = new QPushButton();

	left_widget->resize(650, 500);

	QPixmap label_pixmap(":/contentWidget/computer");
	label->setPixmap(label_pixmap);
	label->setFixedSize(label_pixmap.size());

	QFont suggest_font = suggest_label->font();
	suggest_font.setPointSize(12);
	suggest_font.setBold(true);
	suggest_label->setFont(suggest_font);
	suggest_label->setObjectName("grayLabel");

	QFont system_safe_font = system_safe_label->font();
	system_safe_font.setBold(true);
	system_safe_label->setFont(system_safe_font);
	system_safe_label->setObjectName("grayLabel");

	QPixmap pixmap(":/contentWidget/power");
	power_button->setIcon(pixmap);
	power_button->setIconSize(pixmap.size());
	power_button->setFixedSize(180, 70);
	power_button->setObjectName("greenButton");
	//改变字体大小
	QFont power_font = power_button->font();
	power_font.setPointSize(16);
	power_button->setFont(power_font);

	//排版
	QVBoxLayout *v_layout = new QVBoxLayout();
	v_layout->addWidget(suggest_label);
	v_layout->addWidget(system_safe_label);
	v_layout->addStretch();
	v_layout->setSpacing(15);
	v_layout->setContentsMargins(0, 20, 0, 0);

	QHBoxLayout *h_layout = new QHBoxLayout();
	h_layout->addWidget(label, 0, Qt::AlignTop);
	h_layout->addLayout(v_layout);
	h_layout->addStretch();
	h_layout->setSpacing(20);
	h_layout->setContentsMargins(30, 20, 0, 0);

	QVBoxLayout *main_layout = new QVBoxLayout();
	main_layout->addLayout(h_layout);
	main_layout->addWidget(power_button, 0, Qt::AlignCenter);
	main_layout->addStretch();
	main_layout->setSpacing(0);
	main_layout->setContentsMargins(0, 0, 0, 0);

	left_widget->setLayout(main_layout);
}
void content_widget::initRight()
{
	right_splitter = new QSplitter();
}
void content_widget::initRightTop()
{
	right_top_widget = new QWidget();
	login_button = new QPushButton();
	priv_label = new QLabel();
	info_label = new QLabel();
	privilege_label = new QLabel();
	register_button = new QPushButton();
	safe_button = new QPushButton();
	tab_button = new QPushButton();
	pet_button = new QPushButton();
	lottery_button = new QPushButton();
	cloud_five_button = new QPushButton();
	caipiao_button = new QPushButton();

	login_button->setFixedSize(240, 60);
	login_button->setObjectName("loginButton");
	QFont login_font = login_button->font();
	login_font.setBold(true);
	login_font.setPointSize(12);
	login_button->setFont(login_font);

	priv_label->setPixmap(QPixmap(":/contentWidget/priv"));
	QPixmap safe_pixmap(":/contentWidget/360");
	safe_button->setIcon(safe_pixmap);
	safe_button->setFixedSize(safe_pixmap.size());
	QPixmap tab_pixmap(":/contentWidget/tab");
	tab_button->setIcon(tab_pixmap);
	tab_button->setFixedSize(tab_pixmap.size());
	QPixmap pet_pixmap(":/contentWidget/pet");
	pet_button->setIcon(pet_pixmap);
	pet_button->setFixedSize(tab_pixmap.size());
	QPixmap lottery_pixmap(":/contentWidget/lottery");
	lottery_button->setIcon(lottery_pixmap);
	lottery_button->setFixedSize(lottery_pixmap.size());
	QPixmap cloud_five_pixmap(":/contentWidget/cloud_five");
	cloud_five_button->setIcon(cloud_five_pixmap);
	cloud_five_button->setFixedSize(cloud_five_pixmap.size());
	QPixmap caipiao_pixmap(":/contentWidget/caipiao");
	caipiao_button->setIcon(caipiao_pixmap);
	caipiao_button->setFixedSize(caipiao_pixmap.size());

	//设置鼠标点击时的状态
	register_button->setCursor(Qt::PointingHandCursor);
	safe_button->setCursor(Qt::PointingHandCursor);
	tab_button->setCursor(Qt::PointingHandCursor);
	pet_button->setCursor(Qt::PointingHandCursor);
	lottery_button->setCursor(Qt::PointingHandCursor);
	cloud_five_button->setCursor(Qt::PointingHandCursor);
	caipiao_button->setCursor(Qt::PointingHandCursor);
	//按钮的样式
	register_button->setObjectName("blueButton");
	safe_button->setObjectName("transparentButton");
	tab_button->setObjectName("transparentButton");
	pet_button->setObjectName("transparentButton");
	lottery_button->setObjectName("transparentButton");
	cloud_five_button->setObjectName("transparentButton");
	caipiao_button->setObjectName("transparentButton");

	//布局
	QHBoxLayout *login_layout = new QHBoxLayout();
	login_layout->addWidget(login_button);
	login_layout->addStretch();           //按比例分配空余空间
	login_layout->setContentsMargins(15, 0, 0, 0);

	QHBoxLayout *register_layout = new QHBoxLayout();
	register_layout->addStretch();
	register_layout->addWidget(priv_label);
	register_layout->addWidget(info_label);
	register_layout->addWidget(register_button);
	register_layout->addStretch();
	register_layout->setSpacing(5);
	register_layout->setContentsMargins(0, 0, 0, 0);

	QHBoxLayout *privilege_layout = new QHBoxLayout();
	privilege_layout->addStretch();
	privilege_layout->addWidget(privilege_label);
	privilege_layout->addWidget(safe_button);
	privilege_layout->addWidget(tab_button);
	privilege_layout->addWidget(pet_button);
	privilege_layout->addWidget(lottery_button);
	privilege_layout->addWidget(cloud_five_button);
	privilege_layout->addWidget(caipiao_button);
	privilege_layout->addStretch();
	privilege_layout->setSpacing(8);
	privilege_layout->setContentsMargins(0, 0, 0, 0);

	QVBoxLayout *main_layout = new QVBoxLayout();
	main_layout->addStretch();
	main_layout->addLayout(login_layout);
	main_layout->addLayout(register_layout);
	main_layout->addLayout(privilege_layout);
	main_layout->addStretch();
	main_layout->setSpacing(5);
	main_layout->setContentsMargins(10, 10, 10, 10);

	//两信号

	right_top_widget->setLayout(main_layout);

}
void content_widget::initRightCenter()
{
	right_center_widget = new QWidget();
	fireproof_button = new QToolButton();
	triggerman_button = new QToolButton();
	net_shop_button = new QToolButton();
	line_label_1 = new QLabel();
	line_label_2 = new QLabel();
	line_label_1->setFixedWidth(10);
	line_label_2->setFixedWidth(10);

	line_label_1->installEventFilter(this);
	line_label_2->installEventFilter(this);

	fireproof_button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
	triggerman_button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
	net_shop_button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

	QPixmap fireproof_pixmap(":/contentWidget/fireproof");
	fireproof_button->setIcon(fireproof_pixmap);
	fireproof_button->setIconSize(fireproof_pixmap.size());
	fireproof_button->setFixedSize(fireproof_pixmap.width() + 25, fireproof_pixmap.height() + 25);

	QPixmap triggerman_pixmap(":/contentWidget/triggerman");
	triggerman_button->setIcon(triggerman_pixmap);
	triggerman_button->setIconSize(triggerman_pixmap.size());
	triggerman_button->setFixedSize(triggerman_pixmap.width() + 25, triggerman_pixmap.height() + 25);

	QPixmap net_shop_pixmap(":/contentWidget/net_shop");
	net_shop_button->setIcon(net_shop_pixmap);
	net_shop_button->setIconSize(net_shop_pixmap.size());
	net_shop_button->setFixedSize(net_shop_pixmap.width() + 25, net_shop_pixmap.height() + 25);

	fireproof_button->setObjectName("transparentToolButton");
	triggerman_button->setObjectName("transparentToolButton");
	net_shop_button->setObjectName("transparentToolButton");

	QHBoxLayout *h_layout = new QHBoxLayout();
	h_layout->addWidget(fireproof_button);
	h_layout->addWidget(line_label_1);
	h_layout->addWidget(triggerman_button);
	h_layout->addWidget(line_label_2);
	h_layout->addWidget(net_shop_button);
	h_layout->setSpacing(0);
	h_layout->setContentsMargins(0, 0, 0, 0);

	right_center_widget->setLayout(h_layout);
}
void content_widget::initRightCenterFuntion()
{
	right_center_funtion_widget = new QWidget();
	funtion_label = new QLabel();
	more_button = new QPushButton();

	QFont funtion_font = funtion_label->font();
	funtion_font.setBold(true);
	funtion_label->setFont(funtion_font);
	funtion_label->setObjectName("infoLabel");
	more_button->setFixedSize(50, 25);
	more_button->setObjectName("blueButton");
	more_button->setCursor(Qt::PointingHandCursor);

	QHBoxLayout *h_layout = new QHBoxLayout();
	h_layout->addWidget(funtion_label);
	h_layout->addStretch();
	h_layout->addWidget(more_button);
	h_layout->setSpacing(0);
	h_layout->setContentsMargins(10, 5, 0, 0);
       
	QStringList string_list;
	string_list << ":/contentWidget/recovery" << ":/contentWidget/moblie" << ":/contentWidget/game_box" << ":/contentWidget/desktop"
		<< ":/contentWidget/net_repair" << ":/contentWidget/auto_run" << ":/contentWidget/net_speed" << ":/contentWidget/net_pretext"
		<< ":/contentWidget/first_add";

	//网格布局
	QGridLayout *grid_layout = new QGridLayout();
	for (int i = 0; i<string_list.size(); i++)
	{
		QToolButton *tool_button = new QToolButton();
		tool_button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
		QPixmap button_pixmap(string_list.at(i));
		tool_button->setIcon(button_pixmap);
		tool_button->setIconSize(button_pixmap.size());
		tool_button->setFixedSize(button_pixmap.width() + 50, button_pixmap.height() + 35);
		tool_button->setObjectName("functionButton");


		button_list.append(tool_button);
		grid_layout->addWidget(tool_button, i / 3, i % 3);
	}

	grid_layout->setSpacing(0);
	grid_layout->setContentsMargins(5, 0, 5, 5);

	QVBoxLayout *v_layout = new QVBoxLayout();
	v_layout->addLayout(h_layout);
	v_layout->addLayout(grid_layout);
	v_layout->addStretch();
	v_layout->setSpacing(10);
	v_layout->setContentsMargins(0, 0, 0, 0);

	right_center_funtion_widget->setLayout(v_layout);

}
void content_widget::initRightButton()
{
	right_botton_widget = new QWidget();
	icon_label = new QLabel();
	connect_label = new QLabel();
	version_label = new QLabel();
	version_button = new QPushButton();

	QPixmap label_pixmap(":/contentWidget/cloud");
	icon_label->setPixmap(label_pixmap);
	icon_label->setFixedSize(label_pixmap.size());

	QPixmap pixmap(":/contentWidget/version");
	version_button->setIcon(pixmap);
	version_button->setIconSize(pixmap.size());
	version_button->setObjectName("transparentButton");

	QHBoxLayout *botton_layout = new QHBoxLayout();
	botton_layout->addWidget(icon_label);
	botton_layout->addWidget(connect_label);
	botton_layout->addStretch();
	botton_layout->addWidget(version_label);
	botton_layout->addWidget(version_button);
	botton_layout->setSpacing(5);
	botton_layout->setContentsMargins(10, 0, 10, 0);
	right_botton_widget->setLayout(botton_layout);


}
void content_widget::translateLanguage()
{
	suggest_label->setText(tr("suggest"));
	system_safe_label->setText(tr("system safe"));
	power_button->setText(tr("power"));

	login_button->setText(tr("login home"));
	info_label->setText(tr("show beautifull icon"));
	register_button->setText(tr("register"));
	privilege_label->setText(tr("privilege power"));

	fireproof_button->setText(tr("fireproof"));
	triggerman_button->setText(tr("triggerman"));
	net_shop_button->setText(tr("net shop"));

	funtion_label->setText(tr("function"));
	more_button->setText(tr("more"));
	button_list.at(0)->setText(tr("recovery"));
	button_list.at(1)->setText(tr("mobile"));
	button_list.at(2)->setText(tr("game box"));
	button_list.at(3)->setText(tr("desktop"));
	button_list.at(4)->setText(tr("net repair"));
	button_list.at(5)->setText(tr("auto run"));
	button_list.at(6)->setText(tr("net speed"));
	button_list.at(7)->setText(tr("net pretext"));
	button_list.at(8)->setText(tr("first add"));

	connect_label->setText(tr("connect success"));
	version_label->setText(tr("version"));
}
bool content_widget::eventFilter(QObject *obj, QEvent *event)
{
	if (obj == line_label_1 || obj == line_label_2)
	{
		if (event->type() == QEvent::Paint)
		{
			int label_height_1 = line_label_1->height();
			int label_width_1 = line_label_1->width();
			QPainter painter(line_label_1);
			painter.setPen(QPen(QColor(220, 220, 220), 1, Qt::DashLine));
			painter.drawLine(label_width_1 / 2, 0, label_width_1 / 2, label_height_1);

			int label_height_2 = line_label_2->height();
			int label_width_2 = line_label_2->width();
			QPainter painter2(line_label_2);
			painter2.setPen(QPen(QColor(220, 220, 220), 1, Qt::DashLine));
			painter2.drawLine(label_width_2 / 2, 0, label_width_2 / 2, label_height_2);
		}
	}
	return QWidget::eventFilter(obj, event);
}

小技巧:       

       当一次需要创建多个按钮时,我们可以通过容器QStringList将图片路径写入

       eg:     

QStringList string_list;
	string_list << ":/contentWidget/recovery" << ":/contentWidget/moblie" << ":/contentWidget/game_box" 
        << ":/contentWidget/desktop"<< ":/contentWidget/net_repair" << ":/contentWidget/auto_run" 
        << ":/contentWidget/net_speed" << ":/contentWidget/net_pretext"<< ":/contentWidget/first_add";
        button_list.at(0)->setText(tr("recovery"));
	button_list.at(1)->setText(tr("mobile"));
	button_list.at(2)->setText(tr("game box"));
	button_list.at(3)->setText(tr("desktop"));
	button_list.at(4)->setText(tr("net repair"));
	button_list.at(5)->setText(tr("auto run"));
	button_list.at(6)->setText(tr("net speed"));
	button_list.at(7)->setText(tr("net pretext"));
	button_list.at(8)->setText(tr("first add"));
 本文转自:http://blog.sina.com.cn/s/blog_a6fb6cc90101e8lv.html

猜你喜欢

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