如何在QT中设置样式表来为wiget背景选择随机图像?

How to set up stylesheet in QT to choose random image for wiget background?

所以我试图从我电脑的文件系统中选择随机图像,并将其作为 wiget 的背景。这就是我打开 QFileDialog 并使用它的原因。 qDebug 给了我正确的图像路径,但它仍然不起作用。

void ChatWindow::on_actionImage_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(
        this, tr("Open file"), "/home", tr("Images(*.jpg)")
    );
    QString filePath(fileName);
    qDebug () << filePath;
    setStyleSheet(
        "ChatWindow{border-image:url(:" +
            filePath +
        ") 0 0 0 0 stretch stretch;}"
    );

    QGraphicsOpacityEffect * effect1 =
        new QGraphicsOpacityEffect(ui->messageHistory);
    effect1->setOpacity(0.8);
    ui->messageHistory->setGraphicsEffect(effect1);
    ui->messageHistory->setStyleSheet("background-color: white;");

    QGraphicsOpacityEffect * effect2 =
        new QGraphicsOpacityEffect(ui->roomTree);
    effect2->setOpacity(0.8);
    ui->roomTree->setGraphicsEffect(effect2);
    ui->roomTree->setStyleSheet("background-color: white;");

    QGraphicsOpacityEffect * effect3 =
        new QGraphicsOpacityEffect(ui->messageInput);
    effect3->setOpacity(0.8);
    ui->messageInput->setGraphicsEffect(effect3);

    ui->sendButton->setStyleSheet("background-color: none;");
}

我已经看到这个 Unable to set the background image in Qt Stylesheet 与我的问题相关,但在我的情况下它不起作用。

根据 documentation,不存在名为 border-image 的 属性:您要搜索的是 background-image

此外,由于您还指定了其他背景参数,因此您应该使用background

此外,由于您的文件在磁盘上而不在资源中,因此 url 不应以 : 开头:键入 url(" + filePath + ") 而不是 url(:" + filePath + ")

更正后的语法:

setStyleSheet(
    "ChatWindow{background:url(" +
        filePath +
    ") 0 0 0 0 stretch stretch;}"
);