QT listwiget 控件添加图片

时间:2023-03-09 01:35:54
QT listwiget  控件添加图片

很多的时候我们需要制作类似手机的中的电子相框, 可以用listwidget 控件实现  直接上代码 

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->move(,); // ui->listWidget->resize(365,400);
//设置QListWidget的显示模式
ui->listWidget->setViewMode(QListView::IconMode);
//设置QListWidget中单元项的图片大小
ui->listWidget->setIconSize(QSize(,));
//设置QListWidget中单元项的间距
ui->listWidget->setSpacing();
//设置自动适应布局调整(Adjust适应,Fixed不适应),默认不适应
ui->listWidget->setResizeMode(QListWidget::Adjust);
//设置不能移动
ui->listWidget->setMovement(QListWidget::Static); connect(ui->listWidget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(listWidgetClicked(QListWidgetItem*))); //显示图像空间的照片数量
// QString imageWorkPath=imagePATH; // /home/wanghuixi/keysiQt/workspace
QDir * imagePath=new QDir("./123/");
QStringList filter;
filter << "*.jpg"<< "*.png" ;
QList<QFileInfo> *fileInfo=new QList<QFileInfo>(imagePath->entryInfoList(filter));
int imageSum = fileInfo->count();//the file have "."and ".." file
QList<QString> fileNames;
fileNames.clear();
if(imageSum == )
{
return;
}
for(int i=;i<imageSum;i++)
{
fileNames.append(fileInfo->at(i).filePath());
}
for(auto tmp : fileNames)
{
qDebug()<<tmp<<endl;
ui->listWidget->addItem(new QListWidgetItem(QIcon(tmp),"Tornado"));
} } MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::listWidgetClicked(QListWidgetItem *item)
{
qDebug() << "ddsfsdf" << " "<<item->text() << " " << ui->listWidget->currentIndex().row() << " "<< ui->listWidget->count()<< endl;
ui->listWidget->removeItemWidget(item);
delete item;
}

运行的结果就是

QT listwiget  控件添加图片

可以点击指定的照片会返回照片的编号 我们可以根据照片的编号 可以干很多事情 。

工程链接 

https://pan.baidu.com/s/1kYtFou2q-xu6SapUzA6TTw

还有一种可以限制 图片为指定大小的 添加到listwidget中  思路就是把 QLabel 控件添加到listwidget 里面

        QLabel * labelP = new QLabel;
labelP->setFixedSize(,); //:/123/3.jpg
labelP->setStyleSheet(tr("border-image: url(:/123/3.jpg);color: transparent;")); //background-color: rgb(102, 194, 255);
QListWidgetItem *aItemHome = new QListWidgetItem(ui->listWidget);
aItemHome->setSizeHint(QSize(,));
ui->listWidget->addItem(aItemHome);
ui->listWidget->setItemWidget(aItemHome,labelP);

有的时候listwidget 有很多用处接下来我介绍一下 动态布局并且能滑动显示按钮

