доброго времени суток уважаемые знатоки, пол дня не могу решить, на первый взгляд, идиотскую проблемму. Хотел сделать прямоугольный виджет на главном окне. Сделал класс А, унаследованный от QWidget и класс B, унаследованный от QMainWindow. Объявил переменную типа А в классе В, инициализировал в конструкторе, сделал переменную производной от "centralwidget" класса В и покрасил её при помощи "setStyleSheet". Виджет класса А на окне не отобразился. Сделал переменную А самостоятельным окном - окно появилось нужного цвета. Для проверки сделал в классе В ещё одну переменную, но уже типа QWidget, проделал с ней все то же самое, что и с предыдущей - и все получилось. Не могли бы вы подсказать, в чем я ошибся. Код прилогается
Класс А
#ifndef MAINTOOLBAR_H
#define MAINTOOLBAR_H
#include "hc_qt_disp.h"
#include "properties.h" //визуальные настройки
class MyToolbar;
class MainToolbar : public QWidget
{
Q_OBJECT
Q_PROPERTY( int wdg_name READ Name WRITE Rename )
public:
MainToolbar( QWidget *parent );
virtual ~MainToolbar();
int Name() const { return wdg_name; }
void Rename( int name ) { wdg_name = name; }
..........
};
#endif // MAINTOOLBAR_H
конструктор класса А
MainToolbar::MainToolbar( QWidget *parent ) : QWidget(parent)
{}
класс В
#ifndef MAINRADAR_H
#define MAINRADAR_H
#include "hc_qt_disp.h"
#include "MainToolbar.h"
class MainRadar : public QMainWindow
{
Q_OBJECT
public:
MainRadar();
~MainRadar();
private:
QWidget *Test_widget;
QWidget *centralwidget;
QStatusBar *statusbar;
QHBoxLayout *TB_layout;
QSpacerItem *spacerItem;
MainToolbar * upper_toolbar;
void SetupUi( QMainWindow * main_window );
void RetranslateUi( QMainWindow *main_window );
..............
};
#endif // MAINRADAR_H
конструктор класса В
MainRadar::MainRadar()
{
SetupUi(this);
}
void MainRadar::SetupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
upper_toolbar = new MainToolbar();
upper_toolbar->setGeometry(QRect(0, 0, 800, 600));
upper_toolbar->setStyleSheet("background-color: red");
..................
}
Цитата(Young @ 10.10.2013, 16:51)

доброго времени суток уважаемые знатоки, пол дня не могу решить, на первый взгляд, идиотскую проблемму. Хотел сделать прямоугольный виджет на главном окне. Сделал класс А, унаследованный от QWidget и класс B, унаследованный от QMainWindow. Объявил переменную типа А в классе В, инициализировал в конструкторе, сделал переменную производной от "centralwidget" класса В и покрасил её при помощи "setStyleSheet". Виджет класса А на окне не отобразился. Сделал переменную А самостоятельным окном - окно появилось нужного цвета. Для проверки сделал в классе В ещё одну переменную, но уже типа QWidget, проделал с ней все то же самое, что и с предыдущей - и все получилось. Не могли бы вы подсказать, в чем я ошибся. Код прилогается
Класс А
#ifndef MAINTOOLBAR_H
#define MAINTOOLBAR_H
#include "hc_qt_disp.h"
#include "properties.h" //визуальные настройки
class MyToolbar;
class MainToolbar : public QWidget
{
Q_OBJECT
Q_PROPERTY( int wdg_name READ Name WRITE Rename )
public:
MainToolbar( QWidget *parent );
virtual ~MainToolbar();
int Name() const { return wdg_name; }
void Rename( int name ) { wdg_name = name; }
..........
};
#endif // MAINTOOLBAR_H
конструктор класса А
MainToolbar::MainToolbar( QWidget *parent ) : QWidget(parent)
{}
класс В
#ifndef MAINRADAR_H
#define MAINRADAR_H
#include "hc_qt_disp.h"
#include "MainToolbar.h"
class MainRadar : public QMainWindow
{
Q_OBJECT
public:
MainRadar();
~MainRadar();
private:
QWidget *Test_widget;
QWidget *centralwidget;
QStatusBar *statusbar;
QHBoxLayout *TB_layout;
QSpacerItem *spacerItem;
MainToolbar * upper_toolbar;
void SetupUi( QMainWindow * main_window );
void RetranslateUi( QMainWindow *main_window );
..............
};
#endif // MAINRADAR_H
конструктор класса В
MainRadar::MainRadar()
{
SetupUi(this);
}
void MainRadar::SetupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
upper_toolbar = new MainToolbar(centralwidget);
upper_toolbar->setGeometry(QRect(0, 0, 800, 600));
upper_toolbar->setStyleSheet("background-color: red");
..................
}