QTabBar 和 QTabWidget部件 页签

地址:http://blog.sina.com.cn/s/blog_a6fb6cc90101e8m6.html


设置界面(包括关于我们、登录界面等)其实很简单,只要运行自己安装的360,将设置界面打开,里面的一些组件很清楚的就可以知道用什么来实现!

   效果如下:

  Qt之360安全卫士(设置)

  Qt之360安全卫士(设置)
   好的,有图有真相!

   

    分析:

   标题栏由QLabel和QPushButton组成,用来显示标题、实现关闭功能!

   中央组件由QTabWidget实现,根据点击不同选项来切换不同的页面,每一个tab又包含不同的QWidget,QWidget包含基本由QGroupBox、QCheckBox、QRadioButton、QLabel、QPushButton来实现,样式均通过QSS来实现!

   底部栏由二个按钮组成,由QPushButton来实现!

 

   代码如下:
#include "setting_dialog.h"
#include "util.h"

SettingDialog::SettingDialog(QWidget *parent)
 : QDialog(parent)
{
 resize(560, 400);
 this->setWindowFlags(Qt::FramelessWindowHint |Qt::Dialog);
 this->initTitle();
 this->initCenter();
 this->initTab1();
 this->initTab2();
 this->initTab3();
 this->initTab4();
 this->initTab5();
 this->initTab6();
 this->initBottom();

 QVBoxLayout *main_layout = newQVBoxLayout();
 main_layout->addLayout(title_layout);
 main_layout->addWidget(tab_widget);
 main_layout->addLayout(bottom_layout);
 main_layout->addStretch();
 main_layout->setSpacing(0);
 main_layout->setContentsMargins(0, 0, 0,0);

 setLayout(main_layout);
 mouse_press = false;
 this->translateLanguage();
}

void SettingDialog::initTitle()
{
 title_label = new QLabel();
 title_icon_label = new QLabel();
 close_button = new PushButton();
 close_button->loadPixmap(":/sysButton/close");

 title_label->setStyleSheet("color:white;");
 QPixmap pixmap(":/img/title.ico");
 title_icon_label->setPixmap(pixmap);
 title_icon_label->setFixedSize(pixmap.size());
 
 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,10);

 connect(close_button, SIGNAL(clicked()), this,SLOT(hide()));
}

void SettingDialog::initTab1()
{
 tab1_group_box = new QGroupBox();
 auto_rise_button = new QRadioButton();
 not_auto_rise_button = new QRadioButton();
 rise_mummy_check_box = new QCheckBox();
 game_check_box = new QCheckBox();
 g3_check_box = new QCheckBox();
 p2p_check_box = new QCheckBox();
 mummy_check_box = new QCheckBox();

 tab1_group_box->setStyleSheet("QGroupBox::title{color:green;}");
 QFont group_box_font =tab1_group_box->font();
 group_box_font.setBold(true);
 tab1_group_box->setFont(group_box_font);
 tab1_group_box->setFixedSize(480, 250);
 
 QHBoxLayout *rise_mummy_layout = newQHBoxLayout();
 rise_mummy_layout->addWidget(rise_mummy_check_box);
 rise_mummy_layout->setSpacing(0);
 rise_mummy_layout->setContentsMargins(20, 0,0, 0);

 QVBoxLayout *group_layout = newQVBoxLayout();
 group_layout->addWidget(auto_rise_button);
 group_layout->addWidget(not_auto_rise_button);
 group_layout->addLayout(rise_mummy_layout);
 group_layout->addWidget(game_check_box);
 group_layout->addWidget(g3_check_box);
 group_layout->addWidget(p2p_check_box);
 group_layout->addWidget(mummy_check_box);
 group_layout->setSpacing(0);
 group_layout->setContentsMargins(30, 0, 0,0);
 tab1_group_box->setLayout(group_layout);

 QHBoxLayout *tab1_layout = newQHBoxLayout();
 tab1_layout->addWidget(tab1_group_box);
 tab1_layout->setSpacing(0);
 tab1_layout->setContentsMargins(0, 0, 0,0);
 tab1->setLayout(tab1_layout);
}

