小部件内的Qt / C ++小部件未出现

时间:2019-10-15 13:56:37

标签: c++ qt

我正在编写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宏,它将起作用。

0 个答案:

没有答案