现在的位置: 首页 > 综合 > 正文

Qt之360安全卫士主界面(标题栏)

2014年02月16日 ⁄ 综合 ⁄ 共 5389字 ⁄ 字号 评论关闭

   其实网上有过360界面一些小细节的实现,基本的也都比较简单,项目完事,闲来无事,就按照自己电脑的360安全卫士9.1做了一个界面,包括托盘、最小化、最大化、界面风格样式美化等!

    效果如下:

   有人可能会好奇,界面的图片跟360的一样,开始的时候我也比较头疼,要做界面怎么可以没有图片呢!然后呢,既然安装过360,里面会有界面的一部分图片(当然,不是全部都有),把里面的图片拿出来,至于其它没有的那就只能找人做了,界面的美观度与美工有很大的关系!在这里谢过我的师傅(软件工程师兼职美工,你值得拥有)

   标题栏:

   关于标题栏的按钮样式(皮肤、最小化、最大化、关闭等)不再多说,三种状态:正常、鼠标划过、鼠标按下!可以由QPushButton、QToolButton实现均可,关于标题“360安全卫士9.1”可由QLabel实现,设置字体为白色即可!

   在这里我把“电脑体检、木马查杀等”这部分功能栏也称为标题栏,当双击其空白处也可实现窗体的最大化,通过点击不同的按钮来切换至不同的界面,按钮由QToolButton实现,设置其文本位于图标之下、,后面的“360安全卫士”是一张图片,在安装包里可以找到!

   

    代码如下:

#include "title_widget.h"
#include "tool_button.h"

TitleWidget::TitleWidget(QWidget *parent)
 :QWidget(parent)
{
   version_title = new QLabel();
    skin_button= new PushButton();
   main_menu_button = new PushButton();
    min_button =new PushButton();
    max_button =new PushButton();
    close_button= new PushButton();
 medal_button = new QPushButton();

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

 //设置图片
 skin_button->loadPixmap(":/sysButton/skin_button");
 main_menu_button->loadPixmap(":/sysButton/main_menu");
 min_button->loadPixmap(":/sysButton/min_button");
 max_button->loadPixmap(":/sysButton/max_button");
 close_button->loadPixmap(":/sysButton/close_button");

 QIconmedal_icon(":/contentWidget/medal");
 medal_button->setIcon(medal_icon);
 medal_button->setFixedSize(25, 25);
 medal_button->setIconSize(QSize(25,25));
 medal_button->setStyleSheet("background:transparent;");

 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(max_button, SIGNAL(clicked()), this,SIGNAL(showMax()));
   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(main_menu_button, 0,Qt::AlignTop);
   title_layout->addWidget(min_button, 0, Qt::AlignTop);
   title_layout->addWidget(max_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<<":/img/toolWidget/tiJian.png"<<":/img/toolWidget/muMa.png"<<":/img/toolWidget/louDong.png"<<
  ":/img/toolWidget/xiTong.png"<<":/img/toolWidget/qingLi.png"<<":/img/toolWidget/jiaSu.png"<<
  ":/img/toolWidget/menZhen.png"<<":/img/toolWidget/ruanJian.png";

 QHBoxLayout *button_layout = newQHBoxLayout();

 QSignalMapper *signal_mapper = newQSignalMapper(this);
 for(int i=0; i
 {
  ToolButton *tool_button = newToolButton(string_list.at(i));
  button_list.append(tool_button);
  connect(tool_button,SIGNAL(clicked()), signal_mapper, SLOT(map()));
  signal_mapper->setMapping(tool_button,QString::number(i, 10));

  button_layout->addWidget(tool_button,0, Qt::AlignBottom);
 }
 connect(signal_mapper, SIGNAL(mapped(QString)),this, SLOT(turnPage(QString)));
 
 QLabel *logo_label = new QLabel();
 QPixmap pixmap(":/img/logo.png");
 logo_label->setPixmap(pixmap);
 logo_label->setFixedSize(pixmap.size());
 logo_label->setCursor(Qt::PointingHandCursor);

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

 QVBoxLayout *main_layout = newQVBoxLayout();
 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(100);
    is_move =false;
}

void TitleWidget::translateLanguage()
{
 version_title->setText(tr("title"));
 skin_button->setToolTip(tr("changeskin"));
 main_menu_button->setToolTip(tr("mainmenu"));
 min_button->setToolTip(tr("minimize"));
 max_button->setToolTip(tr("maximize"));
 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("hole"));
 button_list.at(3)->setText(tr("repair"));
 button_list.at(4)->setText(tr("clear"));
 button_list.at(5)->setText(tr("optimize"));
 button_list.at(6)->setText(tr("expert"));
 button_list.at(7)->setText(tr("software"));
}

void TitleWidget::mousePressEvent(QMouseEvent *e)
{
    press_point= e->pos();
    is_move =true;
}

void TitleWidget::mouseMoveEvent(QMouseEvent *e)
{
   if((e->buttons() == Qt::LeftButton) && is_move)
    {
       static QWidget* parent_widget = this->parentWidget();
       QPoint parent_point = parent_widget->pos();
       parent_point.setX(parent_point.x() + e->x() -press_point.x());
       parent_point.setY(parent_point.y() + e->y() -press_point.y());
       parent_widget->move(parent_point);
    }
}

void TitleWidget::mouseReleaseEvent(QMouseEvent *)
{
   if(is_move)
 {
  is_move = false;
 }
}

void TitleWidget::mouseDoubleClickEvent(QMouseEvent *)
{
    emitshowMax();
}

void TitleWidget::turnPage(QString current_page)
{
 bool ok; 
 int current_index = current_page.toInt(&ok,10);

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

   这里包括重写鼠标事件mousePressEvent、mouseMoveEvent、mouseReleaseEvent来控制主窗体的移动、通过mouseDoubleClickEvent来实现双击最大化等,translateLanguage()主要是为了后面实现多语化使用!

 

注:技术在于交流、在于沟通,分享内容请勿用作商业途径,转载请说明出处,违者必究!

抱歉!评论已关闭.