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