1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Qt实现360安全卫士换肤功能

Qt实现360安全卫士换肤功能

时间:2020-12-26 11:18:09

相关推荐

Qt实现360安全卫士换肤功能

效果如下:

问题:标题的换肤背景未显示出来

要实现换肤功能,我们先创建一个基于drop_shadow_widget的护肤界面,我们将换肤界面分为上中下三部分。(drop_shadow_widget的功能一会说)

上部含有两个QLabel和一个QPushButton按钮。中间先显示首页8个皮肤,根据不同的页面加载不同的皮肤,当皮肤更新时,重新显示新皮肤。(封装一个类包含3个QLabel 和一个QPushButton)底部用于显示页码

#pragma once/*功能:上一页,下一页,换肤按钮*/#include <QDialog>#include <QWidget>#include <QSignalMapper>#include <QHBoxLayout>#include <QGridLayout>#include <QVBoxLayout>#include <QLabel>#include <QPushButton>#include "common.h"#include "push_button.h"#include "change_skin_widget.h"#include "drop_shadow_widget.h"class skin_widget : public drop_shadow_widget{Q_OBJECTpublic:skin_widget(QWidget *parent=0);~skin_widget();void translateLanguage();protected://重画事件void painEvent(QPaintEvent *event);signals:void changeSkin(QString skin_name);private slots:void showPage(QString current_skin);void varyfySkin();private:void initTitle();void initCenter();void initBotton();private:QString skin_name; //背景图片bool is_change;//是否改变背景QStringList skin_list; QStringList tip_list;QHBoxLayout *title_layout;QGridLayout *center_layout;QHBoxLayout *botton_layout;QLabel *title_label;//标题QLabel *title_icon_label; //标题图标push_button *close_button;//关闭按钮int page_count; //总页数int page_count_point;//最后一页的显示个数int current_page; //当前为第几页QPushButton *frist_page_button;QPushButton *previous_page_button;QPushButton *next_page_button;QPushButton *last_page_button;QList<change_skin_widget *>change_skin_list;};

