QLabel не показывает изображения с использованием QToolButton - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть небольшой минимальный пример пользовательского интерфейса для визуализации изображений (.tif, .tiff, .jpg и т. Д.), Состоящий из:

1) N.1 QLabel (используется для показа изображения)

2) Кнопка N.1 (используется для загрузки папки)

3) N.1 QLineEdit (используется для визуализации пути)

4) N.2 QToolbuttons(используется как слева и справа для просмотра изображений)

enter image description here

Я пытаюсь просматривать изображения, используя левую и правую кнопки QTool, но что-то не такправильно и я не могу видеть ни одного изображения.Я рассматривал этот источник в качестве примера для разработки собственной реализации и использования ее для других проектов, которые я разрабатываю.

mainwindow.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;

mainwindow.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();
    }
}

Я пытался изменить реализацию разными способами, но я всегда не могу видеть изображения.Кто-нибудь может пролить немного света на эту проблему?

1 Ответ

0 голосов
/ 04 декабря 2018

QImage ctor требует полного пути к изображению, которое читается.Вы можете сохранить результат вызова getExistingDirectory в элементе данных cdir.При вызове entryList все файлы в переданном каталоге отображаются в списке.При создании QImage вам необходимо объединить имя каталога с именем файла из этого каталога.Так что вы можете позвонить:

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