导航:首页 > 图片大全 > qt绘制的图片如何让背景图为圆形

qt绘制的图片如何让背景图为圆形

发布时间:2022-08-22 03:24:47

⑴ qt的stylesheet中如何设置属性使背景图自动调整来适应控件的大小,急求!

A background-image does not scale with the size of the widget. To provide a "skin" or background that scales along with the widget size, one must use border-image. Since the border-image property provides an alternate background, it is not required to specify a background-image when border-image is specified. In the case, when both of them are specified, the border-image draws over the background-image.

默认background-image 不会缩放图片以适应控件的大小。
如果要提供一个皮肤或背景图片以自动适应控件大小,
必须也只能用border-image属性。
因为border-image已经设置了可用的背景图片,
所以使用了border-image后,没必要再指定background-image。
如果同时指定了两个属性,那么将会使用border-image 绘制覆盖掉background-image。

例子中的
QMainWindow > .QWidget {
background-color: gainsboro;
background-image: url(:/images/pagefold.png);
background-position: top right;
background-repeat: no-repeat
}

把上面的改成:
QMainWindow > .QWidget {
background-color: gainsboro;
border-image: url(:/images/pagefold.png);
}
就能实现你要的效果了,自动将pagefold.png拉伸填满整个背景。

⑵ qt编程label显示图片,如何在图片上绘制相应图形呢

继承QLabel呗

#include <QPainter>
#include <QMouseEvent>

Label::Label(QWidget *parent) :

QLabel(parent)
{

isRelease = true;

point = QPoint(0, 0);

setScaledContents(true);
}

void Label::mousePressEvent(QMouseEvent *e)
{

point = e->pos();

isRelease = false;

update();
}

void Label::mouseMoveEvent(QMouseEvent *e)
{

point = e->pos();

isRelease = false;

update();
}

void Label::mouseReleaseEvent(QMouseEvent *)
{

isRelease = true;

update();
}

void Label::paintEvent(QPaintEvent *)
{

QPainter painter(this);

painter.drawPixmap(rect(),QPixmap("../123.jpg"));

if(!isRelease)

painter.drawEllipse(point,20,20);
}

⑶ Qt中如何利用 png 图片来实现自定义形状的窗口

使用 Qt::WindowFlags 可以实现一些不同类型的窗口,如:用 Qt::FramelessWindowHint 来实现无边框窗口,用 Qt::Popup 来实现弹出式的窗口,用 Qt::Tool 来实现工具窗口,用Qt::CustomizeWindowHint 来关闭窗口标题栏以及与 Qt::WindowCloseButton(添加关闭按钮),Qt::WindowMaximumButtonSize(添加最大化按钮)联用来建立只有关闭按钮和最大化按钮的窗口,用 Qt::WindowStaysOnTopHint 使窗口永远在最前端等。 Qt::WidgetAttribute 使窗口支持透明背景以及在关闭后主动销毁。其它一些常用的 Attribute 有:Qt::WA_AcceptDrops 使 widget 支持拖拽操作,Qt::WA_MouseTracking 使 widget 及时响应鼠标移动事件(MouseMoveEvent)。 Qt::setMask() 函数对窗口进行部分区域遮掩来实现各种形状的窗口。部分代码解释:头文件: 1:#ifndef SHAPEDWIDGET_H 2:#define SHAPEDWIDGET_H 3: 4:#include <QWidget> 5:class QPoint; 6:class QPixmap; 7:class ShapedWidget : public QWidget 8: { 9: Q_OBJECT 10:public: 11:explicit ShapedWidget(QWidget *parent = 0); 12: ~ShapedWidget(); 13: 14:private slots: 15:void changeSkin(); 16: 17:protected: 18:void mousePressEvent(QMouseEvent *); 19:void mouseMoveEvent(QMouseEvent *); 20:void paintEvent(QPaintEvent *); 21: 22:private: 23:void initData(); 24:void initVisualComponents(); 25:void setupContextMenu(); 26: 27: QPoint* dragPos_; 28: QPixmap* backgroundPixmap_; 29: }; 30: 31:#endif // SHAPEDWIDGET_H构造: 1: ShapedWidget::ShapedWidget(QWidget *parent) : 2: QWidget(parent, Qt::FramelessWindowHint) //无边框窗体 3: { 4: initData(); //初始化数据,这个demo里面就两个,具体下面有解释 5: initVisualComponents(); //初始化私有可视部件,这个demo里面没有私有的其它部件,所以只做了窗口的一些属性设置 6: setupContextMenu(); //设置右键菜单,分配各种QAction内存空间以及连接SIGNALS和SLOTS 7: setAttribute(Qt::WA_DeleteOnClose); //关闭事件发生后就主动从内存中销毁窗口 8: setAttribute(Qt::WA_TranslucentBackground); //透明背景支持 9: } 拖拽移动窗体(下面有图示): 1:void ShapedWidget::mousePressEvent(QMouseEvent *event) 2: { 3:if(event->button() == Qt::LeftButton) 4: { 5: *dragPos_ = event->globalPos() - frameGeometry().topLeft(); 6: event->accept(); 7: } 8: } 9: 10:void ShapedWidget::mouseMoveEvent(QMouseEvent *event) 11: { 12:if(event->buttons() & Qt::LeftButton) 13: { 14: move(event->globalPos() - *dragPos_); 15: event->accept(); 16: } 17: } 窗口绘制: 1:void ShapedWidget::paintEvent(QPaintEvent *) 2: { 3: QPainter painter(this); 4: painter.fillRect(0, 0, backgroundPixmap_->width(), backgroundPixmap_->height(), *backgroundPixmap_); 5: } 更换皮肤: 1:void ShapedWidget::changeSkin() 2: { 3: QAction* source = qobject_cast<QAction*>(sender()); //获取发送该信号的信号源,并转换对象 4: backgroundPixmap_->load(source->data().toString()); //因为给每个 QAction 赋了图片的地址的字符串 5://所以可以通过 data() 来获取该值,并更新背景图片的内容 6: resize(backgroundPixmap_->width(), backgroundPixmap_->height()); //窗口大小尽可能小

