直接修改.ui文件很不好,比如设置了父窗体的背景 会导致子窗体的背影被父窗体覆盖
建议写qss文件
c++
QFile f("E://Learning//QT//code//qss_learn//style.qss");
f.open(QIODevice::ReadOnly);
this->setStyleSheet(f.readAll());
f.close();css
/* qSS文件样式: */
/* 控件名前加个#代表指定某个控件 */
#btn01{
background-color: rgb(255, 0, 0);
background-image: url(:/image/1.png);
border: 1px solid rgb(0, 0, 0);
border-radius: 5px;
color: rgb(255, 255, 255);
background-position: center;
background-repeat: no-repeat;
}
/* 控件名前加个:代表指定某个控件的状态 */
#btn01:hover{
background-color: rgba(0, 255, 0,210);
}
#btn01:pressed{
background-color: rgba(0, 255, 0,150);
}样式表的优先级
内联样式表优先级最高:在代码中直接设置的样式表会覆盖所有其他样式表,包括外部样式表和应用程序级别的样式表。
应用程序级别样式表:在应用程序级别设置的样式表会影响整个应用程序的外观,但会被内联样式表所覆盖。
窗口级别样式表:在窗口级别设置的样式表会影响该窗口及其子部件的外观,但同样会被内联样式表所覆盖。
外部样式表:外部样式表是通过文件导入的样式表,可以在应用程序中全局引用,但会被内联样式表、应用程序级别样式表和窗口级别样式表所覆盖。
有关背景的设置
css
background-color:设置背景颜色,可以使用颜色名称、十六进制值或RGB值来指定颜色。
background-image:设置背景图片的路径,可以是本地文件路径或者资源文件路径。
background-repeat:设置背景图片的平铺方式,包括:
repeat:默认值,背景图片在水平和垂直方向上平铺。
repeat-x:背景图片在水平方向上平铺。
repeat-y:背景图片在垂直方向上平铺。
no-repeat:背景图片不平铺,只显示一次。
background-position:设置背景图片的起始位置,可以使用关键字(如top、bottom、left、right)或者具体的像素值来指定。
background-size:设置背景图片的大小,可以使用关键字(如cover、contain)或者具体的像素值来指定。
background-attachment:设置背景图片是否随着元素的滚动而滚动,包括:
scroll:默认值,背景图片随元素滚动。
fixed:背景图片固定在视口中,不随元素滚动。其他方式给控件设置图片
c++
// 给QLabel有用 可以让图片按比例适应控件大小
QLabel *backgroundLabel = new QLabel(yourQFrame);
backgroundLabel->setPixmap(QPixmap(":/path/to/your/background/image.jpg"));
backgroundLabel->setScaledContents(true); // 图片自适应Label大小
backgroundLabel->setGeometry(yourQFrame->rect());
backgroundLabel->show();父窗体对子窗体的影响
c++
// 父窗体设置背景图片后,子窗体继承父窗体的背景图片,导致子窗体的背景图片无法显示。
// 解决方法:
// 1. 子窗体设置背景图片yourQFrame->setStyleSheet("background-color: transparent;");
// 2. 父窗体设置背景图片后,子窗体设置背景透明
// 3. 使用类选择器#选择父窗体对象进行设置
// 如果父窗体样式不生效 设置
this->setAttribute(Qt::WA_StyledBackground, true);
// 设置透明无边框
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
this->setAttribute(Qt::WA_TranslucentBackground);