Qt浅谈之三十五仿QQ设置面板功能

一、简介

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


二、详解

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

(1)代码

  • 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);
}
 
 

  • 编译运行


三、总结

(1)相应的代码已上传到csdn:http://download.csdn.net/detail/taiyang1987912/9330019
(2)未设计功能,界面还有很多不满意的地方,应用到项目中可以自行调整。
(3)若有建议,请留言,在此先感谢!

你可能感兴趣的:(linux,qt)