从 QTableWidget 中的目录插入图像
Inserting Images from directory in QTableWidget
大家好。我有一个问题。我有一个QTableWidget
,我需要从目录中放置图像并检索所选单元格中图像的名称。它如何根据目录中的文件数量自动生成行数和列数?我可以手动将图像添加到表格中,但这不是我想做的。我想这一定是
QDir dir("images/");
QFileInfoList dirContent = dir.entryInfoList(QStringList()<< "*.png", QDir::Files |
QDir::NoDotAndDotDot);
但仍然想不通我该怎么做。
有两种方法。
非递归
主.cpp
#include <QDir>
#include <QFileInfo>
#include <QTableWidget>
#include <QPixmap>
#include <QApplication>
int main(int argc, char **argv)
{
QApplication application(argc, argv);
QTableWidget tableWidget(100, 5);
QDir dir("images/");
for (const auto& fileInfo : dir.entryInfoList(QStringList{"*.png"}, QDir::Files | QDir::NoDotAndDotDot))
{
static int row = 0, column = 0;
QTableWidgetItem *newItem = new QTableWidgetItem(QObject::tr("%1").arg((row+1)*(column+1)));
newItem->setData(Qt::DecorationRole, QPixmap(fileInfo.absoluteFilePath()));
tableWidget.setItem(row, column, newItem);
if (column == tableWidget.columnCount()) {
column = 0;
row++;
}
}
tableWidget.show();
return application.exec();
}
main.pro
TEMPLATE = app
TARGET = main
QT += widgets
CONFIG += c++11
SOURCES += main.cpp
构建和运行
qmake && make && ./main
递归的
主.cpp
#include <QDir>
#include <QDirIterator>
#include <QFileInfo>
#include <QTableWidget>
#include <QPixmap>
#include <QApplication>
int main(int argc, char **argv)
{
QApplication application(argc, argv);
QTableWidget tableWidget(100, 5);
QDir dir("images/");
dir.setFilter(QDir::NoDotAndDotDot| QDir::Files);
QDirIterator it(dir, QDirIterator::Subdirectories);
while (it.hasNext()) {
static int row = 0, column = 0;
it.next();
QFileInfo Info = it.fileInfo();
QString path = Info.absolutePath();
if(Info.isFile() && path.endsWith(".png")) {
QTableWidgetItem *newItem = new QTableWidgetItem(QObject::tr("%1").arg((row+1)*(column+1)));
newItem->setData(Qt::DecorationRole, QPixmap(path));
tableWidget.setItem(row, column, newItem);
if (column == tableWidget.columnCount()) {
column = 0;
row++;
}
}
}
tableWidget.show();
return application.exec();
}
main.pro
TEMPLATE = app
TARGET = main
QT += widgets
CONFIG += c++11
SOURCES += main.cpp
构建和运行
qmake && make && ./main
QFileInfoList
只是一个QList<QFileInfo>
,所以你可以很容易地得到这个列表的大小。使用类似这样的东西:
QDir dir("G:/2");
QFileInfoList dirContent = dir.entryInfoList(QStringList()<< "*.png", QDir::Files |
QDir::NoDotAndDotDot);
ui->tableWidget->setColumnCount(1);
ui->tableWidget->setRowCount(dirContent.size());
for(int i=0; i < dirContent.size(); i++)
{
qDebug() << dirContent.at(i).absoluteFilePath();
ui->tableWidget->item(i,0)->setData(Qt::DecorationRole, QPixmap(dirContent.at(i).absoluteFilePath()));
}
您还可以使用scale()
方法缩放图像并使用:
ui->tableWidget->resizeRowsToContents();
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 如何在使用 c++/COM 发送时在电子邮件中插入/嵌入图像文件(.png)
- Mongodb C++ API 插入二进制文件(图像)
- 使用 Qt - C++将文本插入标签/图像
- 如何在 c++ 中的 HTML 文件中插入图像
- 如何在屏幕的一部分中插入图像
- 如何在框架/图像中插入多行文本
- 在 2D 图像阵列中裁剪/插入 - 内存分配问题
- CRichEditCtrl 和插入图像 (JPG)
- 从 QTableWidget 中的目录插入图像
- 将图像作为blob类型插入QT C++中的数据库
- 关于图像插入的回调
- 在多帧图像中插入修改过的像素数据
- 如何保持原始图像格式时插入到一个CRichEditCtrl
- 向文档插入图像
- 在富编辑控件中插入位图图像
- 使用opencv将旋转和倾斜的图像插入到另一个图像的检测矩形中