⑷ 求教各位QT高手,如何实现抗锯齿的圆形头像

参考QT DEMO(Image Composition),采用图片混合透视的方式获得圆形切图。

关键代码:painter.setCompositionMode(QPainter::CompositionMode_SourceOut);

QT提供了多种图片很合方式,经过测试,如果其他项不调整,只有QPainter::CompositionMode_SourceOut这种方式适合。

透视图mask.png,试过中间圆是黑,周边空的,在Image Composition上不能透出圆形图。

示例代码:

QImage getRoundQImage(QSize size/*const QImage& head*/)

{

QImage resultImage(size,QImage::Format_ARGB32_Premultiplied);

QImage head("user.png");

head = head.scaled(size);

QImage head_mask("mask.png");

QPainter painter(&resultImage);

painter.setCompositionMode(QPainter::CompositionMode_Source);

painter.fillRect(resultImage.rect(), Qt::transparent);

painter.setCompositionMode(QPainter::CompositionMode_SourceOver);

painter.drawImage(0, 0, head_mask);

painter.setCompositionMode(QPainter::CompositionMode_SourceOut);

painter.drawImage(0, 0, head);

painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);

painter.end();

return resultImage;

}

void getRoundPixmap(QPixmap& src,QSize size)

{

QImage resultImage(size,QImage::Format_ARGB32_Premultiplied);

QPixmap head_mask("mask.png");

QPainter painter(&resultImage);

painter.setCompositionMode(QPainter::CompositionMode_Source);

painter.fillRect(resultImage.rect(), Qt::transparent);

painter.setCompositionMode(QPainter::CompositionMode_SourceOver);

painter.drawPixmap(0, 0, head_mask);

painter.setCompositionMode(QPainter::CompositionMode_SourceOut);

painter.drawPixmap(0, 0, src.scaled(size));

painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);

painter.end();

src = QPixmap::fromImage(resultImage);

}

⑸ QT怎么给控件设置背景图片

1 MLCNWidget *w=new MLCNWidget;
w->setAutoFillBackground(true);
QPalette palette;
palette.setBrush(w->backgroundRole(), QBrush(QPixmap("./pic/new_images/bg.jpg")));
w->setPalette(palette);
w->showFullScreen();
2 使用QSS
控件->setStyleSheet("background-image:url(./pic/new_images/start_jiankong.png)");
这样做的一个缺点是一旦在一个控件中使用StyleSheet了,其中的子控件就全部会继承,也就是在上面显示主控件的背景了。在网上看到可以通过*{}的方式防止继承,但我试了下,没成功,不知道到底行不行。
3 关于label上加图片的
估计除了widget,加的最多的就是QButton和QLabel了,QLabel里面看QT文档可以发现有个槽,setPixmap,用了下,特别好用。
ui.label_5->setPixmap(QPixmap("./pic/new_images/start_jiankong.png"));

⑹ 如何用Qt画出实心圆

QPainter painter(this);

painter.setPen(QPen(Qt::blue,4));//设置画笔形式
painter.setBrush(QColor(255,0,0));//设置画刷,如果不画实现的直接把Brush设置为setBrush(Qt::NoBrush);