void SettingDialog::initTab2()
{
 tab2_group_box1 = new QGroupBox();
 tab2_group_box2 = new QGroupBox();
 tab2_group_box3 = new QGroupBox();
 auto_start_check_box = new QCheckBox();
 remove_own_check_box = new QCheckBox();
 strong_remove_check_box = new QCheckBox();
 mummy_kill_check_box = new QCheckBox();
 display_count_check_box = new QCheckBox();

 tab2_group_box1->setStyleSheet("QGroupBox::title{color:green;}");
 tab2_group_box2->setStyleSheet("QGroupBox::title{color:green;}");
 tab2_group_box3->setStyleSheet("QGroupBox::title{color:green;}");
 QFont group_box_font =tab2_group_box1->font();
 group_box_font.setBold(true);
 tab2_group_box1->setFont(group_box_font);
 tab2_group_box2->setFont(group_box_font);
 tab2_group_box3->setFont(group_box_font);

 QHBoxLayout *group_box1_layout = newQHBoxLayout();
 group_box1_layout->addWidget(auto_start_check_box);
 group_box1_layout->setSpacing(0);
 group_box1_layout->setContentsMargins(30, 0,0, 0);
 tab2_group_box1->setLayout(group_box1_layout);

 QVBoxLayout *group_box2_layout = newQVBoxLayout();
 group_box2_layout->addWidget(remove_own_check_box);
 group_box2_layout->addWidget(strong_remove_check_box);
 group_box2_layout->addWidget(mummy_kill_check_box);
 group_box2_layout->setSpacing(0);
 group_box2_layout->setContentsMargins(30, 0,0, 0);
 tab2_group_box2->setLayout(group_box2_layout);

 QHBoxLayout *group_box3_layout = newQHBoxLayout();
 group_box3_layout->addWidget(display_count_check_box);
 group_box3_layout->setSpacing(0);
 group_box3_layout->setContentsMargins(30, 0,0, 0);
 tab2_group_box3->setLayout(group_box3_layout);

 tab2_group_box1->setFixedSize(480,60);
 tab2_group_box2->setFixedSize(480, 110);
 tab2_group_box3->setFixedSize(480, 60);

 QVBoxLayout *group_layout = newQVBoxLayout();
 group_layout->addWidget(tab2_group_box1, 0,Qt::AlignCenter);
 group_layout->addWidget(tab2_group_box2, 0,Qt::AlignCenter);
 group_layout->addWidget(tab2_group_box3, 0,Qt::AlignCenter);
 group_layout->addStretch();
 group_layout->setSpacing(10);
 group_layout->setContentsMargins(0, 20, 0,0);
 tab2->setLayout(group_layout);
}

void SettingDialog::initTab3()
{
 tab3_group_box1 = new QGroupBox();
 tab3_group_box2 = new QGroupBox();
 auto_check_button = new QRadioButton();
 first_check_button = new QRadioButton();
 hand_check_button = new QRadioButton();
 select_quit_button = new QRadioButton();
 backstage_mode_button = new QRadioButton();
 immediacy_close_button = new QRadioButton();

 tab3_group_box1->setStyleSheet("QGroupBox::title{color:green;}");
 tab3_group_box2->setStyleSheet("QGroupBox::title{color:green;}");
 QFont group_box_font =tab3_group_box1->font();
 group_box_font.setBold(true);
 tab3_group_box1->setFont(group_box_font);
 tab3_group_box2->setFont(group_box_font);

 QVBoxLayout *group_box1_layout = newQVBoxLayout();
 group_box1_layout->addWidget(auto_check_button);
 group_box1_layout->addWidget(first_check_button);
 group_box1_layout->addWidget(hand_check_button);
 group_box1_layout->setSpacing(0);
 group_box1_layout->setContentsMargins(30, 0,0, 0);
 tab3_group_box1->setLayout(group_box1_layout);

 QVBoxLayout *group_box2_layout = newQVBoxLayout();
 group_box2_layout->addWidget(select_quit_button);
 group_box2_layout->addWidget(backstage_mode_button);
 group_box2_layout->addWidget(immediacy_close_button);
 group_box2_layout->setSpacing(0);
 group_box2_layout->setContentsMargins(30, 0,0, 0);
 tab3_group_box2->setLayout(group_box2_layout);

 tab3_group_box1->setFixedSize(480,120);
 tab3_group_box2->setFixedSize(480, 120);

 QVBoxLayout *group_layout = newQVBoxLayout();
 group_layout->addWidget(tab3_group_box1, 0,Qt::AlignCenter);
 group_layout->addWidget(tab3_group_box2, 0,Qt::AlignCenter);
 group_layout->addStretch();
 group_layout->setSpacing(10);
 group_layout->setContentsMargins(0, 20, 0,0);
 tab3->setLayout(group_layout);
}

