Skip to content

直接修改.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);

学 习 记 录