QT 自定义QLIstWidgetItem 点击发出信号,而且知道是哪一个item

 
 
主要实现功能是:
自定义了 QListWidget 的QListWidgetItem 添加了点击信号 还有点击后 知道点击的item是list的中的第几个 ;
QListWidgetItem 这个类自己没有信号
 
主界面

/*显示左下方list列表*/
void ImageProcessor::showLeftDown()
{
	
	clearResult(0);
	for (int i=0;i<operatorList.size();i++)
	{
		MyListWidgetItem *pItem = new MyListWidgetItem(operatorList.at(i).output_qimage, operatorList.at(i).operName);
		pItem->setIndex(i);
		QListWidgetItem *listItem1 = new QListWidgetItem();
		
		listItem1->setSizeHint(QSize(150, 215));
		
		ui.listWidgetLeftBottom->addItem(listItem1);
		ui.listWidgetLeftBottom->setItemWidget(listItem1, pItem);//放入自定义的widget
		connect(pItem, SIGNAL(listItemClicked(int)), this, SLOT(clickedLeftItem(int)));//自定义区域添加点击事件的信号槽;链接
	}
}



/*左下角list item点击事件 响应函数*/
void ImageProcessor::clickedLeftItem(int index)
{
 
   Operator selectedoper=operatorList.at(index);
   selectItem = operatorList.at(index);
   showLeftUp(selectedoper);
   showRightTop(selectedoper);


}

 

 

 

MyListWidgetItem.cpp

#include "mylistwidgetitem.hpp"

MyListWidgetItem::MyListWidgetItem(QImage image, QString string)
{
	ui.setupUi(this);
	ui.ImageLabel->setFixedHeight(200);
	ui.ImageLabel->setFixedWidth(150);
	ui.textLabel->setFixedWidth(150);
	ui.textLabel->setFixedHeight(15);
	ui.ImageLabel->setPixmap(QPixmap::fromImage(image).scaled(QSize(150, 200)));
	ui.textLabel->setText(string);
	ui.ImageLabel->setAlignment(Qt::AlignTop);
	ui.ImageLabel->setAlignment(Qt::AlignLeft);

	
	
}

void MyListWidgetItem::setIndex(int ind)
{
	this->index = ind;
}
int MyListWidgetItem::getIndex()
{
	return index; 
}


void MyListWidgetItem::mousePressEvent(QMouseEvent *event)
{

	if (event->button() == Qt::LeftButton)
	{
		emit this->listItemClicked(index);
	}

	


}


MyListWidgetItem::~MyListWidgetItem() 
{
	
}
MyListWidgetItem .hpp:
#ifndef MYLISTWIDGETITEM_H
#define MYLISTWIDGETITEM_H
#include <QWidget>
#include <QMouseEvent>
#include <QIcon>
#include <QImage>
#include <QPixmap>
#include <QLabel>
#include "ui_MyListWidgetItem.h"
class MyListWidgetItem : public QWidget
 {
Q_OBJECT
public:MyListWidgetItem(QImage image, QString string);
~MyListWidgetItem();
void setIndex(int ind);
int getIndex();
void mousePressEvent(QMouseEvent *event);
signals:void listItemClicked(int);
private:Ui::MyListWidgetItem ui;
int index;
};
#endif


 

函数