#include "skin_widget.h"#include "util.h"skin_widget::skin_widget(QWidget *parent): drop_shadow_widget(parent){this->resize(620,445);skin_name = QString("");is_change = false;current_page = 1;this->initTitle();this->initCenter();this->initBotton();QVBoxLayout *main_layout = new QVBoxLayout();main_layout->addLayout(title_layout);main_layout->addLayout(center_layout);main_layout->addLayout(botton_layout);main_layout->addStretch();main_layout->setSpacing(0);main_layout->setContentsMargins(SHADOW_WIDTH, SHADOW_WIDTH, SHADOW_WIDTH, SHADOW_WIDTH);setLayout(main_layout);this->translateLanguage();//将十进制数转换为字符串类型this->showPage(QString::number(current_page, 10));}skin_widget::~skin_widget(){}void skin_widget::initTitle(){title_label = new QLabel();title_icon_label = new QLabel();close_button = new push_button();QPixmap title_pixmap(":/img/safe");title_icon_label->setPixmap(title_pixmap);title_icon_label->setFixedSize(16,16);//图片自适应窗口控件的大小title_icon_label->setScaledContents(true);close_button->setPicName(":/sysButton/close");title_label->setFixedHeight(30);title_layout = new QHBoxLayout();title_layout->addWidget(title_icon_label,0,Qt::AlignVCenter);title_layout->addWidget(title_label,0,Qt::AlignVCenter);title_layout->addStretch();title_layout->addWidget(close_button,0,Qt::AlignTop);title_layout->setSpacing(5);title_layout->setContentsMargins(10,0,5,0);//title_label->setObjectName("whiteLabel");connect(close_button,SIGNAL(clicked()),this,SLOT(hide()));}void skin_widget::initCenter(){skin_list << ":/skin/0" << ":/skin/1" << ":/skin/2" << ":/skin/3" << ":/skin/4" <<":/skin/5" << ":/skin/6" << ":/skin/7" << ":/skin/8" << ":/skin/9" <<":/skin/10" << ":/skin/11" << ":/skin/12" << ":/skin/13" << ":/skin/14" <<":/skin/15" << ":/skin/16" << ":/skin/17" << ":/skin/18" << ":/skin/19" <<":/skin/20" << ":/skin/21" << ":/skin/22" << ":/skin/23";center_layout = new QGridLayout();center_layout->setSpacing(5);center_layout->setContentsMargins(5, 35, 5, 0);for (int i = 0; i < 8;i++){change_skin_widget *change_skin_widge = new change_skin_widget();change_skin_list.append(change_skin_widge);connect(change_skin_widge,SIGNAL(changeSkin()),this,SLOT(varyfySkin()));center_layout->addWidget(change_skin_widge,i/4,i%4);}int skin_list_count = skin_list.size();page_count = skin_list_count / 8;page_count_point = skin_list_count % 8; //最后一页显示的个数//就算最后一页不满8个,也得新增一页if (page_count_point>0){page_count = page_count + 1;}}//显示页码 void skin_widget::initBotton(){QSignalMapper *signal_mapper = new QSignalMapper(this);QList<QPushButton *>*button_list = new QList<QPushButton *>();for (int i = 0; i < page_count;i++){QPushButton *page_button = new QPushButton();page_button->setFixedWidth(20);page_button->setText(QString::number(i+1,10));page_button->setObjectName("blueButton");page_button->setCursor(Qt::PointingHandCursor);connect(page_button,SIGNAL(clicked()),signal_mapper,SLOT(map()));signal_mapper->setMapping(page_button,page_button->text());//压入列表button_list->push_back(page_button);}frist_page_button = new QPushButton();previous_page_button = new QPushButton();next_page_button = new QPushButton();last_page_button = new QPushButton();frist_page_button->setFixedWidth(50);previous_page_button->setFixedWidth(50);next_page_button->setFixedWidth(50);last_page_button->setFixedWidth(50);frist_page_button->setCursor(Qt::PointingHandCursor);previous_page_button->setCursor(Qt::PointingHandCursor);next_page_button->setCursor(Qt::PointingHandCursor);last_page_button->setCursor(Qt::PointingHandCursor);frist_page_button->setObjectName("blueButton");previous_page_button->setObjectName("blueButton");next_page_button->setObjectName("blueButton");last_page_button->setObjectName("blueButton");connect(frist_page_button, SIGNAL(clicked()), signal_mapper, SLOT(map()));connect(previous_page_button, SIGNAL(clicked()), signal_mapper, SLOT(map()));connect(next_page_button, SIGNAL(clicked()), signal_mapper, SLOT(map()));connect(last_page_button, SIGNAL(clicked()), signal_mapper, SLOT(map()));signal_mapper->setMapping(frist_page_button, "first");signal_mapper->setMapping(previous_page_button, "previous");signal_mapper->setMapping(next_page_button, "next");signal_mapper->setMapping(last_page_button, "last");connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(showPage(QString)));//布局botton_layout = new QHBoxLayout();botton_layout->addStretch();botton_layout->addWidget(frist_page_button,0,Qt::AlignCenter);botton_layout->addWidget(previous_page_button, 0, Qt::AlignCenter);for (int i = 0; i < button_list->count();i++){QPushButton *page_button = button_list->at(i);botton_layout->addWidget(page_button,0,Qt::AlignCenter);}botton_layout->addWidget(next_page_button, 0, Qt::AlignCenter);botton_layout->addWidget(last_page_button, 0, Qt::AlignCenter);botton_layout->addStretch();botton_layout->setSpacing(2);botton_layout->setContentsMargins(0,10,0,0);}void skin_widget::showPage(QString current_skin){if (current_skin == "first"){current_page = 1;}else if (current_skin == "previous"){if (current_page>1){current_page = current_page - 1;}}else if (current_skin == "next"){if (current_page<page_count){current_page = current_page + 1;}}else if (current_skin == "last"){current_page = page_count;}else{bool ok;current_page = current_skin.toInt(&ok,10);}if (current_page==1){next_page_button->show();last_page_button->show();frist_page_button->hide();previous_page_button->hide();}else if (current_page==page_count){next_page_button->hide();last_page_button->hide();frist_page_button->show();previous_page_button->show();}else{next_page_button->show();last_page_button->hide();frist_page_button->hide();previous_page_button->show();}//第一页为0-7 显示至previous_total_pageint previous_total_page = (current_page - 1) % 8;int tip_index = previous_total_page;for (int i = 0; i < change_skin_list.count();i++){change_skin_list.at(i)->changeSkin(":/skin/" + QString::number(previous_total_page++, 10), tip_list.at(tip_index++), "11");}}void skin_widget::translateLanguage(){title_label->setText(tr("title"));close_button->setToolTip(tr("close"));frist_page_button->setText(tr("first"));previous_page_button->setText(tr("previous"));next_page_button->setText(tr("next"));last_page_button->setText(tr("last"));tip_list << tr("profound life") << tr("blue sea") << tr("red heart") << tr("lovely baby") << tr("transparent water") <<tr("flower") << tr("great sunshine") << tr("shadow amazement") << tr("life in blossom") << tr("360 pet") <<tr("beautiful stone") << tr("yellow energy") << tr("magic world") << tr("intense emotion") << tr("dream sky") <<tr("angry bird") << tr("graceful jazz") << tr("card") << tr("summer cool") << tr("blue world") <<tr("woodwind") << tr("pink mood") << tr("across time") << tr("six year");}void skin_widget::varyfySkin(){QObject *object = QObject::sender();change_skin_widget *change_skin_widge = qobject_cast<change_skin_widget *>(object);skin_name = change_skin_widge->getPixmapName();this->skin_name = skin_name;is_change = true;update();emit changeSkin(skin_name);}void skin_widget::painEvent(QPaintEvent *event){drop_shadow_widget::paintEvent(event);//QString skin_name = util::getSkinName();int height = 35;//换肤界面标题栏的背景设计QPainter painter(this);painter.setPen(Qt::NoPen);painter.setBrush(Qt::white);painter.drawPixmap(QRect(SHADOW_WIDTH, SHADOW_WIDTH, this->width() - 2 * SHADOW_WIDTH, this->height() - 2 * SHADOW_WIDTH), QPixmap(skin_name));painter.drawRect(QRect(SHADOW_WIDTH, height, this->width() - 2 * SHADOW_WIDTH, this->height() - height - SHADOW_WIDTH));}

注:换肤界面含有阴影边框,其实实现在drop_shadow_widget类中。

本文转自:/s/blog_a6fb6cc90101e8nd.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。