Виджет Qt / C ++ внутри виджета не появляется - PullRequest
0 голосов
/ 15 октября 2019

Я пишу проект Qt / C ++ и создал свой mainwindow.ui в QtDesigner. Я поместил в 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);
}

Я хотел быть целым виджетом зеленого цвета, но он не появился, поэтому я поместил там test_widget с красным фоном, в результате чего он наполовину ничто/ наполовину красный. Таким образом, зеленый виджет существует там, но его не видно. И мой вопрос, почему зеленая часть не видна ??? И как ее решить?

Конечно, имена классов странные, потому что я пытался сделать что-то еще, и это объяснение упрощает эту проблему.

РЕДАКТИРОВАТЬ:

thx @sajasдля помощи! На самом деле я использовал эту ссылку Почему таблицы стилей не работают при создании подкласса QWidget и использовании Q_OBJECT? , и я использовал записанный там случай 2, поэтому я удалил макрос Q_OBJECT в классе GraphDataCreator, и он работал без каких-либо других изменений. Функция для цвета фона виджета я оставил прежним и все остальное. Результат, как и ожидалось, наполовину зеленый / наполовину красный. В любом случае, я думаю, что я должен включить макрос Q_Object, как написано в ссылке, потому что это класс Qt, но он работает без него. Может быть, есть небольшая ошибка в Qt ??? Подводя итог, если вы удалите макрос Q_Object, он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...