利用Qt实现仿QQ设置面板功能

一、简介

模仿QQ系统设置的面板:上面的导航切换选项卡使用QTabWidget,左侧导航使用QListWidget,右侧的显示区域使用QScrollArea控件;主要使用垂直滚动条的valueChanged事件和QListWidget的itemClicked事件;通过调用QWidget的visibleRegion().isEmpty() 判断QScrollArea中滑动过的区域,通过垂直滚动条的setSliderPosition方法设置QScrollArea的新的区域。

二、详解

1、模仿QQ系统设置的面板

代码

settingpanel.h:

#ifndef SETTINGPANEL_H
#define SETTINGPANEL_H
 
#include <QtGui>
#include "epushbutton.h"
 
class SettingPanel : public QWidget
{
 Q_OBJECT
 
public:
 SettingPanel(QWidget *parent = 0);
 ~SettingPanel();
 
protected:
 void paintEvent(QPaintEvent *event);
 void mousePressEvent(QMouseEvent *event);
 void mouseReleaseEvent(QMouseEvent *event);
 void mouseMoveEvent(QMouseEvent *event);
 void resizeEvent(QResizeEvent *event);
 
private:
 void initTabOneWidget();
 void initTabTwoWidget();
 void initTabThreeWidget();
 
private slots:
 void slotCurrentChanged(int index);
 void slotItemClicked(QListWidgetItem *item);
 void slotValueChanged(int value);
 
private:
 QPoint movePoint;
 bool mousePress;
 EPushButton *minButton;
 EPushButton *closeButton;
 QRect rectMove;
 QTabWidget *tabWidget;
 QListWidget *contentsWidget;
 QWidget *widgetScrollArea;
 QScrollArea *scrollArea;
 QWidget *loginWidget;
 QWidget *panelWidget;
 QWidget *statusWidget;
 QWidget *sessionWidget;
 
 QWidget *passwordWidget;
 QWidget *qqlockWidget;
 
 QWidget *spaceWidget;
 bool signFlag;
};
 
#endif // SETTINGPANEL_H

settingpanel.cpp:

#include "settingpanel.h"
 
