主要实现功能是:
自定义了 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