qt实现不定数量的按钮向前向后移动展示

引言

此文主要记录用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_NAMESPACE

class Widget : public QWidget
{
   
    Q_OBJECT

public:
    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 3

class 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()

相关推荐

  1. 对caffe跑生成预测文件画ROC曲线

    2024-04-22 16:56:03       72 阅读
  2. caffe模型python测试

    2024-04-22 16:56:03       70 阅读
  3. 星表示2

    2024-04-22 16:56:03       53 阅读
  4. Python 机器学习 算法评估观察序列概率

    2024-04-22 16:56:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 16:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 16:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 16:56:03       82 阅读
  4. Python语言-面向对象

    2024-04-22 16:56:03       91 阅读

热门阅读

  1. npm 常用命令详解

    2024-04-22 16:56:03       175 阅读
  2. flask 请求对象

    2024-04-22 16:56:03       121 阅读
  3. 分组带给了我们哪些?

    2024-04-22 16:56:03       166 阅读
  4. Elasticsearch:(二)3.安装Elasticsearch-head插件

    2024-04-22 16:56:03       71 阅读
  5. linux 查看nginx日志

    2024-04-22 16:56:03       38 阅读
  6. 聚类与分类的区别

    2024-04-22 16:56:03       122 阅读
  7. 【运维基础一】 Linux Centos 常用命令

    2024-04-22 16:56:03       89 阅读
  8. https通信流程

    2024-04-22 16:56:03       189 阅读
  9. 「Python大数据」数据采集-某东产品数据评论获取

    2024-04-22 16:56:03       29 阅读
  10. python 绘图

    2024-04-22 16:56:03       34 阅读