void SettingDialog::initTab4()
{
 tab4_group_box = new QGroupBox();
 diaplay_experience_check_box = newQCheckBox();
 diaplay_login_check_box = new QCheckBox();
 tray_quit_check_box = new QCheckBox();
 new_character_check_box = new QCheckBox();
 rise_remind_check_box = new QCheckBox();

 tab4_group_box->setStyleSheet("QGroupBox::title{color:green;}");
 QFont group_box_font =tab4_group_box->font();
 group_box_font.setBold(true);
 tab4_group_box->setFont(group_box_font);
 tab4_group_box->setFixedSize(480, 180);

 QVBoxLayout *group_layout = newQVBoxLayout();
 group_layout->addWidget(diaplay_experience_check_box);
 group_layout->addWidget(diaplay_login_check_box);
 group_layout->addWidget(tray_quit_check_box);
 group_layout->addWidget(new_character_check_box);
 group_layout->addWidget(rise_remind_check_box);
 group_layout->setSpacing(0);
 group_layout->setContentsMargins(30, 0, 0,0);
 tab4_group_box->setLayout(group_layout);

 QVBoxLayout *tab4_layout = newQVBoxLayout();
 tab4_layout->addWidget(tab4_group_box, 0 ,Qt::AlignCenter);
 tab4_layout->addStretch()
tab4_layout->setSpacing(0);
 tab4_layout->setContentsMargins(0, 20, 0,0);
 tab4->setLayout(tab4_layout);
}

void SettingDialog::initTab5()
{
 tab5_group_box = new QGroupBox();
 improve_plan_check_box = new QCheckBox();
 understand_detail_button = new QPushButton();

 tab5_group_box->setStyleSheet("QGroupBox::title{color:green;}");
 QFont group_box_font =tab5_group_box->font();
 group_box_font.setBold(true);
 tab5_group_box->setFont(group_box_font);

 tab5_group_box->setFixedSize(480,60);
 understand_detail_button->setFixedSize(80,25);
 understand_detail_button->setCursor(Qt::PointingHandCursor);
 understand_detail_button->setStyleSheet("color:rgb(0,120, 230); background:transparent;");

 QHBoxLayout *group_layout = newQHBoxLayout();
 group_layout->addWidget(improve_plan_check_box);
 group_layout->addStretch();
 group_layout->addWidget(understand_detail_button);
 group_layout->setSpacing(0);
 group_layout->setContentsMargins(30, 0, 30,0);
 tab5_group_box->setLayout(group_layout);

 QVBoxLayout *tab5_layout = newQVBoxLayout();
 tab5_layout->addWidget(tab5_group_box, 0 ,Qt::AlignCenter);
 tab5_layout->addStretch();
 tab5_layout->setSpacing(0);
 tab5_layout->setContentsMargins(0, 20, 0,0);
 tab5->setLayout(tab5_layout);
}

