我正在编写Qt / C ++项目,并在QtDesigner中创建了mainwindow.ui。我在mainwindow.ui中放置了一个空窗口小部件,稍后我想通过在其中放置用代码编写的窗口小部件进行扩展。这是我的代码:
扩展QWidget的类
#pragma once
#include <QtGui>
#include <QWidget>
using namespace QtDataVisualization;
class GraphDataCreator : public QWidget
{
Q_OBJECT
public:
GraphDataCreator(QWidget* parent = 0);
~GraphDataCreator();
};
此类的cpp:
#include "GraphDataCreator.h"
GraphDataCreator::GraphDataCreator(QWidget* parent)
: QWidget(parent)
{
this->setStyleSheet("background-color:green;");
}
和mainwindow类:
#pragma once
#include <QMainWindow>
#include "ui_MainWindow.h"
#include "GraphDataCreator.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QMainWindow*parent = Q_NULLPTR);
~MainWindow();
private:
Ui::MainWindow ui;
};
主窗口类的cpp
#include "MainWindow.h"
#include <string>
#include <QtGui>
#include "GraphDataCreator.h"
MainWindow::MainWindow(QMainWindow*parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QGridLayout* layout = new QGridLayout(ui.Chart3DWidget);
GraphDataCreator* chart3D = new GraphDataCreator(ui.Chart3DWidget);
layout->addWidget(chart3D);
QWidget* test_widget = new QWidget;
test_widget->setStyleSheet("background-color: red;");
layout->addWidget(test_widget);
ui.Chart3DWidget->setLayout(layout);
}
我想成为ui绿色的整个小部件,但是它没有出现,所以我把test_widget放到了红色背景上,结果是它什么都不是/一半是红色。因此,绿色小部件保留在那里,但不可见。我的问题是为什么绿色部分不可见?以及如何解决?
当然,类名很奇怪,因为我尝试做其他事情,而这种解释简化了这个问题。
编辑:
thx @sajas寻求帮助!实际上,我使用了该链接Why do stylesheets not work when subclassing QWidget and using Q_OBJECT?,并且使用了其中写的情况2,因此我删除了GraphDataCreator类中的Q_OBJECT宏,并且无需进行任何其他更改即可工作。我留下的小部件背景颜色的功能与其他所有功能相同。结果是预期的一半绿色/一半红色。无论如何,我认为我应该包括宏Q_Object,因为它是在Qt类中写在链接那里的,但是它确实可以工作。也许Qt中有一个小错误???总结一下,如果删除Q_Object宏,它将起作用。