刚学QT,就是重写一个widget类,在这个里面操作,但这个显示图片不知道哪里不对,望指点
MainWindow.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_MainWindow.h"
#include "MyWidget.h"
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow(QWidget *parent = Q_NULLPTR);
protected slots:
void openFile();
private:
Ui::MainWindowClass ui;
MyWidget* mywidget;
};
MainWindow.cpp
#include "MainWindow.h"
#include <qpainter.h>
#include <qfiledialog.h>
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
mywidget = new MyWidget();
connect(ui.openFile, SIGNAL(clicked()), this, SLOT(openFile()));
}
void MainWindow::openFile()
{
QString curPath = QDir::currentPath();//获取系统当前目录
QString dlgTitle = "选择一张图片"; //对话框标题
QString filter = "图片文件(*.jpg *.png)"; //文件过滤器
QString aFileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);
if (!aFileName.isEmpty())
mywidget->setImage(aFileName);
}
MyWidget.h
#pragma once
#include <qwidget.h>
#include <qpainter.h>
#include <qimage.h>
#include <qtimer.h>
class MyWidget :
public QWidget
{
public:
MyWidget(QWidget* parent = 0);
void setImage(QString name);
protected:
void paintEvent(QPaintEvent*);
private:
QPainter* painter;
QImage image;
};
MyWidget.cpp
#include "MyWidget.h"
MyWidget::MyWidget(QWidget* parent):QWidget(parent)
{
painter = new QPainter;
}
void MyWidget::paintEvent(QPaintEvent*)
{
painter->begin(this);
painter->drawImage(QRectF(0, 0, width(), height()),image);
painter->end();
}
void MyWidget::setImage(QString name)
{
QImage img;
img.load(name);
if(!img.isNull())
image = img;
}
MyWidget类修改如下,如有帮助,忘采纳,谢谢。
Mywidget.h如下:
class MyWidget : public QWidget
{
public:
MyWidget(QWidget* parent = 0);
void setImage(QString name);
protected:
void paintEvent(QPaintEvent*);
private:
QImage image;
};
Mywidget.cpp如下
#include "MyWidget.h"
#include <QPainter>
MyWidget::MyWidget(QWidget* parent):QWidget(parent)
{
}
void MyWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.drawImage(QRectF(0, 0, width(), height()),image);
}
void MyWidget::setImage(QString name)
{
if(!name.isEmpty())
{
image.load(name);
update(); //调用paintEvent重绘,缺了这句话不会重绘的
}
}
c++ 建议贴工程文件..
用百度网盘就可以。
因为c++的lib包和dll不太好复现。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y