Css Qt自定义用户主题

Css Qt自定义用户主题,css,qt,Css,Qt,我正在尝试设置一种方法,用于使用外部文件创建主题。目前,我正在读取一个文件并将其放入QString,然后将其放入“qApp->setStyleSheet(string);”中,这似乎是可行的,但是,当我给按钮的背景上色时,它似乎不起作用。同样的css也直接在qt designer中起作用 功能: void SeniorProject::themer(QString theme_name) { qDebug() << theme_name; QString file =

我正在尝试设置一种方法,用于使用外部文件创建主题。目前,我正在读取一个文件并将其放入QString,然后将其放入“qApp->setStyleSheet(string);”中,这似乎是可行的,但是,当我给按钮的背景上色时,它似乎不起作用。同样的css也直接在qt designer中起作用

功能:

void SeniorProject::themer(QString theme_name)
{
    qDebug() << theme_name;
    QString file = QCoreApplication::applicationDirPath()
            + "/themes/" + "default" + "/theme.style";
    qDebug() << "file = " + file;
    QFile themeFile(file);
    QString themeStyle;
    if (themeFile.open(QIODevice::ReadOnly))
    {
        QTextStream in (&themeFile);
        themeStyle = in.readAll();
        themeFile.close();
    }
    else
    {
        qDebug() << "error";
    }
    qApp->setStyleSheet(themeStyle);
    update();
}

QPushButtons中的背景是我目前的问题,样式表正确加载并更新(我可以判断,因为按钮上的边框实际上会更改为我想要的),但背景似乎不起作用。有人能帮我吗?谢谢。

我找到了背景不起作用的原因。如果您之前设置了整个小部件的背景,而该小部件是您试图通过QT Designer设置样式的项的父项,则在未使用QT Designer设置背景时,将无法设置背景。

您希望完全透明(255个中的1个)的背景是什么?请尝试
rgba(96171248255)
@DmitrySazonov,它是由qt creator的渐变生成的。我将其设置为255,但是问题仍然存在。将透明度设置为1并直接在creator中设置样式也适用于1。
QPushButton#exit {
    color: rgb(220, 0, 0);
    border: none;
    outline: none;
}
QPushButton#exit:hover {
    color: rgb(255, 8, 0);
}
QPushButton#exit:Pressed {
    color: rgb(150, 0, 0);
}


QFrame#mainbox QPushButton {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(122,188,255,1), stop: 0.44 rgba(96,171,248,1), stop: 1 rgba(64,150,238,1));
    border: .1px outset rgb(122, 188, 255);
    border-radius:4px;
}
QFrame#mainbox QPushButton:hover {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(147,201,255,1), stop: 0.44 rgba(133,190,247,1), stop: 1 rgba(90,163,237,1));
    border: .1px outset rgb(122, 188, 255);
    border-radius:4px;
}
QFrame#mainbox QPushButton:pressed {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(84,169,255,1), stop: 0.44 rgba(66,155,244,1), stop: 1 rgba(45,141,237,1));
    border: .1px outset  rgb(122, 188, 255);
    border-radius:4px;
}