赞
踩
使用qt 版本 qt5.11.0
1、通过设置QPalette来设置背景图片。关键点在于高亮处。参考自(https://stackoverflow.com/questions/2671842/setting-background-image-for-qpushbutton)。对于qlabel 设置文本后,会调用父对象的qpaintevent,只设置背景图片则不会调用qpaintevent
m_label = new QLabel(this);
m_label->resize(100,100);
QPalette palette;
QPixmap pix("E:/temp1/wb.png");
palette.setBrush(m_label->backgroundRole(),QBrush(pix.scaled(10,10)));
palette.setColor(QPalette::WindowText,QColor(50,255,255));
m_label->setAutoFillBackground(true);
m_label->setPalette(palette);
QString str ="tttt";
m_label->setText(str);
QPalette palette1;
m_button = new QPushButton(this);
palette1.setBrush(m_button->backgroundRole(),QBrush(pix));
m_button->setPalette(palette1);
m_button->setFlat(true);
m_button->setAutoFillBackground(true);
m_button->resize(300,300);
m_button->move(300,300);
2、通过在qpaintevent(QPaintEvent*event)中绘制,需要自己实现类并继承原始的qlabel 和qpushbutton。然后给qpianter 设置qbrush(像上面的给qpalette 设置qbrush一样)。
3、使用比较方便也比较广泛的方式,通过setstylesheet(QString style)来设置,通过border-image或background-image来设置 。
完全的最新的最详细的介绍在(https://doc.qt.io/qt-5/stylesheet-reference.html#number)
qss 中文大概介绍(https://blog.csdn.net/zyc_csdn/article/details/78841066)。
qt官方demo使用参考:qt安装路径/Qt5.11.0\Examples\Qt-5.11.0\widgets\widgets\stylesheet
qss 编辑工具....
m_label->setStyleSheet("QLabel{border-style:solid;border-color:red;border-width:2px;border-radius:20px;border-image:url(E:/temp1/wb.png);}");
m_label->setStyleSheet("QLabel{border-style:solid;border-color:red;border-width:2px;border-radius:20px;background-image:url(E:/temp1/wb.png);}");
m_button->setStyleSheet("QPushButton{border-style:solid;border-color:red;border-width:2px;border-radius:20px;border-image:url(E:/temp1/wb.png);}");
第三种方式设置给QWidget 设置背景图片需要在paintEvent 函数中添加
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
或者直接将qWidget替换成QFrame,可以省去这个操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。