SettingPanel::SettingPanel(QWidget *parent)
 : QWidget(parent, Qt::FramelessWindowHint)
 , mousePress(false)
 , signFlag(false)
 , loginWidget(NULL)
 , panelWidget(NULL)
 , statusWidget(NULL)
 , sessionWidget(NULL)
 , passwordWidget(NULL)
 , qqlockWidget(NULL)
 , spaceWidget(NULL)
{
 resize(700, 500);
 setStyleSheet("QCheckBox{font-family:arial;font-size:13px;border-radius:2px;color:#000000;}"
 "QCheckBox::indicator:checked{color:#FF0000}"
 "QTabWidget::pane{border:none;}"
 "QTabWidget::tab-bar{alignment:left;}"
 "QTabBar::tab{background:transparent;color:#000000;min-width:100px;min-height:35px;}"
 "QTabBar::tab:hover{background:rgb(255, 255, 255, 255);}"
 "QTabBar::tab:selected{border-color: white;color:green;padding-left:5px}"
 "QListWidget{background:rgba(240,240,240,255);color:#000000;border:0px solid gray;padding:0px;}"
 "QListWidget::item{width:94px;height:38px;border:0px solid gray;padding-left:24px;}"
 "QListWidget::item:selected:active{background:#FFFFFF;color:#19649F;border-width:-1;}"
 "QListWidget::item:selected{background:#FFFFFF;color:#19649F;}"
 "QLabel,QRadioButton{background:transparent;color:#000000;font-family:arial;font-size:13px;}"
 
 "QComboBox{border:1px solid #d7d7d7; border-radius: 3px; padding: 1px 3px 1px 3px;}"
 "QComboBox:editable{background:transparent;}"
 "QComboBox:!editable{background: #fbfbfb;color:#666666}"
 "QComboBox::down-arrow:on {top: 1px;left: 1px;}"
 "QComboBox QAbstractItemView::item{max-width:30px;min-height:20px;}"
 );
 rectMove = QRect(0, 0, width(), 35);
 
 tabWidget = new QTabWidget(this);
 tabWidget->setFocusPolicy(Qt::NoFocus);
 QWidget *tab1 = new QWidget(this);
 tab1->setStyleSheet("background:#FFFFFF");
 QWidget *tab2 = new QWidget(this);
 tab2->setStyleSheet("background:#FFFFFF");
 QWidget *tab3 = new QWidget(this);
 tab3->setStyleSheet("background:#FFFFFF");
 tabWidget->addTab(tab1, QIcon(":/setting.png"),tr("base setting"));
 tabWidget->addTab(tab2, QIcon(":/home.png"), tr("secure setting"));
 tabWidget->addTab(tab3, QIcon(":/status.png"), tr("power setting"));
 tabWidget->setCurrentIndex(0);
 
 contentsWidget = new QListWidget(this);
 contentsWidget->setFocusPolicy(Qt::NoFocus);
 connect(contentsWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slotItemClicked(QListWidgetItem*)));
 
 scrollArea = new QScrollArea(this);
 scrollArea->setStyleSheet("QScrollArea{background:transparent;}"
 "QScrollBar::vertical{background:#35A739;border:-5px solid grey;margin:-2px 0px 0px 0px;width:8px;}"
 "QScrollBar::horizontal{background:#35A739;border:0px solid #126691;height:10px;}"
 "QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {background:#D3D3D3;}"
 );
 
 scrollArea->setFrameShape(QFrame::NoFrame);
 scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
 scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
 scrollArea->setFocusPolicy(Qt::NoFocus);
 connect(scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged(int)));
 
 connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentChanged(int)));
 slotCurrentChanged(0);
 
 minButton = new EPushButton(this);
 minButton->setPixName(":/min");
 minButton->setToolTip(tr("minimize"));
 connect(minButton, SIGNAL(clicked()), this, SLOT(showMinimized()));
 
 closeButton = new EPushButton(this);
 closeButton->setPixName(":/close");
 closeButton->setToolTip(tr("close"));
 connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
}
 
SettingPanel::~SettingPanel()
{
 
}
 
void SettingPanel::resizeEvent(QResizeEvent *event)
{
 tabWidget->setGeometry(0, 35, this->width(), this->height() - 35);
 contentsWidget->setGeometry(0, 71, 130, this->height() - 71);
 scrollArea->setGeometry(131, 72, this->width() - 132, this->height() - 73);
 minButton->move(width() - 27 - closeButton->width(), 6);
 closeButton->move(width() - 27, 6);
 move((QApplication::desktop()->width() - width())/2, (QApplication::desktop()->height() - height())/2);
 QWidget::resizeEvent(event);
}
 