void SettingDialog::initTab6()
{
 tab6_group_box1 = new QGroupBox();
 tab6_group_box2 = new QGroupBox();
 file_safe_label = new QLabel();
 internet_safe_label = new QLabel();
 file_safe_check_box = new QCheckBox();
 internet_safe_check_box = new QCheckBox();
 look_privacy_button = new QPushButton();

 tab6_group_box1->setStyleSheet("QGroupBox::title{color:green;}");
 tab6_group_box2->setStyleSheet("QGroupBox::title{color:green;}");
 QFont group_box_font =tab6_group_box1->font();
 group_box_font.setBold(true);
 tab6_group_box1->setFont(group_box_font);
 tab6_group_box2->setFont(group_box_font);
 look_privacy_button->setCursor(Qt::PointingHandCursor);

 look_privacy_button->setStyleSheet("color:rgb(0,120, 230); background:transparent;");
 file_safe_label->setStyleSheet("color:gray;");
 internet_safe_label->setStyleSheet("color:gray;");
 file_safe_label->setFixedWidth(420);
 file_safe_label->resize(420, 25*3);
 file_safe_label->setWordWrap(true);
 internet_safe_label->setFixedWidth(420);
 internet_safe_label->resize(420, 25*3);
 internet_safe_label->setWordWrap(true);

 QHBoxLayout *group_box1_h_layout = newQHBoxLayout();
 group_box1_h_layout->addWidget(file_safe_check_box);
 group_box1_h_layout->addStretch();
 group_box1_h_layout->addWidget(look_privacy_button);
 group_box1_h_layout->setSpacing(0);
 group_box1_h_layout->setContentsMargins(0, 0,30, 0);

 QVBoxLayout *group_box1_layout = newQVBoxLayout();
 group_box1_layout->addWidget(file_safe_label);
 group_box1_layout->addLayout(group_box1_h_layout);
 group_box1_layout->setSpacing(0);
 group_box1_layout->setContentsMargins(30, 0,0, 10);
 tab6_group_box1->setLayout(group_box1_layout);

 QVBoxLayout *group_box2_layout = newQVBoxLayout();
 group_box2_layout->addWidget(internet_safe_label);
 group_box2_layout->addWidget(internet_safe_check_box);
 group_box2_layout->setSpacing(0);
 group_box2_layout->setContentsMargins(30, 0,0, 10);
 tab6_group_box2->setLayout(group_box2_layout);

 tab6_group_box1->setFixedSize(480,120);
 tab6_group_box2->setFixedSize(480, 120);

 QVBoxLayout *group_layout = newQVBoxLayout();
 group_layout->addWidget(tab6_group_box1, 0,Qt::AlignCenter);
 group_layout->addWidget(tab6_group_box2, 0,Qt::AlignCenter);
 group_layout->addStretch();
 group_layout->setSpacing(10);
 group_layout->setContentsMargins(0, 20, 0,0);
 tab6->setLayout(group_layout);
}

void SettingDialog::initCenter()
{
 tab_widget = new QTabWidget();
 tab_widget->setFixedSize(this->width(),320);
 tab1 = new QWidget();
 tab2 = new QWidget();
 tab3 = new QWidget();
 tab4 = new QWidget();
 tab5 = new QWidget();
 tab6 = new QWidget();

 tab_widget->setStyleSheet("QTabWidget::pane{border:0px;}"
  "QTabWidget::tab-bar{alignment:center;}"
  "QTabBar::tab{background:transparent;color:white; min-width:30ex; min-height:10ex;}"
  "QTabBar::tab:hover{background:rgb(255,255, 255, 100);}"
  "QTabBar::tab:selected{border-color:white;background:white;color:green;}");
}

void SettingDialog::initBottom()
{
 ok_button = new QPushButton();
 cancel_button = new QPushButton();

 ok_button->setFixedSize(75, 25);
 cancel_button->setFixedSize(75, 25);
 ok_button->setStyleSheet("QPushButton{border:1pxsolid lightgray; background:rgb(230,230,230);}"
  "QPushButton:hover{border-color:green;background:transparent;}");
 cancel_button->setStyleSheet("QPushButton{border:1pxsolid lightgray; background:rgb(230,230,230);}"
  "QPushButton:hover{border-color:green;background:transparent;}");

 bottom_layout = new QHBoxLayout();
 bottom_layout->addStretch();
 bottom_layout->addWidget(ok_button);
 bottom_layout->addWidget(cancel_button);
 bottom_layout->setSpacing(20);
 bottom_layout->setContentsMargins(0, 10, 20,0);

 connect(cancel_button, SIGNAL(clicked()),this, SLOT(hide()));
}

SettingDialog::~SettingDialog()
{

}

