24,855
社区成员
发帖
与我相关
我的任务
分享void Widget::openPictureSlot()
{
qDebug()<<"openpicture";
QImage *image=new QImage("E:/code/picture_test/images/imgMB.bmp");
QImage* imgScaled = new QImage;
*imgScaled=image->scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(*imgScaled));
}层主解决了吗?求告知 [quote=引用 13 楼 baidu_37495190 的回复:] 问题好久 了,我现在遇到了这个问题。楼主以前怎么解决的
问题好久 了,我现在遇到了这个问题。楼主以前怎么解决的
层主解决了吗?求告知 问题好久 了,我现在遇到了这个问题。楼主以前怎么解决的
)
最近在做在Label上显示图片并且画线,在网上查了很多零零散散的东西,收获也多(特别感谢楼上那位提出利用继承重新实现自己的Label类的朋友)
很多初学者更希望直接贴代码,这样可以模仿来写,我下面直接贴出我的项目中自己写的maLabel类(如果只是实现利用鼠标绘制,重写 void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e);即可,其他函数是我项目需求所以多写的,可以忽略)
申明myLabel类,继承QLabel,生成myLabel.h和myLabel.cpp文件
以下为我的代码,供参考。我只是实现了画一条直线,如果要画多条,可以用vector将之前若干条的信息干存下来,每次都绘制
myLabel.h
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
#include <QPoint>
#include <QColor>
#include <QPaintEvent>
#include <QImage>
#include <QPixmap>
class myLabel : public QLabel
{
//Q_OBJECT //必须没有,要不然会报错,因为Label不是Widget等
public:
myLabel();
//~myLabel();
//绘制线条
virtual void paintEvent(QPaintEvent *event) override;
//鼠标按下
void mousePressEvent(QMouseEvent *e);
//鼠标移动
void mouseMoveEvent(QMouseEvent *e);
//鼠标抬起
void mouseReleaseEvent(QMouseEvent *e);
//设置所画线条属性
void setLineColor(const QColor lineColor);
void setLineSize(const int lineSize);
//得到画线的起点和终点
QPoint getStartPoint();
QPoint getEndPoint();
//将图片设置为背景
void setImage(const QImage &pic);
void clear();
private:
QPoint lineStartPoint; //画线起点
QPoint lineEndPoint; //画线终点
QColor lineColor; //线条颜色
int lineSize; //5种线型
bool isPressed;
};
#endif // MYLABEL_H
myLabel.cpp
#include "myLabel.h"
#include <QPen>
#include<QPainter>
myLabel::myLabel()
{
this->lineStartPoint = QPoint(0,0);
this->lineEndPoint = QPoint(0,0);
this->lineColor = QColor(Qt::black);
this->lineSize = 3;
}
//绘制线条
void myLabel::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event);//必须有,才能让自己设置的背景图片显示出来
QPainter painter(this);
QPen pen;
pen.setColor(lineColor);
pen.setWidth(lineSize);
painter.setPen(pen);
painter.drawLine(lineStartPoint,lineEndPoint);
}
//鼠标按下
void myLabel::mousePressEvent(QMouseEvent *e)
{
lineStartPoint = e->pos();
lineEndPoint = e->pos();
//在图片上绘制
isPressed = true;
}
//鼠标移动
void myLabel::mouseMoveEvent(QMouseEvent *e)
{
if(isPressed)
{
lineEndPoint=e->pos();
update();
}
}
//鼠标抬起
void myLabel::mouseReleaseEvent(QMouseEvent *e)
{
isPressed=false;
update();
}
void myLabel::setLineColor(const QColor lineColor)
{
this->lineColor = lineColor;
}
void myLabel::setLineSize(const int lineSize)
{
this->lineSize = lineSize;
}
QPoint myLabel::getStartPoint()
{
return lineStartPoint;
}
QPoint myLabel::getEndPoint()
{
return lineEndPoint;
}
void myLabel::setImage(const QImage &pic)
{
this->setPixmap(QPixmap::fromImage(pic));
}
void myLabel::clear()
{
lineStartPoint = QPoint(0,0);
lineEndPoint = QPoint(0,0);
update();
}
问题好久 了,我现在遇到了这个问题。楼主以前怎么解决的
[quote=引用 10 楼 Night_rover 的回复:] [quote=引用 8 楼 fly_dragon_fly 的回复:] [quote=引用 7 楼 Night_rover 的回复:] [quote=引用 6 楼 fly_dragon_fly 的回复:] 继承一个QLabel, 然后在paintEvent中画
[quote=引用 8 楼 fly_dragon_fly 的回复:] [quote=引用 7 楼 Night_rover 的回复:] [quote=引用 6 楼 fly_dragon_fly 的回复:] 继承一个QLabel, 然后在paintEvent中画
[quote=引用 6 楼 fly_dragon_fly 的回复:] 继承一个QLabel, 然后在paintEvent中画
[quote=引用 7 楼 Night_rover 的回复:] [quote=引用 6 楼 fly_dragon_fly 的回复:] 继承一个QLabel, 然后在paintEvent中画
继承一个QLabel, 然后在paintEvent中画