目录按钮
来源:互联网 发布: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
- 目录按钮
- 目录按钮二
- 返回按钮和目录按钮的监听
- c#按钮打开目录或文件名
- 按钮点击跳出文件保存路径目录
- C#.Net WinForm应用程序点击按钮打开目录或文件名
- 点击按钮增加数据框(二级输入目录)
- 不同目录结构的路由配置 按钮对应action
- 按钮
- 按钮
- 按钮
- 按钮
- 按钮
- 按钮
- 按钮
- 按钮
- 按钮
- 按钮
- LeetCode (Add Two Numbers)
- android N版本 SystemUI显示问题。
- ScrollView 中 第一个CELL 异常错位
- shell脚本----[]与[[ ]]的区别与联系
- linux使用yum错误
- 目录按钮
- firefox IDE录制web自动化脚本
- java-代码块
- Linux(centos6.5)下安装jenkins
- 图像学习 -- Sobel算子检测图像边缘
- AlarmManager每2分钟执行一个任务,实际却是每2的整数倍执行
- angular框架的一些理解
- Spring MVC的文件上传下载
- 关于listview无法下拉到最后的问题