Qt学习笔记——打开并显示图片

使用控件QLabel

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    cv::Mat image;

private slots:

    void DisplayMat(cv::Mat image);
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

}

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

void MainWindow::DisplayMat(cv::Mat image)
{
    cv::Mat rgb;
    QImage img;
    if(image.channels() == 3)
    {
        cvtColor(image,rgb,CV_BGR2RGB);
        img = QImage((const unsigned char*)(rgb.data),
                     rgb.cols,rgb.rows,rgb.cols*rgb.channels(),//rgb.cols*rgb.channels()可以替换为image.step
                     QImage::Format_RGB888);
    }
    else
    {
        img = QImage((const unsigned char*)(image.data),
                     image.cols,image.rows,rgb.cols*image.channels(),
                     QImage::Format_RGB888);
    }
    ui->labelimage->setPixmap(QPixmap::fromImage(img).scaled(ui->labelimage->size()));//setPixelmap(QPixmap::fromImage(img));
    ui->labelimage->resize(ui->labelimage->pixmap()->size());//resize(ui->label->pixmap()->size());
}

void MainWindow::on_pushButton_clicked()
{
    QString filename = QFileDialog::getOpenFileName(this,
                       tr("Open Image"),".",tr("Image File (*.jpg *.png *.bmp)"));
    QTextCodec *code = QTextCodec::codecForName("gb18030");
    std::string name = code->fromUnicode(filename).data();//filename.toAscii().data()
    image = cv::imread(name);
    if(!image.data)
    {
        QMessageBox msgBox;
        msgBox.setText(tr("Image Data Is Null"));
        msgBox.exec();
    }
    else {
       DisplayMat(image);
    }
}

main.cpp

#include "mainwindow.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.show();

    return a.exec();
}
显示结果如下:

Qt学习笔记——打开并显示图片_第1张图片

注意事项:

这个过程中要注意几点:

第一:建立Qt QWidgets Application工程

第二:在ui界面上添加一个QLabel控件,并改名字为labelimage

在ui界面上添加一个Button按钮,点击右键,转到槽,选择第一个 clicked(),确定,就会生成一个按钮的响应函数即:

	on_pushButton_clicked()
第三:配置工程遇到的相关问题,比如, QT  += core gui widgets

添加LIBS

添加INCLUDEPATH

等等



————————————————————————————————————————————————————————————————————————

当然,不用OpenCV更方便可以显示出来

如下

在mainwindow.cpp中

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QImage myImage;
    myImage.load("lena.jpg");
    ui->labelimage->setPixmap(QPixmap::fromImage(myImage).scaled(ui->labelimage->size()));
}

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

且在ui界面中添加QLabel控件,并拖动设置其大小即可,mainwindow.h中添加#include。其他不要变化!

显示结果如下。

Qt学习笔记——打开并显示图片_第2张图片




你可能感兴趣的:(Qt)