网站结构图/如何做好线上营销
前言
我们平时玩微信时都看到一个小功能:上翻消息时,有个“查看更多消息”的按钮(如下图),点击或者往上滚动滚轮,就可加载一定条的消息。然后,我也想在我界面中添加这种类型功能,滚轮滚动就可控制数据的加载。
代码和说明
写的例子是用滚轮来控制列表(QListWidget),界面滑动和加载数据。
加载数据的逻辑是:当滚动到滚动条的最大值,在下一次滚动时,将会发出请求数据的信号,若有数据,则加载一定量的。
因为我用的是列表(QListWidget),他的滚动条(QScrollBar)其实与滚轮没啥关系,所以根据滚轮的相对位置来调整滚动条的值(即控制列表的滑动)。
#include<QListWidget>
#include<QWheelEvent>class MyScrollListWidget : public QListWidget
{Q_OBJECT
public:explicit MyScrollListWidget(QWidget *parent = nullptr);protected:void wheelEvent(QWheelEvent* event) override;signals:void requstDataSignal();private slots:void scrollValueChange(int value);private:bool m_isFullValue;};
#include "MyScrollListWidget.h"
#include<QScrollBar>
#include<QDebug>
MyScrollListWidget::MyScrollListWidget(QWidget *parent):QListWidget(parent),m_isFullValue(false)
{QScrollBar* pScrollBar=this->verticalScrollBar();connect(pScrollBar,SIGNAL(valueChanged(int)),this,SLOT(scrollValueChange(int)));}void MyScrollListWidget::wheelEvent(QWheelEvent *event)
{Q_UNUSED(event);int degress = event->angleDelta().ry() * 0.01;if(event->orientation() == Qt::Vertical)verticalScrollBar()->setValue(verticalScrollBar()->value() - degress);event->accept();if(m_isFullValue){emit requstDataSignal();m_isFullValue=false;}
}void MyScrollListWidget::scrollValueChange(int value)
{if(value==verticalScrollBar()->maximum())m_isFullValue=true;
}
我在总界面中添加接收请求数据的槽,今天加载数据。加载的数据,我是进行模拟的,只能加载三次,加载结束,则显示加载全部数据。
void MainWindow::requstData()
{if(m_iNum==0)return;disconnect(ui->listWidget,SIGNAL(requstDataSignal()),this,SLOT(requstData()));for(int i=0;i<5;i++){QListWidgetItem* pItem=new QListWidgetItem;pItem->setText(QString("请求,获取的数据%1~~~").arg(m_iNum));pItem->setSizeHint(QSize(70,70));int row=ui->listWidget->count();ui->listWidget->insertItem(row,pItem);}m_iNum--;if(m_iNum==0){QListWidgetItem* pItem=new QListWidgetItem;pItem->setText("已加载全部~~~~~~");pItem->setSizeHint(QSize(70,70));int row=ui->listWidget->count();ui->listWidget->insertItem(row,pItem);}connect(ui->listWidget,SIGNAL(requstDataSignal()),this,SLOT(requstData()));}
效果图
结束语
感觉有些地方还不完美,后续想到改进的方法,再改。