- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:问题还没解决,我用了@Scheff
作为临时解决方法的答案。
是否可以将图像作为背景添加到使用 QWidget 作为基类创建的 Qt 小部件应用程序?我根本没有在这里使用 QMainWindow。
在 Qt Creator 中,您可以在创建新项目的同时生成骨架源代码文件。如果您选择 QWidget 作为基类,并尝试通过更改小部件样式表(手动或从 IDE 的设计部分)添加图像作为背景,则构建项目时图像不会显示.如果可能,我该如何解决这个问题?
我创建了一个 Qt 资源文件,添加了一个图像(在源代码目录中),并设置了样式表,就是这样。但是如果我添加一个背景颜色
Widget->setStyleSheet(QString::fromUtf8("#Widget {background-color: rgb(55,55,55)};"));
#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();
}
#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
#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;
};
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); }
Widget::~Widget() { delete ui; }
最佳答案
出于好奇,我用自己的方式尝试了自己的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
至少在带有 VS 2017 和 Qt 5.13 的 Windows 10 中使用样式表设置的背景图像。
Shorthand notation for setting the background. Equivalent to specifying background-color, background-image, background-repeat, and/or background-position.
This property is supported by QAbstractItemView subclasses, QAbstractSpinBox subclasses, QCheckBox, QComboBox, QDialog, QFrame, QGroupBox, QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QRadioButton, QSplitter, QTextEdit, QToolTip, and plain QWidgets.
url(cat.jpg)
这导致尝试从本地当前工作目录中的文件加载(如上面的快照所示,成功)。前缀
:
(例如
url(:/cat.jpg)
)将改为寻址 Qt 资源中的条目。
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)
.
testQWidgetBackgroundImage.qrc
:
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file>cat.jpg</file>
</qresource>
</RCC>
testQWidgetBackgroundImage.pro
:
SOURCES = testQWidgetBackgroundImage.cc
RESOURCES = testQWidgetBackgroundImage.qrc
QT += widgets
$ 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
关于c++ - 如何在不使用 QMainWindow 的情况下向 QWidget 添加背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61624759/
https://stackoverflow.com/a/13661255/462608 QMainWindow comes with its own layout, you can't set tha
我使用 QMainWindow 作为我的主 QMainWindow 的 child。这样我就得到了另一个区域,我可以将其用于可停靠小部件 (QDockWidget)。 根据以下帖子,这没问题,它也非常
重点关注这部分代码: prect = self.parent.rect() # Show Window2),Window2 不相对于父窗口居中显示。 当我使用 prect1.center() 时,它
这个相当少的代码创建了一个带有三个右键单击选项的系统托盘项。一个是QDialog的实例,另一个是QMainWindow,还有Quit。它适用于一个系统托盘驱动的应用程序,它将有一些 qdialogs
我想将 QMainWindow 实例放在另一个 QWidget 中(例如另一个 QMainWindow 的 centralWidget)。 我想知道为什么它不起作用? QMainWindow 直接继承
我正在 OSX 下使用 Qt Creator (Qt5.10) 编写 GUI。我有一个用于主应用程序窗口的 QMainWindow。在这里面我有一个 QTab 小部件,其中我有整个小部件(我们称它为
嗯,主题。 我在桌面 Qt4 应用程序中使用停靠栏小部件,但我不喜欢停靠栏形式的布局。我希望右侧 停靠栏占据右上 角,默认情况下由顶部 停靠栏占据。 我用谷歌搜索(认真地!)我能用这个做什么,我找到了
我是 PySide 的新手。我遇到一个问题:当我从另一个 QmainWIndow(主 UI)触发 QAction 时,一个新的 QMainWindow 闪烁并消失了。我在这里发布示例代码来说明以上内容
我的问题: 我想自定义标题栏 的工作方式和查找我的应用程序的方式。 我的想法: 我在 Qt Designer 中创建了一个新的 QWidget 表单,并向其中添加了一个 QWidget。我在构造函数中
我想在屏幕中间显示我的项目主窗口。当我调用“self.show()”时,窗口会显示在屏幕中间。 最佳答案 我知道你已经解决了,但我为那些有同样问题的人做这个回答。我发布它主要是因为你要求 pyQt 而
为什么 QMainWindow 的析构函数不是虚拟的?如果我从 QMainWindow 继承了一个类 MainWindow 并在它上面有一些指针属性,我就不能使用 MainWindow 的析构函数删除
我正在尝试重建一个屏幕记录PyQt应用程序,ScreenToGIF对我来说是一个非常好的演示,它创建了一个只有边框并在“Central Widgets”中记录内容的界面,如下所示: 主要功能为: 边框
我对 Qt 比较陌生。 我正在编写一个应用程序,我在其中生成伪随机数和 key ,我想用 QMainWindow 中捕获的随机鼠标移动来为生成器播种。此外,我希望能够在用户按下 QButton 时关闭
如何将第一个参数传递给 QMainWindow? 我希望能够将多个不同的参数传递给 QMainWindow。我的问题是,即使在我修改了构造函数以允许传递第二个/第三个/第四个参数之后,我仍然找不到实例
我尝试创建类似窗口池的东西。您可以在程序中的任何地方使用这些窗口来显示图形和绘图等。小部件运行良好,但目前的主要问题是创建池的尝试受挫。一个非 QObject-Object 应该表示一个 QMainW
我制作了一个快速测试程序,执行时似乎没有显示任何内容。这是我的代码: z_lock.h #ifndef Z_LOCK_H #define Z_LOCK_H #include class z_lock
是否可以制作一个未修饰的 QMainWindow,如果可以,我该怎么做? 最佳答案 是的, mainWin->setWindowFlags(Qt::CustomizeWindowHint); 参见 Q
我正在尝试编译 cutecash(一个 qt 项目)并且遇到了一些麻烦。我只是在做标准: cmake . make 但是,我遇到无法找到 QMainWindow 和 QString 等错误。这是错误:
一个最小的例子: class MainWindow(QtGui.QMainWindow): def __init__(self, parent = None): QtGui.QMain
我在 PyQT5 中遇到错误的布局。我究竟做错了什么?是否有一些预定义的小字段大小或类似的?我将主窗口创建为 QMainWindow,并在其中创建一个小部件作为中央小部件。它是这样的: class M
我是一名优秀的程序员,十分优秀!