QT : custom Listwidget , neat and cool

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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值