主要代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QListWidgetItem>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QDebug>
#include <QLabel>
#include <QMoveEvent>
#include <QDir>
#include <QStandardItem>
#include <QStringList>
#include <QListWidgetItem>
#include <QPushButton>
#include <QMouseEvent> #include "pushbutton.h" namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); QPoint pointStart;//大按钮的滑动的开始坐标
int currentPosX;// 当前位置的 x值
QPoint pointEnd; //
int posX ; //大图标的 X坐标
bool eventFilter(QObject *,QEvent *);
private slots:
void listWidgetClicked(QListWidgetItem*); //listWidgetDoubleClicked
void listWidgetDoubleClicked(QListWidgetItem*); private:
Ui::MainWindow *ui;
}; #endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->move(,);
this->setFixedSize(,); //设置窗体固定大小 // ui->listWidget->resize(365,400);
//设置QListWidget的显示模式
ui->listWidget->setViewMode(QListView::IconMode);
//设置QListWidget中单元项的图片大小
ui->listWidget->setIconSize(QSize(,));
//设置QListWidget中单元项的间距
ui->listWidget->setSpacing();
//设置自动适应布局调整(Adjust适应,Fixed不适应),默认不适应
ui->listWidget->setResizeMode(QListWidget::Adjust);
//设置不能移动
ui->listWidget->setMovement(QListWidget::Static); connect(ui->listWidget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(listWidgetClicked(QListWidgetItem*)));
connect(ui->listWidget, SIGNAL( itemDoubleClicked ( QListWidgetItem * ) ), this, SLOT(listWidgetDoubleClicked( QListWidgetItem * ))); //显示图像空间的照片数量
// QString imageWorkPath=imagePATH; // /home/wanghuixi/keysiQt/workspace
QDir * imagePath=new QDir("./123/");
QStringList filter;
filter << "*.jpg"<< "*.png" ;
QList<QFileInfo> *fileInfo=new QList<QFileInfo>(imagePath->entryInfoList(filter));
int imageSum = fileInfo->count();//the file have "."and ".." file
QList<QString> fileNames;
fileNames.clear();
if(imageSum == )
{
return;
}
for(int i=;i<imageSum;i++)
{
fileNames.append(fileInfo->at(i).filePath());
}
for(auto tmp : fileNames)
{
qDebug()<<tmp<<endl;
ui->listWidget->addItem(new QListWidgetItem(QIcon(tmp),"Tornado")); QLabel * labelP = new QLabel; labelP->setFixedSize(,); //:/123/3.jpg
labelP->setStyleSheet(tr("border-image: url(:/123/3.jpg);border-radius:10px;color: transparent;")); //background-color: rgb(102, 194, 255);
QListWidgetItem *aItemHome = new QListWidgetItem(ui->listWidget);
aItemHome->setSizeHint(QSize(,));
ui->listWidget->addItem(aItemHome);
ui->listWidget->setItemWidget(aItemHome,labelP);
} ui->listWidget->installEventFilter(this);
ui->listWidget->setMouseTracking(true);
ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel); // QListWidgetItem *item=new QListWidgetItem(ui->listWidget2,0); // item->setSizeHint(QSize(10,10)); // QPushButton *pushButton=new QPushButton(); // ui->listWidget2->setItemWidget(item,pushButton);
// ui->listWidget2->show();
for(int i=; i<;i++)
{
QPushButton *pushButton=new QPushButton();
QListWidgetItem *aItemHome = new QListWidgetItem(ui->listWidget2,i);
aItemHome->setSizeHint(QSize(,));
pushButton->setFixedSize(,);
ui->listWidget2->addItem(aItemHome);
ui->listWidget2->setSpacing();
ui->listWidget2->setItemWidget(aItemHome,pushButton);
} // QListWidget *list=new QListWidget;
// QListWidgetItem *item=new QListWidgetItem(list,0); // item->setSizeHint(QSize(100,100));
// QWidget *w = new QWidget(list);
// QHBoxLayout *layout=new QHBoxLayout(w);
// QPushButton *pushButton=new QPushButton(w);
// QCheckBox *checkBox=new QCheckBox(w);
// layout->addWidget(checkBox);
// layout->addWidget(pushButton);
// w->setLayout(layout);
// w->show();
// list->setItemWidget(item,w);
// list->show(); QGridLayout *layout=new QGridLayout(ui->widget);
layout->setContentsMargins(,,,);
layout->setSpacing(); int sum = ;
int row = ;//hang
int Column = ;//lie
int num =;//jishu
int ColumnNum[]= {,,,};
if(sum%Column)
{
row = sum /Column +;
}
else
{
row = sum /Column;
}
// item->setSizeHint(QSize(1705,sum*30));
ui->widget->setFixedSize(,sum*);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,);
layout->setColumnStretch(,); for(int i = ;i<=row; i++)
{
layout->setRowStretch(i*-,); for(int j=; j<Column;j++)
{
if(num >= sum)
{break;} PushButton *pushButton=new PushButton(QString::number(num, ) );
pushButton->installEventFilter(this);
pushButton->setMouseTracking(true);
pushButton->setFixedSize(,);
layout->addWidget(pushButton,i*-,ColumnNum[j]);
num++;
}
layout->setRowStretch(i*-,);
}
ui->widget->installEventFilter(this);
ui->widget->setMouseTracking(true);
ui->widgetWai->installEventFilter(this);
ui->widgetWai->setMouseTracking(true);
ui->widget->setLayout(layout);
ui->widget->show();
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::listWidgetClicked(QListWidgetItem *item)
{
qDebug() << "单击相应" << " "<<item->text() << " " << ui->listWidget->currentIndex().row() << " "<< ui->listWidget->count()<< endl;
// ui->listWidget->removeItemWidget(item);
// delete item;
} void MainWindow::listWidgetDoubleClicked(QListWidgetItem *item)
{
qDebug() << "双击的" << " "<<item->text() << " " << ui->listWidget->currentIndex().row() << " "<< ui->listWidget->count()<< endl;
ui->listWidget->removeItemWidget(item);
delete item;
} bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
bool statues = false;
QMouseEvent *mouseEvent = (QMouseEvent *)event;
static int i= ;
i++;
// qDebug() << "对象:" <<watched->objectName()<< i <<"事件:"<<event->type()<< endl;
// if (watched==ui->informationPB ||watched==ui->knowledgePB||watched==ui->messagePB ||watched==ui->reservationPB )
// {
if(event->type() == QEvent::MouseButtonPress)//:Paint
{
statues = true;
pointStart = mouseEvent->pos();
currentPosX = ui->widget->y();
qDebug() << "****************按下" << endl;
}
if(event->type() == QEvent::MouseMove)//MouseMove
{
// if(statues == false)
// {}
// else
// {
pointEnd = mouseEvent->pos();
posX = currentPosX + (pointEnd.y() - pointStart.y());
ui->widget->move(,posX);
if(posX <ui->widgetWai->height() - ui->widget->height() )
{
ui->widget->move(,ui->widgetWai->height() - ui->widget->height());
}
if(posX >ui->widget->height() - ui->widgetWai->height())
{ ui->widget->move(,);
} qDebug() << "/////////////////移动" << posX <<endl;
// } }
if(event->type() == QEvent::Leave)
{
qDebug() << "--------------------------离开" << endl;
}
if(event->type() == QEvent::Paint)
{ qDebug() << "-------------------------Paint" << endl;
}
if(event->type() == QEvent::MouseButtonRelease)
{
statues = false;
qDebug() << "--------------------------抬起" << ui->widgetWai->height() - ui->widget->height() << endl;
// if(posX < ui->widgetWai->height() - ui->widget->height())
// {
// ui->widget->move(0,ui->widgetWai->height() - ui->widget->height());
// }
// if(posX >0 )
// {
// ui->widget->move(0,0);
// } } // }
return QWidget::eventFilter(watched,event); // 最后将事件交给上层对话框
}
#ifndef PUSHBUTTON_H
#define PUSHBUTTON_H #include <QObject>
#include <QWidget>
#include <QDebug>
#include <QPushButton> class PushButton : public QPushButton
{
Q_OBJECT
public:
explicit PushButton(QString name); signals:
private slots:
void PushButtonClickedSlots();
public slots:
}; #endif // PUSHBUTTON_H
#include "pushbutton.h"

PushButton::PushButton(QString name)
{
this->setText(name);
connect(this,SIGNAL(clicked(bool)),this,SLOT(PushButtonClickedSlots()));
}
void PushButton::PushButtonClickedSlots()
{
qDebug() << this->text() << endl;
}

工程见此链接

链接:https://pan.baidu.com/s/10pb59Ii-b_yjMuDx-Okrdw 密码:gtte