painter.drawEllipse(20,20,200,200);//画圆

⑺ qt圆角按钮与图片背景冲突

现在要实现一个部分圆角的控件,而且这个控件需要设置背景图片。
可以使用自己绘制的方式。但Qt提供的样式是一种更简单的方式。
不过三种设置图片方式是有区别的。
1. image:加载图片的显示效果最好,但不能设置圆角
2. border-image:加载图片的效果尚可,可以设置圆角
3. background-image:不能加载高清图,可以设置圆角。

⑻ QT中怎么把图片设置为桌面背景

void Background::paintEvent( QPaintEvent * event ){
QPixmap pixmap = QPixmap("123.bmp").scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}设置QT程序的背景

⑼ qt中如何将png设置为背景(怎么将图片平铺)

MyWidget*w=new MyWidget;
QPalette palette;
palette.setBrush(w->backgroundRole(), QBrush(QPixmap("./pi/backGround.PNG")));
w->setPalette(palette);
w->show();
按上面的做就可以设置背景了,注意替换你自己的widget的类和图片的路径

⑽ qt中主窗口背景设置

以前遇到的很多小知识,从今天开始都一点一点记录下来。。。
窗口背景无非两种:背景色、背景图片。Qt中窗口背景如何设置?下面介绍三种方法:
一、QPalette设置背景
二、实现paintEvent,使用QPainter来绘制背景
三、使用QSS来设置背景
关于QSS的使用不想多说,一般我不用QSS设置窗口背景,也不建议使用。(注意:这里是对于窗口而言)。如果是子部件当然可以。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式
子部件一般情况下也不需要设置背景图片,即使需要使用QSS也完全可以满足。设置较多的是背景色与图标,QSS中使用background或者background-color的方式可以实现背景色的设置,图标则可以使用setPixmap或者setIcon来设置!
下面介绍QPalette以及paintEvent
一、QPalette设置背景
构造函数中可以使用如下方式:
(1)设置背景色
QPalette palette(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setPalette(palette);
或:
QPalette palette;
palette.setBrush(this->backgroundRole(), Qt::black);
this->setPalette(palette);
这里setColor和setBrush都可以使用!
(2)设置背景图片
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);
上面方式无论设置背景色还是背景图片QPalette::Background与this->backgroundRole()是等价的!
二、paintEvent设置背景
(1)设置背景色
void IIIMark::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::black);
painter.drawRect(this->rect());
}
(2)设置背景图片
void IIIMark::paintEvent(QPaintEvent *)
{
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}
注意:
(1)以上都是用scaled方式对图片进行了适应窗口大小的设置,因为所给的图片大小不一定满足要求,所以采用此方式!当然图片经过拉伸或者压缩之后会变形(纯色图片除外),所以对图片采用此方式时需要注意。
(2)设置背景范围的时候如果需要充满整个窗口最好使用this->rect(),因为我看到很多人在使用QRect(0, 0, 400, 400)之类的语句,那么如果窗口大小改变了呢?此句是不是要跟着变呢?
(3)如果需要背景图片或者背景色随可以发生改变时,也就是所谓的换肤功能,则采用paintEvent的方式,在需要改变的时候使用update()来进行更新。
(4)this->setAutoFillBackground(true)又让我想起了tr(),被很多人滥用。这句话在什么时候使用呢?不妨采用QPalette设置背景的方式加上与去掉这句话对比一下(在有父窗口的情况下使用)。如果这个QWidget直接show,则有背景色,如果放到一个父窗口中,就没有效果。添加该句即可!

阅读全文

与qt绘制的图片如何让背景图为圆形相关的资料

热点内容
word中如何批量调整图片大小位置 浏览:671
玉米造型图片大全 浏览:605
如何把苹果手机的图片转到新手机 浏览:120
word里面怎样把插入的图片变大 浏览:289
女性电动器具图片大全 浏览:320
微信圣诞红包封面怎么写图片 浏览:224
女生图片喜庆 浏览:723
庆元旦海报图片2021简单 浏览:737
打理烫发发型图片大全 浏览:256
女生殖日本真人图片 浏览:732
美女整容图片 浏览:56
背景人物图片女生背影带字 浏览:424
肖战跨年红衣服图片高清 浏览:912
动漫男生开心图片 浏览:84
怎么把图片文件夹变成word文档 浏览:962
word合并图片教程 浏览:445
动漫学校门口图片 浏览:198
批量扣除word中图片背景 浏览:414
div实现图片压住文字的效果 浏览:955
女短发后面发型图片 浏览:703