首页 > 解决方案 > 小部件内的 Qt/C++ 小部件未出现

问题描述

我正在编写 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;");   
}

和主窗口类:

#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 放在那里,红色背景,结果是它一半没有/一半是红色的。所以绿色小部件在那里存在,但不可见。我的问题是为什么绿色部分不可见???以及如何解决?

当然,类的名称很奇怪,因为我试图做其他事情,这个解释简化了这个问题。

编辑:

谢谢@sajas 的帮助!实际上我使用了那个链接Why do do stylesheets not work when subclassing QWidget and using Q_OBJECT? 我使用了写在那里的案例 2,所以我删除了 GraphDataCreator 类中的 Q_OBJECT 宏,它在没有任何其他更改的情况下工作。小部件背景颜色的功能我留下了相同的一切。结果是预期的一半绿色/一半红色。无论如何,我认为我应该在链接中包含宏 Q_Object ,因为它是一个 Qt 类,但没有它确实可以工作。也许Qt中有一个小错误???总而言之,如果您删除 Q_Object 宏,它就可以工作。

标签: c++qt

解决方案


推荐阅读