Let’s check the result first
We need a slider created before this article, you can check it on : https://editor.csdn.net/md/?articleId=128429549
/*********************** head file ***************************/
#ifndef LISTWIDGETFRUIT_H
#define LISTWIDGETFRUIT_H
#include <QWidget>
#include "slider.h"
#include <QListWidget>
#include <QHBoxLayout>
class ListWidgetFruit : public QWidget
{
Q_OBJECT
public:
ListWidgetFruit(QWidget * parent = nullptr);
void addItem(QListWidgetItem * w);
void addItem(const QString & str);
void setItemWidget(QListWidgetItem* item,QWidget * w);
QListWidget * list;
private:
Slider * s;
};
#endif // LISTWIDGETFRUIT_H
/*********************** style sheet *********************/
const QString style_list = "QListWidget{border:1px solid gray; color:black;font-size:20px;\
padding:10px;padding-right:20px; outline:0px;background:transparent }\
QListWidget::Item{height:42px;padding-left:8px;}\
QListWidget::Item:hover{background:gray; border-radius:10px; }\
QListWidget::item:selected{background:darkgray; color:white;border-radius:10px; }";
/********************** cpp file ************************/
#include "listwidgetfruit.h"
#include "style.h"
#include <QScrollBar>
ListWidgetFruit::ListWidgetFruit(QWidget * parent ):QWidget(parent){
this->setContentsMargins(0,0,0,0);
QHBoxLayout * lay = new QHBoxLayout;
lay->setContentsMargins(0,4,0,4);
s = new Slider;
list= new QListWidget;
lay->addWidget(s);
setLayout(lay);
{
s->setContentsMargins(0,0,0,0);
QHBoxLayout * la = new QHBoxLayout;
la->setContentsMargins(0,0,0,0);
la->addWidget(list);
s->setLayout(la);
}
list->setStyleSheet(style_list);
list->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
list->verticalScrollBar()->setMaximum(100);
s->setMax(100);
connect(list->verticalScrollBar(),&QScrollBar::valueChanged,this,[=](){
s->setMax(list->verticalScrollBar()->maximum());
s->setValue(list->verticalScrollBar()->value());
});
connect(s,&Slider::sliderChanged,this,[=](double pos){
double max = list->verticalScrollBar()->maximum();
double cur = max * pos;
list->verticalScrollBar()->setSliderPosition(cur);
});
}
void ListWidgetFruit::addItem(QListWidgetItem * item){
list->addItem(item);
}
void ListWidgetFruit::addItem(const QString & str){
list->addItem(str);
}
void ListWidgetFruit::setItemWidget(QListWidgetItem* item,QWidget * w){
list->setItemWidget(item,w);
}