话说这是第一次用QT,各种不适应,距离上一次使用此类工具已经好久了。记得之前是C#,用起来异常方便。首先吐槽下关于QT的编辑器,被VS甩了一大街是肯定的,用得太不习惯了。
这次是要进行简易的图像处理,老师说什么直接用C和OpenCV,还需要交互,还是饶了我吧,重点是C的交互真不容易,现在实在毫无心情去折腾MFC,被坑过一次,还不如来QT或PyQT之类的。
需求是这样的,最初的,打开一张图片,仅此而已。对于当时一片空白的人来说,查文档吧,昨天搞定了菜单,实在不容易,只能说实际上和我想的不一样。发现一点,之前在MFC上最坑的信号处理在这里变得容易多了,还有拖控件的玩意似乎没有微软的做得实用,好多容易混淆。
打开图片的代码相对容易,如下:
QString file = QFileDialog::getOpenFileName(this, tr("Open File"), " ", tr("Image(*.bmp *.png *.jpg *.jpeg)"));
qDebug() << "String" << file;
if(!file.isEmpty()){
ui->widget->setImage(QImage(file));
}
qDebug() << "String" << file;
if(!file.isEmpty()){
ui->widget->setImage(QImage(file));
}
而处理图片就需要一个类了,这里使用QWidget来显示图片,最好的方式还是用QPainter了,当然,网上这么说我也就这么用。而图像的处理就使用QImage,也不错的,可以对像素点进行处理是我所需要的。
#mypainterwidget.h 头文件
#ifndef MYPAINTERWIDGET_H
#define MYPAINTERWIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QImage>
class MyPainterWidget : public QWidget
{
Q_OBJECT
public:
explicit MyPainterWidget(QWidget *parent = 0);
const QImage *image() const;
protected:
void paintEvent(QPaintEvent *);
public slots:
void setImage(const QImage &img);
private:
QImage m_image;
};
#endif // MYPAINTERWIDGET_H
#ifndef MYPAINTERWIDGET_H
#define MYPAINTERWIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QImage>
class MyPainterWidget : public QWidget
{
Q_OBJECT
public:
explicit MyPainterWidget(QWidget *parent = 0);
const QImage *image() const;
protected:
void paintEvent(QPaintEvent *);
public slots:
void setImage(const QImage &img);
private:
QImage m_image;
};
#endif // MYPAINTERWIDGET_H
这里使用的其实是一个更新机制,实现起来挺简单的,查了好多地方最后终于找到,当然如果自己让我找估计也问题不大,就是QT的文档真不习惯,难道是字体的原因么。
#mypainterwidget.cpp 程序文件
#include "mypainterwidget.h"
#include <QPainter>
#include <QImage>
MyPainterWidget::MyPainterWidget(QWidget *parent) :
QWidget(parent)
{
}
void MyPainterWidget::paintEvent(QPaintEvent *event)
{
QWidget::paintEvent(event);
if (m_image.isNull())
return;
QPainter painter(this);
painter.drawImage(rect(),m_image);
}
const QImage* MyPainterWidget::image() const
{
return &m_image;
}
void MyPainterWidget::setImage(const QImage &img)
{
m_image = img;
this->update();
}
#include "mypainterwidget.h"
#include <QPainter>
#include <QImage>
MyPainterWidget::MyPainterWidget(QWidget *parent) :
QWidget(parent)
{
}
void MyPainterWidget::paintEvent(QPaintEvent *event)
{
QWidget::paintEvent(event);
if (m_image.isNull())
return;
QPainter painter(this);
painter.drawImage(rect(),m_image);
}
const QImage* MyPainterWidget::image() const
{
return &m_image;
}
void MyPainterWidget::setImage(const QImage &img)
{
m_image = img;
this->update();
}
参考:https://www.librehat.com/qt-image-display-widget-autosize-by-subclass-qwidget/
就看见妹子挺诱人的
我也喜欢图片编辑,但是用的其他方法
我只是做作业而已,需要用代码处理。正常情况下肯定不会用这种方式编辑啦
不容易,还捣鼓起来
只听过QT
不是QT语音,别弄混了
是说听过QT这个东西 没用QT
QT语言也没用过 你的恢复全被腾讯视为了垃圾邮件
好吧,都遇到这个问题了。上次处理了的,这次又悲剧了
上面评论对话有意思
其实那段评论被我编辑过的
博主你好,需要独立IP主机吗,现在有活动“独立IP主机 终生3.8折 ?
一直只用VPS