Из любопытства попробовал на своей стороне со своим MCVE .
Исходный код C ++ testQWidgetBackgroundImage.cc
:
// Qt header:
#include <QtWidgets>
// main application
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup GUI
QWidget qWinMain;
qWinMain.setWindowTitle("Test Background Image");
qWinMain.resize(640, 480);
qWinMain.setObjectName("Widget");
qWinMain.setStyleSheet("#Widget { background-image: url(cat.jpg); }");
qWinMain.show();
// runtime loop
return app.exec();
}
Скрипт сборки CMakeLists.txt
:
project(QWidgetBackgroundImage)
cmake_minimum_required(VERSION 3.10.0)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(Qt5Widgets CONFIG REQUIRED)
include_directories("${CMAKE_SOURCE_DIR}")
add_executable(testQWidgetBackgroundImage testQWidgetBackgroundImage.cc)
target_link_libraries(testQWidgetBackgroundImage Qt5::Widgets)
Вывод:
Итак, я смог показать простой QWidget
с фоновым изображением, установленным таблица стилей, по крайней мере, в Windows 10 с VS 2017 и Qt 5.13.
Это соответствует тому, что описано в Справочник по таблицам стилей Qt - фон :
Сокращенное обозначение для установки фона. Эквивалентно указанию background-color, background-image, background-repeat и / или background-position.
Это свойство поддерживается подклассами QAbstractItemView, подклассами QAbstractSpinBox, QCheckBox, QComboBox, QDialog, QFrame, QGroupBox, QLabel , QLineEdit, QMenu, QMenuBar, QPushButton, QRadioButton, QSplitter, QTextEdit, QToolTip и обычные QWidgets.
Примечание:
Я должен признать, что я не У меня нет опыта использования ресурсов Qt. Следовательно, я предоставил URL-адрес как url(cat.jpg)
, что приводит к попытке загрузки из файла в локальном текущем рабочем каталоге (с успехом, как показано на снимке выше). Префикс с :
(например, url(:/cat.jpg)
) вместо этого будет адресовать запись в ресурсах Qt.
Дальнейшие чтения: Система ресурсов Qt
Прочитав до c. в приведенной выше ссылке я заметил, что это не так сложно использовать, и немного изменил приведенный выше MCVE:
Исходный файл C ++ testQWidgetBackgroundImage.cc
// Qt header:
#include <QtWidgets>
// main application
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup GUI
QWidget qWinMain;
qWinMain.setWindowTitle("Test Background Image");
qWinMain.resize(640, 480);
qWinMain.setObjectName("Widget");
qWinMain.setStyleSheet("#Widget { background-image: url(:/cat.jpg); }");
qWinMain.show();
// runtime loop
return app.exec();
}
Фактически, единственное изменение было url(cat.jpg)
→ url(:/cat.jpg)
.
Файл ресурсов Qt testQWidgetBackgroundImage.qrc
:
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file>cat.jpg</file>
</qresource>
</RCC>
Файл проекта Qt testQWidgetBackgroundImage.pro
:
SOURCES = testQWidgetBackgroundImage.cc
RESOURCES = testQWidgetBackgroundImage.qrc
QT += widgets
Создан и протестирован в cygwin64 :
$ qmake-qt5 testQWidgetBackgroundImage.pro
$ make && ./testQWidgetBackgroundImage
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQWidgetBackgroundImage.o testQWidgetBackgroundImage.cc
/usr/lib/qt5/bin/rcc -name testQWidgetBackgroundImage testQWidgetBackgroundImage.qrc -o qrc_testQWidgetBackgroundImage.cpp
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o qrc_testQWidgetBackgroundImage.o qrc_testQWidgetBackgroundImage.cpp
g++ -o testQWidgetBackgroundImage.exe testQWidgetBackgroundImage.o qrc_testQWidgetBackgroundImage.o -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread
Qt Version: 5.9.4
Вывод: