很多的时候我们需要制作类似手机的中的电子相框, 可以用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;
}

运行的结果就是

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

工程链接 

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

QT listwiget 控件添加图片的更多相关文章

  1. MFC基于对话框风格按钮控件添加图片的方法(大神止步)

    菜鸟还在研究这个东西,大神就不要看了.一直都在觉得用VC或VS建立的对话框总是全灰色感觉太单调了,如果可以在上面添加一些漂亮的图片就好了,今天终于实现了.其实挺简单的,下面就分几个步骤讲一下: 第一步 ...

  2. 为Kindeditor控件添加图片自动上传功能

    Kindeditor是一款功能强大的开源在线HTML编辑器,支持所见即所得的编辑效果.它使用JavaScript编写,可以无缝地与多个不同的语言环境进行集成,如.NET.PHP.ASP.Java等.官 ...

  3. [转]为Kindeditor控件添加图片自动上传功能

    原文地址:http://www.cnblogs.com/jaxu/p/3824583.html Kindeditor是一款功能强大的开源在线HTML编辑器,支持所见即所得的编辑效果.它使用JavaSc ...

  4. 代码方式给控件添加背景图片(WPF)

    wpf中常常需要给控件添加背景图片,下边以wrapPanel为例,使用代码添加背景图片 WrapPanel xwraPanel = new WrapPanel(); ImageBrush ximgBr ...

  5. Qt常用控件

    Qt常用控件 QWidget与QFrame QWidget所有图形控件的基类 QFrame与QWidget的区别 QFrame是基本控件的基类, QWidget是QFrame的基类. 因此QFrame ...

  6. Qt基本控件及三大布局

    Qt基本控件及三大布局 来源: http://blog.csdn.net/a2604539133/article/details/73920696 Qt基本模块 一.Qt的三大布局 QHBoxLayo ...

  7. MFC编程入门之二十七(常用控件:图片控件PictureControl)

    上一节讲的是滚动条控件,本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到的静态文本框都是 ...

  8. iOS开发UI篇—UIScrollView控件实现图片缩放功能

    iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...

  9. Qt报表控件NCReport教程:报表创建示例

    NCReport是 一款10多年时间的老牌报表控件,最初是在2002年时作为qt3的应用程序的一个联合项目,后来就成为了一个独立的GPL项目.现在的NCReport 是一款轻量级.快速.多平台.简单易 ...

随机推荐

  1. SQLite 的 CodeFirst 模式

    目录 问题描述 解决方案 安装依赖包 修改程序配置 App.config 创建模型对象 Person.cs 创建数据上下文 PersonDbContext.cs 主程序调用 Program.cs 注意 ...

  2. MAC MYSQ忘记密码重置方法

    网友的方法,记个笔记请勿转载. step1: 关闭mysql服务:  苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) ...

  3. react-router与react-router-dom使用时的区别

    1.React-router与React-router-dom的API对比 React-router:提供了router的核心api.如Router.Route.Switch等,但没有提供有关dom操 ...

  4. float清除浮动

    清除浮动: 在非IE浏览器下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响 ...

  5. Salesforce的站点和社区

    社区 Salesforce提供了"社区"功能.建立一个"社区"相当于建立一个前端的网站,让用户.客户.其他合作伙伴等浏览并使用其中的内容. 启用Salesfor ...

  6. 测试思想 QA的价值体现

    QA的价值体现 by:授客 QQ:1033553122 1.  缺陷挖掘价值 QA人员一个很重要的价值就是在尽可能短的时间内找出尽可能多的缺陷. 某种意义上说,缺陷直观的反应了产品的质量,QA发现的有 ...

  7. 安卓开发之Room实体定义数据

    使用Room实体定义数据 在Room库中,entities(实体)代表着相关字段集.每一个entity(实体)代表着相关联数据库中的一个表.entity 类必须通过Database 类中的entiti ...

  8. ::before和::after伪元素的妙用

    场景: 假如有一天,你的在写一个前端项目,是关于一份点餐商家电话信息表,你啪塔啪塔地写完了,突然间项目经理跑过来找你,要求你在每一个商家的电话号码前都添加一个电话符号,来使得电话号码更直观和页面更美观 ...

  9. webAPi OData的使用

    一.OData介绍 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准. 二.OData 在asp.net mvc中的用法 ...

  10. QSetting的值不能保存。

    最近在使用QSetting的时候,setting的值死活保存不下来,后来添加了如何设置后,settting的可以获取到. QCoreApplication::setOrganizationName(& ...