Как настроить таблицу стилей в QT, чтобы выбрать случайное изображение для фона виджета?

Итак, я пытаюсь выбрать случайное изображение из файловой системы моего компьютера и сделать его фоновым в виджете. Вот почему я открываю 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;");
}

Я видел этот Невозможно установить фоновое изображение в Qt Таблица стилей связана с моей проблемой, но в моем случае она не работает.


person J.Doe    schedule 06.06.2017    source источник
comment
Разве не должно быть ChatWindow{background-image:url(...) вместо ChatWindow{border-image:url(...)?   -  person rgmt    schedule 06.06.2017
comment
@wasthishelpful Я пытался использовать фоновое изображение, но оно не работает.   -  person J.Doe    schedule 06.06.2017


Ответы (1)


Согласно документации, не существует такое свойство называется border-image: вы ищете background-image.

Кроме того, поскольку вы также указываете другие параметры фона, вы должны использовать background.

Более того, поскольку ваш файл находится на диске, а не в ресурсах, адрес не должен начинаться с :: введите url(" + filePath + ") вместо url(:" + filePath + ").

Исправленный синтаксис:

setStyleSheet(
    "ChatWindow{background:url(" +
        filePath +
    ") 0 0 0 0 stretch stretch;}"
);
person rgmt    schedule 06.06.2017
comment
спасибо, теперь это работает. В следующий раз я буду читать документацию внимательнее. - person J.Doe; 06.06.2017