使用 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();
    }
}