Я пишу проект 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, он работает.