void SettingPanel::initTabOneWidget()
{
 /************loginWidget**************/
 loginWidget = new QWidget(widgetScrollArea);
 loginWidget->show();
 QLabel *label = new QLabel(loginWidget);
 label->setText(tr("login:"));
 label->setGeometry(30, 10, 50, 30);
 label->show();
 QCheckBox *first = new QCheckBox(loginWidget);
 first->setFocusPolicy(Qt::NoFocus);
 first->setText(tr("start QQ when starting"));
 first->setGeometry(100, 10, 300, 30);
 first->show();
 QCheckBox *second = new QCheckBox(loginWidget);
 second->setFocusPolicy(Qt::NoFocus);
 second->setText(tr("login when starting QQ"));
 second->setGeometry(100, 40, 300, 30);
 second->show();
 QCheckBox *third = new QCheckBox(loginWidget);
 third->setFocusPolicy(Qt::NoFocus);
 third->setChecked(true);
 third->setText(tr("open the tips always"));
 third->setGeometry(100, 70, 300, 30);
 third->show();
 QCheckBox *forth = new QCheckBox(loginWidget);
 forth->setFocusPolicy(Qt::NoFocus);
 forth->setText(tr("open the previous session when logining"));
 forth->setGeometry(100, 100, 300, 30);
 forth->show();
 QCheckBox *five = new QCheckBox(loginWidget);
 five->setFocusPolicy(Qt::NoFocus);
 five->setText(tr("open the tips always"));
 five->setGeometry(100, 130, 300, 30);
 five->show();
 QCheckBox *sixth = new QCheckBox(loginWidget);
 sixth->setFocusPolicy(Qt::NoFocus);
 sixth->setChecked(true);
 sixth->setText(tr("start phone qq when leaving"));
 sixth->setGeometry(100, 160, 300, 30);
 sixth->show();
 QCheckBox *seventh = new QCheckBox(loginWidget);
 seventh->setFocusPolicy(Qt::NoFocus);
 seventh->setChecked(true);
 seventh->setText(tr("diskplay the waiting tips when logining"));
 seventh->setGeometry(100, 190, 300, 30);
 seventh->show();
 loginWidget->setGeometry(0, 0, 555, 220);
 /************panelWidget**************/
 panelWidget = new QWidget(widgetScrollArea);
 panelWidget->show();
 QLabel *plabel = new QLabel(panelWidget);
 plabel->setText(tr("mainpanel:"));
 plabel->setGeometry(30, 10, 50, 30);
 plabel->show();
 QCheckBox *pfirst = new QCheckBox(panelWidget);
 pfirst->setChecked(true);
 pfirst->setFocusPolicy(Qt::NoFocus);
 pfirst->setText(tr("stays on top always"));
 pfirst->setGeometry(100, 10, 300, 30);
 pfirst->show();
 QCheckBox *psecond = new QCheckBox(panelWidget);
 psecond->setChecked(true);
 psecond->setFocusPolicy(Qt::NoFocus);
 psecond->setText(tr("hide when skiming the edge of desktop"));
 psecond->setGeometry(100, 40, 300, 30);
 psecond->show();
 QCheckBox *pthird = new QCheckBox(panelWidget);
 pthird->setFocusPolicy(Qt::NoFocus);
 pthird->setChecked(true);
 pthird->setText(tr("display the icon of qq at the taskbar"));
 pthird->setGeometry(100, 70, 300, 30);
 pthird->show();
 QLabel *pforth = new QLabel(panelWidget);
 pforth->setText(tr("when closing the mainpanel:"));
 pforth->setGeometry(100, 100, 300, 30);
 pforth->show();
 QRadioButton *hideRadio = new QRadioButton(panelWidget);
 hideRadio->setFocusPolicy(Qt::NoFocus);
 hideRadio->setText(tr("hide at the taskbar and do not exit"));
 hideRadio->setGeometry(120, 130, 300, 30);
 hideRadio->show();
 QRadioButton *exitRadio = new QRadioButton(panelWidget);
 exitRadio->setFocusPolicy(Qt::NoFocus);
 exitRadio->setChecked(true);
 exitRadio->setText(tr("exit the program"));
 exitRadio->setGeometry(120, 160, 300, 30);
 exitRadio->show();
 panelWidget->setGeometry(0, 220, 555, 190);
 /************statusWidget**************/
 statusWidget = new QWidget(widgetScrollArea);
 statusWidget->show();
 QLabel *slabel = new QLabel(statusWidget);
 slabel->setText(tr("status:"));
 slabel->setGeometry(30, 10, 50, 30);
 slabel->show();
 QLabel *slabelsecond = new QLabel(statusWidget);
 slabelsecond->setText(tr("the status of logining:"));
 slabelsecond->setGeometry(100, 10, 150, 30);
 slabelsecond->show();
 QComboBox *combox = new QComboBox(statusWidget);
 combox->setFocusPolicy(Qt::NoFocus);
 combox->setStyle(new QPlastiqueStyle);
 combox->addItems(QStringList() << tr("hide") << tr("oneline") << tr("busy") << tr("leave"));
 combox->setGeometry(200, 12, 80, 24);
 combox->show();
 QCheckBox *ssecond = new QCheckBox(statusWidget);
 ssecond->setChecked(true);
 ssecond->setFocusPolicy(Qt::NoFocus);
 ssecond->setText(tr("switch to busy when running the program of fullscreen"));
 ssecond->setGeometry(100, 40, 300, 30);
 ssecond->show();
 QCheckBox *sthird = new QCheckBox(statusWidget);
 sthird->setFocusPolicy(Qt::NoFocus);
 sthird->setChecked(true);
 sthird->setText(tr("auto replay when leaving or busy"));
 sthird->setGeometry(100, 70, 300, 30);
 sthird->show();
 QCheckBox *sforth = new QCheckBox(statusWidget);
 sforth->setFocusPolicy(Qt::NoFocus);
 sforth->setText(tr("lock the qq when do not moving"));
 sforth->setGeometry(100, 100, 300, 30);
 sforth->show();
 statusWidget->setGeometry(0, 410, 555, 130);
 /************sessionWidget**************/
 sessionWidget = new QWidget(widgetScrollArea);
 sessionWidget->show();
 QLabel *elabel = new QLabel(sessionWidget);
 elabel->setText(tr("session:"));
 elabel->setGeometry(30, 10, 50, 30);
 elabel->show();
 QCheckBox *efirst = new QCheckBox(sessionWidget);
 efirst->setChecked(true);
 efirst->setFocusPolicy(Qt::NoFocus);
 efirst->setText(tr("use colourful bubble to chat"));
 efirst->setGeometry(100, 10, 300, 30);
 efirst->show();
 QCheckBox *esecond = new QCheckBox(sessionWidget);
 esecond->setChecked(true);
 esecond->setFocusPolicy(Qt::NoFocus);
 esecond->setText(tr("do not dispaly ad"));
 esecond->setGeometry(100, 40, 300, 30);
 esecond->show();
 QCheckBox *ethird = new QCheckBox(sessionWidget);
 ethird->setFocusPolicy(Qt::NoFocus);
 ethird->setText(tr("auto pop the panel when having massage"));
 ethird->setGeometry(100, 70, 300, 30);
 ethird->show();
 QCheckBox *eforth = new QCheckBox(sessionWidget);
 eforth->setChecked(true);
 eforth->setFocusPolicy(Qt::NoFocus);
 eforth->setText(tr("use autorun magic and supper expression"));
 eforth->setGeometry(100, 100, 300, 30);
 eforth->show();
 QCheckBox *efive = new QCheckBox(sessionWidget);
 efive->setChecked(true);
 efive->setFocusPolicy(Qt::NoFocus);
 efive->setText(tr("use moving feeling to char"));
 efive->setGeometry(100, 130, 300, 30);
 efive->show();
 QCheckBox *esixth = new QCheckBox(sessionWidget);
 esixth->setFocusPolicy(Qt::NoFocus);
 esixth->setChecked(true);
 esixth->setText(tr("display the window of char at the sidebar"));
 esixth->setGeometry(100, 160, 300, 30);
 esixth->show();
 QCheckBox *eseventh = new QCheckBox(sessionWidget);
 eseventh->setFocusPolicy(Qt::NoFocus);
 eseventh->setChecked(true);
 eseventh->setText(tr("allow the moving window"));
 eseventh->setGeometry(100, 190, 300, 30);
 eseventh->show();
 QCheckBox *eeighth = new QCheckBox(sessionWidget);
 eeighth->setFocusPolicy(Qt::NoFocus);
 eeighth->setChecked(true);
 eeighth->setText(tr("dispaly search tips"));
 eeighth->setGeometry(100, 210, 300, 30);
 eeighth->show();
 QCheckBox *enineth = new QCheckBox(sessionWidget);
 enineth->setFocusPolicy(Qt::NoFocus);
 enineth->setChecked(true);
 enineth->setText(tr("dispaly the history information"));
 enineth->setGeometry(100, 240, 300, 30);
 enineth->show();
 QCheckBox *etenth = new QCheckBox(sessionWidget);
 etenth->setFocusPolicy(Qt::NoFocus);
 etenth->setChecked(true);
 etenth->setText(tr("combine the session window"));
 etenth->setGeometry(100, 270, 300, 30);
 etenth->show();
 sessionWidget->setGeometry(0, 540, 555, 300 + 127);
 
 widgetScrollArea->resize(555, 840+127);
}
 
