C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > Qt仿QQ设置面板

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

作者:乌托邦2号

这篇文章主要为大家详细介绍了如何利用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.编译运行

到此这篇关于利用Qt实现仿QQ设置面板功能的文章就介绍到这了,更多相关Qt仿QQ设置面板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文