c++ - 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();
}
}
我一直在尝试以许多不同的方式更改实现,但我总是看不到图像。任何人都可以对这个问题有所了解吗?
解决方案
QImage
ctor 需要读取的图像的完整路径。您可以存储调用getExistingDirectory
数据成员的结果cdir
。当您调用entryList
时,传递的目录中的所有文件都会列出。创建QImage
时,您需要将目录名称与该目录中的文件名连接起来。所以你可以打电话:
ui->labelCroppedA->setPixmap(
QPixmap::fromImage(QImage(cdir + "/" + croppedFilenamesA[croppedIndexA])));
^ add directory separator
推荐阅读
- git - java.io.IOException:使用 GIT docker 映像时容器未运行
- django - 我的表单没有将数据添加到数据库 - Django
- html - Jumpseller 类别下拉菜单在导航菜单中不起作用
- android - 无法为 RecyclerView 的 DividerItemDecoration 设置自定义 Drawable
- kubernetes - 查找有问题的 pod
- c - 如何从外部函数文件调用main
- python - 在循环结束时向熊猫数据框添加行
- f# - F# TcpListener/Client 类不写?
- visual-studio-code - 我可以将 Visual Studio Code 配置为自动输入 ssh 密码吗?
- javascript - 谷歌响应表单创建谷歌文档和文件夹