void SettingPanel::initTabTwoWidget()
{
 /************passwordWidget**************/
 passwordWidget = new QWidget(widgetScrollArea);
 passwordWidget->show();
 QLabel *label = new QLabel(passwordWidget);
 label->setText(tr("password:"));
 label->setGeometry(30, 10, 50, 30);
 label->show();
 QLabel *first = new QLabel(passwordWidget);
 first->setText(tr("do not remember the password:"));
 first->setGeometry(100, 10, 300, 30);
 first->show();
 QPushButton *second = new QPushButton(passwordWidget);
 second->setStyleSheet("QPushButton{border:1px solid lightgray;background:rgb(230,230,230);border-radius:3px;}"
 "QPushButton:hover{border-color:green;background:#bee7fd;}");
 second->setFocusPolicy(Qt::NoFocus);
 second->setText(tr("cancel to remember password"));
 second->setGeometry(100, 40, 90, 25);
 second->show();
 QLabel *third = new QLabel(passwordWidget);
 third->setText(tr("make sure safe,please alter password regularly"));
 third->setGeometry(100, 70, 300, 30);
 third->show();
 QPushButton *forth = new QPushButton(passwordWidget);
 forth->setStyleSheet("QPushButton{border:1px solid lightgray;background:rgb(230,230,230);border-radius:3px;}"
 "QPushButton:hover{border-color:green;color:#bee7fd;}");
 forth->setFocusPolicy(Qt::NoFocus);
 forth->setText(tr("alter password"));
 forth->setGeometry(100, 100, 60, 25);
 forth->show();
 QPushButton *forths = new QPushButton(passwordWidget);
 forths->setStyleSheet("QPushButton{border:1px solid lightgray;background:rgb(230,230,230);border-radius:3px;}"
 "QPushButton:hover{border-color:green;color:#bee7fd;}");
 forths->setFocusPolicy(Qt::NoFocus);
 forths->setText(tr("apply for protecting password"));
 forths->setGeometry(170, 100, 90, 25);
 forths->show();
 QLabel *five = new QLabel(passwordWidget);
 five->setText(tr("some servers will use special password"));
 five->setGeometry(100, 130, 300, 30);
 five->show();
 QPushButton *sixth = new QPushButton(passwordWidget);
 sixth->setStyleSheet("QPushButton{border:1px solid lightgray;background:rgb(240,240,240);border-radius:3px;}"
 "QPushButton:hover{border-color:green;color:#bee7fd;}");
 sixth->setFocusPolicy(Qt::NoFocus);
 sixth->setText(tr("manager special password"));
 sixth->setGeometry(100, 160, 90, 25);
 sixth->show();
 passwordWidget->setGeometry(0, 0, 555, 190);
 /************qqlockWidget**************/
 qqlockWidget = new QWidget(widgetScrollArea);
 qqlockWidget->show();
 QLabel *qlabel = new QLabel(qqlockWidget);
 qlabel->setText(tr("qqlock:"));
 qlabel->setGeometry(30, 10, 50, 30);
 qlabel->show();
 QRadioButton *firstRadio = new QRadioButton(qqlockWidget);
 firstRadio->setFocusPolicy(Qt::NoFocus);
 firstRadio->setChecked(true);
 firstRadio->setText(tr("qq password is used to unlock"));
 firstRadio->setGeometry(100, 10, 300, 30);
 firstRadio->show();
 QRadioButton *secondRadio = new QRadioButton(qqlockWidget);
 secondRadio->setFocusPolicy(Qt::NoFocus);
 secondRadio->setText(tr("special password is used to unlock"));
 secondRadio->setGeometry(100, 40, 300, 30);
 secondRadio->show();
 qqlockWidget->setGeometry(0, 190, 555, 70);
 widgetScrollArea->resize(555, 190+70+360);
}
 
