Qt 在GraphicsView中 打开一幅图片

简述:

记录一下如何在 Qt中打开一幅图片


步骤:

1. 新建一个项目,Qt C++ 项目, Qt GUI应用

之后按步骤新建就可以了,


2. 勾选中下面这三个



3. 新建一个MainWindow

点击下一步, 完成, 工程创建完毕



4 这一步之后是具体如何用Qt打开一幅图片

双击mainwindow.ui 进入design模式,

选中


拖拽到上方


于是就出现了一个窗口。


5. 之后添加一个打开图片的按钮

拖拽一个PushButton, 用同样的方法,之后改变名字为OpenImageBtn这个是Button对象实例的名字



6. 添加信号事件, 按了OpenImageBtn之后,打开图片文件

回到 需要定义一个SLOT信号槽,来处理按了button的事件,这里有一个on_slotOpenImage_triggered() 信号槽

具体参看代码.其他包括文件打开的代码,参考网上


代码:

头文件——

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QImage>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QFileDialog>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    QImage *image;

private slots:
    void on_slotOpenImage_triggered(); //信号槽
};

#endif // MAINWINDOW_H

源文件——

main.cpp

#include <QtGui/QApplication>
#include "mainwindow.h"

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

    return a.exec();
}

mainwindow.cpp

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

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

    this->image = new QImage();

    //connect the button listener event
     connect(ui->OpenImageBtn,SIGNAL(clicked()), this, SLOT(on_slotOpenImage_triggered()));

}

void MainWindow::on_slotOpenImage_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(
                this, "open image file",
                ".",
                "Image files (*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm);;All files (*.*)");
    if(fileName != "")
    {
        if(image->load(fileName))
        {
            QGraphicsScene *scene = new QGraphicsScene;
            scene->addPixmap(QPixmap::fromImage(*image));
            ui->graphicsView->setScene(scene);
            ui->graphicsView->resize(image->width() + 10, image->height() + 10);
            ui->graphicsView->show();
        }
    }
}

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


实现效果:

未打开时:


打开后:



未完待续。。。





猜你喜欢

转载自blog.csdn.net/anialy/article/details/8181038