按钮模拟移动
- 引言
- 示例代码
- 第一种
- 思路
- 开发环境
- 代码结构
- 实现代码
- 第二种
- 思路
- 开发环境
- 实现代码
- 第三种
- 思路
- 开发环境
- 实现代码
- 总结
引言
此文主要记录用qt实现按钮的移动,具体效果如下:
模拟按钮移动效果
示例代码
本文记录了三种实现方式。
第一种
思路
用动态数组vector存放创建的按钮QPushButton的指针,使用两个同类型的二级指针QPushButton来指向数组中的元素,初始状态下,首尾指针都指向数组中第一个元素,随着界面初始化时需要显示的按钮的个数的增加,尾指针不断地移动,确保首指针永远指向窗中显示的按钮的第一个,尾指针指向窗口显示的按钮的最后一个按钮,同时在首尾指针处对应的各自有首计数,和尾计数,来记录当前首尾指针所在处分别是第几个元素,以一开始计数,向前移动时,当首计数为1时,不可向前,尾计数为最后一个元素时,不可向后。
开发环境
Qt5.15.2MinGW 64bit编译器。
代码结构
实现代码
下面是具体的实现代码。
mian.cpp
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "scrollbuttonwidget.h"QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ScrollButtonWidget *p = new ScrollButtonWidget(this);}Widget::~Widget()
{delete ui;
}
scrollbuttonwidget.h
#ifndef SCROLLBUTTONWIDGET_H
#define SCROLLBUTTONWIDGET_H#include <QWidget>
#include <vector>
#include <QPushButton>
#include <QString>#define TOTAL_NUM 5
#define VISUAL_NUM 3class ScrollButtonWidget : public QWidget
{Q_OBJECT
public:explicit ScrollButtonWidget(QWidget *parent = nullptr);
protected:void createButtons();void setLayout();void initInterface();void goBack();void toFront();
signals:public slots:private:std::vector<QPushButton*> m_pBtnVector;int m_nCurNum;int m_nTailNum;int m_nFrontNum;QPushButton **m_pFront;QPushButton **m_pTail;
};#endif // SCROLLBUTTONWIDGET_H
scrollbuttonwidget.cpp
#include "scrollbuttonwidget.h"
#include <QHBoxLayout>
#include <QDebug>ScrollButtonWidget::ScrollButtonWidget(QWidget *parent) : QWidget(parent)
{m_nCurNum = 0;m_nTailNum = 0;m_nFrontNum = 0;m_pTail = nullptr;m_pFront = nullptr;createButtons()