void SettingDialog::translateLanguage()
{
 QString space_str =QString("   ");
 title_label->setText(tr("360 safesetting"));
 close_button->setToolTip(tr("close"));

 tab_widget->addTab(tab1, tr("risestyle"));
 tab_widget->addTab(tab2, tr("advancedsetting"));
 tab_widget->addTab(tab3, tr("physicalsetting"));
 tab_widget->addTab(tab4, tr("usersetting"));
 tab_widget->addTab(tab5, tr("improveprogram"));
 tab_widget->addTab(tab6, tr("cloud secureprogram"));

 tab1_group_box->setTitle(tr("rise styletitle"));
 auto_rise_button->setText(tr("autorise"));
 not_auto_rise_button->setText(tr("not autorise"));
 rise_mummy_check_box->setText(tr("risemummy"));
 game_check_box->setText(tr("game"));
 g3_check_box->setText(tr("3g"));
 p2p_check_box->setText(tr("p2p"));
 mummy_check_box->setText(tr("mummy"));

 tab2_group_box1->setTitle(tr("mummyfireproof"));
 tab2_group_box2->setTitle(tr("contextmenu"));
 tab2_group_box3->setTitle(tr("softwaremanager"));
 auto_start_check_box->setText(tr("autostart"));
 remove_own_check_box->setText(tr("removeown"));
 strong_remove_check_box->setText(tr("strongremove"));
 mummy_kill_check_box->setText(tr("mummykill"));
 display_count_check_box->setText(tr("displaycount"));

 tab3_group_box1->setTitle(tr("frequencysetting"));
 tab3_group_box2->setTitle(tr("quit stylesetting"));
 auto_check_button->setText(tr("autocheck"));
 first_check_button->setText(tr("firstcheck"));
 hand_check_button->setText(tr("handcheck"));
 select_quit_button->setText(tr("selectquit"));
 backstage_mode_button->setText(tr("backstagemode"));
 immediacy_close_button->setText(tr("immediacyclose"));

 tab4_group_box->setTitle(tr("rate tasksetting"));
 diaplay_experience_check_box->setText(tr("diaplayexperience"));
 diaplay_login_check_box->setText(tr("diaplaylogin"));
 tray_quit_check_box->setText(tr("trayquit"));
 new_character_check_box->setText(tr("newcharacter"));
 rise_remind_check_box->setText(tr("riseremind"));

 tab5_group_box->setTitle(tr("improveplan"));
 improve_plan_check_box->setText(tr("joinimprove plan"));
 understand_detail_button->setText(tr("understanddetail"));

 tab6_group_box1->setTitle(tr("file safeplan"));
 tab6_group_box2->setTitle(tr("internet safeplan"));
 file_safe_label->setText(space_str + tr("filesafe info"));
 internet_safe_label->setText(space_str +tr("internet safe info"));
 file_safe_check_box->setText(tr("filesafe"));
 internet_safe_check_box->setText(tr("internetsafe"));
 look_privacy_button->setText(tr("lookprivacy"));

 ok_button->setText(tr("ok"));
 cancel_button->setText(tr("cancel"));
}

void SettingDialog::paintEvent(QPaintEvent *)
{
 QString skin_name;
 bool is_read =Util::readInit(QString("./user.ini"), QString("skin"),skin_name);
 if(is_read)
 {
  if(skin_name.isEmpty())
  {
   skin_name =QString(":/skin/17_big");
  }
 }
 else
 {
  skin_name =QString(":/skin/17_big");
 }

 QPainter painter(this);
 painter.drawPixmap(rect(),QPixmap(skin_name));

 QPainter painter2(this);
 QLinearGradient linear2(rect().topLeft(),rect().bottomLeft());
 linear2.setColorAt(0, Qt::white);
 linear2.setColorAt(0.5, Qt::white);
 linear2.setColorAt(1, Qt::white);
 painter2.setPen(Qt::white);//设定画笔颜色,到时侯就是边框颜色
 painter2.setBrush(linear2);
 painter2.drawRect(QRect(0, 60, this->width(),this->height()-60));

 QPainter painter3(this);
 painter3.setPen(Qt::gray);
 static const QPointF points[4] = {QPointF(0, 60),QPointF(0, this->height()-1), QPointF(this->width()-1,this->height()-1), QPointF(this->width()-1, 60)};
 painter3.drawPolyline(points, 4);
}

void SettingDialog::mousePressEvent( QMouseEvent * event )
{
 //只能是鼠标左键移动和改变大小
 if(event->button() == Qt::LeftButton)
 {
  mouse_press = true;
 }

 //窗口移动距离
 move_point = event->globalPos() - pos();
}

void SettingDialog::mouseReleaseEvent(QMouseEvent *)
{
 mouse_press = false;
}

void SettingDialog::mouseMoveEvent(QMouseEvent *event)
{
 //移动窗口
 if(mouse_press)  
 {
  QPoint move_pos =event->globalPos();
  move(move_pos -move_point);
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值