自定义的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版权协议,转载请附上原文出处链接和本声明。