void SettingPanel::initTabThreeWidget()
{
 /************loginWidget**************/
 spaceWidget = new QWidget(widgetScrollArea);
 spaceWidget->show();
 QLabel *label = new QLabel(spaceWidget);
 label->setText(tr("spacepermission:"));
 label->setGeometry(30, 10, 60, 30);
 label->show();
 QCheckBox *first = new QCheckBox(spaceWidget);
 first->setFocusPolicy(Qt::NoFocus);
 first->setChecked(true);
 first->setText(tr("newly log and photos display on qq"));
 first->setGeometry(100, 10, 300, 30);
 first->show();
 QCheckBox *second = new QCheckBox(spaceWidget);
 second->setFocusPolicy(Qt::NoFocus);
 second->setText(tr("update sign when updating chat"));
 second->setGeometry(100, 40, 300, 30);
 second->show();
 QCheckBox *third = new QCheckBox(spaceWidget);
 third->setFocusPolicy(Qt::NoFocus);
 third->setChecked(true);
 third->setText(tr("notice you when you log is republished"));
 third->setGeometry(100, 70, 300, 30);
 third->show();
 QCheckBox *forth = new QCheckBox(spaceWidget);
 forth->setFocusPolicy(Qt::NoFocus);
 forth->setChecked(true);
 forth->setText(tr("notice you when you have new tips"));
 forth->setGeometry(100, 100, 300, 30);
 forth->show();
 QCheckBox *five = new QCheckBox(spaceWidget);
 five->setFocusPolicy(Qt::NoFocus);
 five->setChecked(true);
 five->setText(tr("display your newly application"));
 five->setGeometry(100, 130, 300, 30);
 five->show();
 spaceWidget->setGeometry(0, 0, 555, 160);
 widgetScrollArea->resize(555, 160);
}
 
