在Qlabel中显示图片时出错

时间:2013-06-01 15:30:55

标签: qt

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <stdio.h>
#include <iostream>
#include <QDialog>
#include <opencv2\video\video.hpp>
#include <opencv2\opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/flann/miniflann.hpp"
#include <QLabel>
#include <QScrollArea>
#include <QScrollBar>
cv::Mat image1;
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
image1 = cv::imread("D:\\picture.jpg");
QImage       qimage1((uchar*)image1.data,image1.cols,image1.rows,image1.step,QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(qimage1));
}

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

我的照片尺寸为720 * 1280。我想在尺寸为600 * 600的标签上展示这张照片。但是,它只显示了部分图片。所以我的问题是如何在不改变图片大小的情况下显示整个图片。

1 个答案:

答案 0 :(得分:3)

您可以使用功能QPixmap::scaled(),查看文档here和示例here

在你的情况下,它会是这样的:

ui->label->setPixmap(QPixmap::fromImage(qimage1).scaled(QSize(600,600), Qt::KeepAspectRatio));

它不会影响图像本身,它将从图像构建QPixmap,将其缩放以适合您的600x600 Qlabel并保持纵横比。希望这会帮助你。顺便说一句,你不需要使用OpenCV来读取图像,在Qt中QImage类可以用QString path_to_image来构造QImage:QImage myImg("D:\\picture.jpg");

已编辑(对不起延迟):

要添加QScrollArea,您必须在构造函数中创建它(我们假设,在Mainwindow中只有QLabel和QScrollArea),如下所示:

// constructor, right after ui->setupUi(this);
QScrollArea *scroll=new QScrollArea(this); // creating instance of QScrollarea with mainwindow as it's parent
scroll->setWidget(ui->label); // sets widget, that you want to have scrollbars
this->setCentralWidget(scroll); // sets scrollarea as centralwidget