使用 QpushButton 切换显示在 QLabel 中的图像
Using QpushButton to switch the images displaying in a QLabel
我是初学者。我的项目的一部分是使用 QpushButton 切换显示在 QLabel 中的图像,第一步我将打开一个文件夹并为 .jpg 设置过滤器,然后将它们的路径保存在 QString 列表中。这是我的代码:
void data_labeling::on_next_clicked()
{
int i = 0;
QString filename1 = "/home/jin/test/test.jpg";
QFileInfo fileinfo1(filename1);
QString foldername1 = fileinfo1.path();
QDir dir(foldername1);
dir.setNameFilters(QStringList()<< "*.jpeg" << "*.jpg");
QStringList images = dir.entryList();
QImage image(images[i]);
QPixmap::fromImage(image);
int w = ui->face_pic->width();
int h = ui->face_pic->height();
ui->face_pic->setPixmap(QPixmap::fromImage(image).scaled(h,w,Qt::KeepAspectRatio));
}
这个文件夹里有这么多图片,我知道为什么我失败了,因为每次我按下使用该功能的按钮时,我的整数总是等于0。所以有人可以给我建议吗?
为了select文件夹我推荐使用QFileDialog
class through the getExistingDirectory()
的方法。另一个改进是生成一个只负责放置新图像的函数。
需要注意的是 entryList()
returns 过滤器文件的名称,但这不是完整路径,要获取它,我们使用 filePath()
函数。
*.h
private:
QDir dir;
QStringList images;
int index;
void updatePixmap();
*.cpp
{//constructor
ui->setupUi(this);
index = 0;
QString dirname = QFileDialog::getExistingDirectory(this, "Select directory", "/home/jin/test/");
if(!dirname.isEmpty()){
dir = QDir(dirname);
dir.setNameFilters(QStringList()<< "*.jpeg" << "*.jpg");
images = dir.entryList();
}
updatePixmap();
}
void data_labeling::on_next_clicked()
{
updatePixmap();
}
void data_labeling::updatePixmap()
{
if(images.count() > 0){
int w = ui->face_pic->width();
int h = ui->face_pic->height();
QImage image(dir.filePath(images[index]));
ui->face_pic->setPixmap(QPixmap::fromImage(image).scaled(h,w,Qt::KeepAspectRatio));
index = (index +1) % images.count();
}
}
我是初学者。我的项目的一部分是使用 QpushButton 切换显示在 QLabel 中的图像,第一步我将打开一个文件夹并为 .jpg 设置过滤器,然后将它们的路径保存在 QString 列表中。这是我的代码:
void data_labeling::on_next_clicked()
{
int i = 0;
QString filename1 = "/home/jin/test/test.jpg";
QFileInfo fileinfo1(filename1);
QString foldername1 = fileinfo1.path();
QDir dir(foldername1);
dir.setNameFilters(QStringList()<< "*.jpeg" << "*.jpg");
QStringList images = dir.entryList();
QImage image(images[i]);
QPixmap::fromImage(image);
int w = ui->face_pic->width();
int h = ui->face_pic->height();
ui->face_pic->setPixmap(QPixmap::fromImage(image).scaled(h,w,Qt::KeepAspectRatio));
}
这个文件夹里有这么多图片,我知道为什么我失败了,因为每次我按下使用该功能的按钮时,我的整数总是等于0。所以有人可以给我建议吗?
为了select文件夹我推荐使用QFileDialog
class through the getExistingDirectory()
的方法。另一个改进是生成一个只负责放置新图像的函数。
需要注意的是 entryList()
returns 过滤器文件的名称,但这不是完整路径,要获取它,我们使用 filePath()
函数。
*.h
private:
QDir dir;
QStringList images;
int index;
void updatePixmap();
*.cpp
{//constructor
ui->setupUi(this);
index = 0;
QString dirname = QFileDialog::getExistingDirectory(this, "Select directory", "/home/jin/test/");
if(!dirname.isEmpty()){
dir = QDir(dirname);
dir.setNameFilters(QStringList()<< "*.jpeg" << "*.jpg");
images = dir.entryList();
}
updatePixmap();
}
void data_labeling::on_next_clicked()
{
updatePixmap();
}
void data_labeling::updatePixmap()
{
if(images.count() > 0){
int w = ui->face_pic->width();
int h = ui->face_pic->height();
QImage image(dir.filePath(images[index]));
ui->face_pic->setPixmap(QPixmap::fromImage(image).scaled(h,w,Qt::KeepAspectRatio));
index = (index +1) % images.count();
}
}