void SettingPanel::slotCurrentChanged(int index)
{
 contentsWidget->clear();
 scrollArea->takeWidget();
 loginWidget = NULL;
 panelWidget = NULL;
 statusWidget = NULL;
 sessionWidget = NULL;
 passwordWidget = NULL;
 qqlockWidget = NULL;
 spaceWidget = NULL;
 
 widgetScrollArea = new QWidget(this);
 widgetScrollArea->setStyleSheet("background:transparent;");
 scrollArea->setWidget(widgetScrollArea);
 if (index == 0) {
 contentsWidget->addItem(tr("login"));
 contentsWidget->addItem(tr("mainpanel"));
 contentsWidget->addItem(tr("status"));
 contentsWidget->addItem(tr("session"));
 initTabOneWidget();
 }
 else if (index == 1){
 contentsWidget->addItem(tr("password"));
 contentsWidget->addItem(tr("qqlock"));
 initTabTwoWidget();
 }
 else if (index == 2) {
 contentsWidget->addItem(tr("spacepermission"));
 initTabThreeWidget();
 }
 if (contentsWidget->count() > 0) {
 contentsWidget->setCurrentRow(0);
 }
}
 
void SettingPanel::slotItemClicked(QListWidgetItem *item)
{
 signFlag = true ;
 QString itemText = item->text();
 QPoint widgetPos;
 if (tabWidget->currentIndex() == 0) {
 if (itemText == tr("mainpanel")) {
 widgetPos = panelWidget->pos();
 scrollArea->verticalScrollBar()->setSliderPosition(widgetPos.y());
 }
 else if (itemText == tr("status")) {
 widgetPos = statusWidget->pos();
 scrollArea->verticalScrollBar()->setValue(widgetPos.y());
 }
 else if (itemText == tr("session")) {
 widgetPos = sessionWidget->pos();
 scrollArea->verticalScrollBar()->setValue(widgetPos.y());
 }
 else if (itemText == tr("login")) {
 widgetPos = loginWidget->pos();
 scrollArea->verticalScrollBar()->setValue(widgetPos.y());
 }
 }
 else if (tabWidget->currentIndex() == 1) {
 if (itemText == tr("password")) {
 widgetPos = passwordWidget->pos();
 scrollArea->verticalScrollBar()->setSliderPosition(widgetPos.y());
 }
 else if (itemText == tr("qqlock")) {
 widgetPos = qqlockWidget->pos();
 scrollArea->verticalScrollBar()->setValue(widgetPos.y());
 }
 }
}
 
