【发布时间】:2020-08-20 19:11:19
【问题描述】:
编辑:问题还没有解决,我暂时使用@Scheffs 的回答作为解决方法。
是否可以将图像作为背景添加到使用 QWidget 作为基类创建的 Qt 小部件应用程序中?我这里根本没有使用 QMainWindow。
在 Qt Creator 中,您可以在创建新项目的同时生成骨架源代码文件。如果您选择 QWidget 作为基类,并尝试通过更改小部件样式表(手动枯萎或从 IDE 的设计部分)添加图像作为背景,则在构建项目时图像不会显示.如果可能,我该如何解决这个问题?
我创建一个 Qt 资源文件,添加一个图像(在源代码目录中),并设置样式表,就是这样。但是如果我用
添加背景颜色Widget->setStyleSheet(QString::fromUtf8("#Widget {background-color: rgb(55,55,55)};"));
在 ui_widget.h 中,它工作正常并在构建后显示。
如果我从 Qt Creator 中预览小部件,图像会出现,但在构建和运行后不会出现。
这里选择 QWidget 作为 Qt Creator 中的基类:
这是 main.cpp:
#include "widget.h"
#include <QtCore/qglobal.h>
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
这是 ui_widget.h:
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Widget
{
public:
void setupUi(QWidget *Widget)
{
if (Widget->objectName().isEmpty())
Widget->setObjectName(QString::fromUtf8("Widget"));
Widget->resize(600, 150);
// I add this line, if I changed the style sheet to a simple background color it shows up with no problem {background-color: rgb(1,1,200)}
Widget->setStyleSheet(QString::fromUtf8("#Widget {background-image: url(:/pic.jpg);}"));
retranslateUi(Widget);
QMetaObject::connectSlotsByName(Widget);
} // setupUi
void retranslateUi(QWidget *Widget)
{
Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr));
} // retranslateUi
};
namespace Ui {
class Widget: public Ui_Widget {};
} // namespace Ui
QT_END_NAMESPACE
这是widget.h:
#include <QtCore/qglobal.h>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
这是 widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); }
Widget::~Widget() { delete ui; }
很抱歉添加了整个生成的代码,但它可能会有所帮助,谢谢。
【问题讨论】:
-
我很确定
QWidget不支持背景图片。请改用QFrame。 -
@G.M.根据Qt Style Sheets Reference,plain QWidgets 应该支持
background,并且明确提到了background-image。如果它也不适用于QFrame,我会检查图像是否已正确添加到 Qt 资源以及路径是否正确。 -
@Scheff 你是对的。我刚刚读了this bit,它没有明确提到“图像”,并假设最坏的情况:-/。谢谢指正。
-
@Scheff 我确定路径是正确的。我忘了提到,如果我在构建之前从 Qt Creator 中预览小部件,则会出现图像,而在构建之后不会。
-
在我这边检查了这个之后,我更加相信你的 Qt 资源有问题。我没有使用 Qt creator,而是在 Notepad++ 中编写了所有内容(至少对于第二个 MCVE)并使用命令行工具进行构建。不过,我相信它也应该在 Qt creator 中工作。