qt 设置 qwidget qframe qlabel qpushbutton 等组件的背景图片的3种方式

使用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,可以省去这个操作。

猜你喜欢

转载自blog.csdn.net/qiushangren/article/details/82427852