void SettingPanel::slotValueChanged(int value)
{
 if (tabWidget->currentIndex() == 0) {
 QListWidgetItem *loginItem = contentsWidget->item(0);
 QListWidgetItem *panelItem = contentsWidget->item(1);
 QListWidgetItem *statusItem = contentsWidget->item(2);
 QListWidgetItem *sessionItem = contentsWidget->item(3);
 if (!signFlag) {
 if (loginWidget && panelWidget && statusWidget && sessionWidget) {
 if (!loginWidget->visibleRegion().isEmpty()) {
 loginItem->setSelected(true);
 return;
 }
 else {
 loginItem->setSelected(false);
 }
 if (!panelWidget->visibleRegion().isEmpty()) {
 panelItem->setSelected(true);
 return;
 }
 else {
 panelItem->setSelected(false);
 }
 if (!statusWidget->visibleRegion().isEmpty()) {
 statusItem->setSelected(true);
 return;
 }
 else {
 statusItem->setSelected(false);
 }
 if (!sessionWidget->visibleRegion().isEmpty()) {
 sessionItem->setSelected(true);
 return;
 }
 else {
 sessionItem->setSelected(false);
 }
 }
 }
 }
 else if (tabWidget->currentIndex() == 1) {
 QListWidgetItem *passwordItem = contentsWidget->item(0);
 QListWidgetItem *qqlockItem = contentsWidget->item(1);
 if (!signFlag) {
 if (passwordWidget && qqlockWidget) {
 if (!passwordWidget->visibleRegion().isEmpty()) {
 passwordItem->setSelected(true);
 return;
 }
 else {
 passwordItem->setSelected(false);
 }
 if (!qqlockWidget->visibleRegion().isEmpty()) {
 qqlockItem->setSelected(true);
 return;
 }
 else {
 qqlockItem->setSelected(false);
 }
 }
 }
 }
 signFlag = false;
}
 
void SettingPanel::paintEvent(QPaintEvent *event)
{
 QPainter painter(this);
 painter.setPen(Qt::NoPen);
 painter.setBrush(QColor("#F0F0F0"));
 painter.drawRect(this->rect());
 painter.setBrush(QColor("#069dd5"));
 painter.drawRect(rectMove);
 painter.setPen(QColor("#D7D7D7"));
 painter.drawLine(0, 70, this->width(), 70);
 QWidget::paintEvent(event);
}
 
void SettingPanel::mousePressEvent(QMouseEvent *event)
{
 if(event->button() == Qt::LeftButton && rectMove.contains(event->pos())) {
 mousePress = true;
 }
 movePoint = event->globalPos() - pos();
 QWidget::mousePressEvent(event);
}
 
void SettingPanel::mouseReleaseEvent(QMouseEvent *event)
{
 mousePress = false;
 QWidget::mouseReleaseEvent(event);
}
 
void SettingPanel::mouseMoveEvent(QMouseEvent *event)
{
 if(mousePress) {
 QPoint movePos = event->globalPos();
 move(movePos - movePoint);
 }
 QWidget::mouseMoveEvent(event);
}

2.编译运行

作者:乌托邦2号原文地址:https://blog.csdn.net/taiyang1987912/article/details/50187799

%s 个评论

要回复文章请先登录注册