目录按钮

来源:互联网 发布:sql 2000 win7 64 编辑:程序博客网 时间:2024/06/05 08:56

唔,准备爬一个网站,顺便做个切换目录的按钮

  • 可以左右和上下滚动
  • 当前按钮禁止点击
  • 点击时发送连接消息
  • 只有水平或垂直对齐方式




#ifndef MENUDIRECTORY_H#define MENUDIRECTORY_H#include <QWidget>class QUrl;class QPushButton;class MenuDirectory : public QWidget{    Q_OBJECTpublic:    explicit MenuDirectory(QWidget *parent = nullptr);    MenuDirectory(int speed, int size, int interval, Qt::AlignmentFlag aligment=Qt::AlignHCenter,QWidget *parent = nullptr);    void initMenuDirectory(int speed, int size, int interval);    void setAlignment(Qt::AlignmentFlag aligment);    int getCurrentIndex();    void setUrl(const QStringList &url);    void addUrl(const QString &url);    QList<QPushButton*> getButtons();signals:    void clicked(const QString url);public slots:    void currentIndexChange(int index);    void DetObject();protected:    bool eventFilter(QObject *watched, QEvent *event);    void resizeEvent(QResizeEvent *event);    void closeEvent(QCloseEvent *event);private:    void CalculationX();    void CalculationY();    void scrollUp();    void scrollDown();private:    int m_Size;    int m_Index;    int m_Speed;    int m_ButtonX;    int m_ButtonY;    int m_Interval;    QWidget *m_Parent;    QStringList m_Urls;    Qt::AlignmentFlag m_Alignment;    QList<QPushButton*> m_Buttons;};#endif // MENUDIRECTORY_H


#include "menudirectory.h"#include <QWheelEvent>#include <QPushButton>MenuDirectory::MenuDirectory(QWidget *parent) : QWidget(parent){    m_Speed = 0;    m_Size = 0;    m_Index = -1;    m_Alignment = Qt::AlignHCenter;    m_Parent = parent;    m_Parent->installEventFilter(this);}MenuDirectory::MenuDirectory(int speed, int size, int interval, Qt::AlignmentFlag aligment, QWidget *parent)    : QWidget(parent){    m_Index = -1;    m_Size = size;    m_Speed = speed;    m_Interval = interval;    m_Alignment = aligment;    m_Parent = parent;    m_Parent->installEventFilter(this);}int MenuDirectory::getCurrentIndex(){    return m_Index;}void MenuDirectory::initMenuDirectory(int speed, int size, int interval){    m_Speed = speed;    m_Size = size;    m_Interval = interval;    if(m_Alignment == Qt::AlignHCenter)        CalculationY();    else        CalculationX();}void MenuDirectory::setAlignment(Qt::AlignmentFlag aligment){    m_Alignment = aligment;}void MenuDirectory::setUrl(const QStringList &url){    const int length = url.length();    for(int i=0;i<length;i++){        addUrl(url[i]);    }}void MenuDirectory::addUrl(const QString &url){    m_Urls << url;    int index = m_Urls.length()-1;    QPushButton *tmp=new QPushButton(QString::number(index),this);    m_Buttons << tmp;    tmp->resize(m_Size, m_Size);    if(m_Alignment == Qt::AlignHCenter)        tmp->move((m_Size+m_Interval)*index, m_ButtonY);    else        tmp->move(m_ButtonX, (m_Size+m_Interval)*index);    connect(tmp, &QPushButton::clicked, this, [=,index](){        currentIndexChange(index);        emit clicked(m_Urls[index]);    });    if(m_Index == -1 && m_Urls.length()){        currentIndexChange(0);    }}QList<QPushButton *> MenuDirectory::getButtons(){    return m_Buttons;}void MenuDirectory::currentIndexChange(int index){    if(getCurrentIndex() != -1)        m_Buttons[getCurrentIndex()]->setEnabled(true);    m_Index = index;    if(m_Buttons[index]->isEnabled())        m_Buttons[index]->setEnabled(false);}bool MenuDirectory::eventFilter(QObject *watched, QEvent *event){    if(m_Parent){        if(watched == m_Parent){            if(event->type() == QEvent::Wheel){                QWheelEvent *whell = static_cast<QWheelEvent*>(event);                if (whell->delta() > 0)                    scrollUp();                else                    scrollDown();                return true;            }        }    }    return false;}void MenuDirectory::resizeEvent(QResizeEvent *){    if(m_Alignment == Qt::AlignHCenter)        CalculationY();    else        CalculationX();}void MenuDirectory::closeEvent(QCloseEvent *){    DetObject();}void MenuDirectory::CalculationX(){    m_ButtonX = (width() - m_Size ) / 2;}void MenuDirectory::CalculationY(){    m_ButtonY = (height() - m_Size ) / 2;}void MenuDirectory::scrollUp(){    if(m_Alignment == Qt::AlignHCenter){        if(this->x() >= 0)            this->move(0,this->y());        else            this->move(this->x() + m_Speed,this->y());    }else{        if(this->y() >= 0)            this->move(0,this->y());        else            this->move(this->x(),this->y() + m_Speed);    }}void MenuDirectory::scrollDown(){    int pos = -(m_Urls.length()-1)*(m_Size+m_Interval);;    if(m_Alignment == Qt::AlignHCenter){        if(this->x() <= pos)            this->move(pos,this->y());        else            this->move(this->x() - m_Speed,this->y());    }else{        if(this->y() <= pos)            this->move(this->x(),pos);        else            this->move(this->x(),this->y() - m_Speed);    }}void MenuDirectory::DetObject(){    m_Index = -1;    m_Urls.clear();    int length = m_Buttons.length();    for(int i=0;i<length;i++){        m_Buttons[i]->deleteLater();    }    m_Buttons.clear();}





0 0
原创粉丝点击