QT自定义QListWidget的Item控件

自定义的Item控件是继承于QWidget的控件类;在控件类里有一个QListWidgetItem成员变量;通过重写paintEvent()函数实现文本的显示;通过重写mouseReleaseEvent()函数实现点击事件的发送;用信号发送点击事件;代码如下所示:

#include <QWidget>
#include <QListWidgetItem>
#include <QPaintEvent>
class CustomItem:public QWidget
{
    Q_OBJECT
public:
    CustomItem(int id,QWidget *parent = nullptr);
    ~CustomItem();

    QListWidgetItem *ListWidgetItem();
    int id();

protected:
    void paintEvent(QPaintEvent *event);

    void mouseReleaseEvent(QMouseEvent *event);
private:

    QListWidgetItem *p_ListWidgetItem;
    int m_id;
signals:
    void sendItemClicked(QListWidgetItem *);
};

#include "customitem.h"
#include <QDebug>
#include <QPainter>
CustomItem::CustomItem(int id,QWidget *parent):QWidget(parent)
{
    m_id = id;
    p_ListWidgetItem = new QListWidgetItem();
    p_ListWidgetItem->setSizeHint(QSize(100,50));
    this->resize(100,50);
}

CustomItem::~CustomItem()
{

    qDebug()<<this<<p_ListWidgetItem;
    delete p_ListWidgetItem;
    p_ListWidgetItem = nullptr;
}

QListWidgetItem *CustomItem::ListWidgetItem()
{
    return p_ListWidgetItem;
}

int CustomItem::id()
{
    return m_id;
}

void CustomItem::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)
    QPainter paint(this);

    paint.drawText(QRect(10,5,50,20),"hello"+QString::number(m_id));

}

void CustomItem::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        emit sendItemClicked(ListWidgetItem());
    }
    QWidget::mouseReleaseEvent(event);

}

实现后的效果如下图所示:

完整的代码工程在https://download.csdn.net/download/liqingjielihanjie/14015869


版权声明:本文为liqingjielihanjie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。