首页 > 解决方案 > QLabel 不使用 QToolButton 显示图像

问题描述

我有一个用于可视化图像(.tif、.tiff、.jpg 等)的用户界面的小示例,其中包括:

1)N.1 QLabel(用于显示图像)

2) N.1 按钮(用于上传文件夹)

3)N.1 QLineEdit(用于可视化路径)

4)N.2 QToolbuttons(用作左右浏览图像)

在此处输入图像描述

我正在尝试使用左右 QToolbuttons 浏览图像,但有些地方不正确,我看不到任何图像。为了开发自己的实现并将其用于我正在开发的其他项目,我以这个源代码为例。

主窗口.h

private slots:
    void on_imageCroppedABtn_clicked();
    void on_leftArrowCroppedA_clicked();
    void on_rightArrowCroppedA_clicked();
private:
    Ui::MainWindow *ui;
    QString camADir;
    QString fileCamA;
    int croppedIndexA;
    QStringList croppedFilenamesA;
    QDir croppedA;

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    croppedIndexA = 0;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_imageCroppedABtn_clicked()
{
    QString cdir = QFileDialog::getExistingDirectory(this, tr("Choose an image directory to load"),
                                 fileCamA, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
        if((cdir.isEmpty()) || (cdir.isNull()))
            return;
        croppedA.setPath(cdir);
        croppedFilenamesA = croppedA.entryList(QStringList() << "*.tiff" << "*.TIFF" << "*.tif" << "*.TIF", QDir::Files);
        croppedIndexA = 0;
        ui->lineEditfolderA->setText(croppedA.path());
}

void MainWindow::on_leftArrowCroppedA_clicked()
{
    croppedIndexA--;
    if(croppedIndexA < 0)
        croppedIndexA = croppedFilenamesA.size()-1;
    if(croppedFilenamesA.size() > 0)
    {
        ui->labelCroppedA->setScaledContents(true);
        ui->labelCroppedA->setPixmap(QPixmap::fromImage(QImage(croppedFilenamesA[croppedIndexA])));
        ui->labelCroppedA->show();
    }
}

void MainWindow::on_rightArrowCroppedA_clicked()
{
    croppedIndexA++;
    if(croppedIndexA >= croppedFilenamesA.size())
        croppedIndexA = 0;
    if(croppedFilenamesA.size() > 0)
    {
        ui->labelCroppedA->setScaledContents(true);
        ui->labelCroppedA->setPixmap(QPixmap::fromImage(QImage(croppedFilenamesA[croppedIndexA])));
        ui->labelCroppedA->show();
    }
}

我一直在尝试以许多不同的方式更改实现,但我总是看不到图像。任何人都可以对这个问题有所了解吗?

标签: c++qt5qt4

解决方案


QImagector 需要读取的图像的完整路径。您可以存储调用getExistingDirectory数据成员的结果cdir。当您调用entryList时,传递的目录中的所有文件都会列出。创建QImage时,您需要将目录名称与该目录中的文件名连接起来。所以你可以打电话:

ui->labelCroppedA->setPixmap(
   QPixmap::fromImage(QImage(cdir + "/" + croppedFilenamesA[croppedIndexA])));
                                    ^ add directory separator

推荐阅读