crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Young
  опции профиля:
сообщение 10.10.2013, 15:53
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 10.10.2013
Пользователь №: 3952

Спасибо сказали: 0 раз(а)




Репутация:   0  


доброго времени суток уважаемые знатоки, пол дня не могу решить, на первый взгляд, идиотскую проблемму. Хотел сделать прямоугольный виджет на главном окне. Сделал класс А, унаследованный от 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 )       //объявление свойства wdg_name

    public:

        MainToolbar( QWidget *parent );
        virtual ~MainToolbar();

        //свойство wdg_name
        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;       //!!!!! Test string !!!!!

        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"));

//  !!! проверочный код, который работает !!!
//        Test_widget = new QWidget(centralwidget);
//        Test_widget->setGeometry(QRect(0, 0, 800, 600));
//        Test_widget->setStyleSheet("background-color: yellow");

    upper_toolbar = new MainToolbar();
    upper_toolbar->setGeometry(QRect(0, 0, 800, 600));
    upper_toolbar->setStyleSheet("background-color: red");

    ..................


} // setupUi


Цитата(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 )       //объявление свойства wdg_name

    public:

        MainToolbar( QWidget *parent );
        virtual ~MainToolbar();

        //свойство wdg_name
        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;       //!!!!! Test string !!!!!

        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"));

//  !!! проверочный код, который работает !!!
//        Test_widget = new QWidget(centralwidget);
//        Test_widget->setGeometry(QRect(0, 0, 800, 600));
//        Test_widget->setStyleSheet("background-color: yellow");

    upper_toolbar = new MainToolbar(centralwidget);
    upper_toolbar->setGeometry(QRect(0, 0, 800, 600));
    upper_toolbar->setStyleSheet("background-color: red");

    ..................


} // setupUi

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Steklova Olga
  опции профиля:
сообщение 11.10.2013, 12:44
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Смотри сюда:
tmpTest.pro
QT       += core gui
TARGET = tmpTest
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow1.cpp
HEADERS  += mainwindow1.h
main.cpp
#include <QtGui/QApplication>
#include "mainwindow1.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow1 w;
    w.show();

    return a.exec();
}
mainwindow1.h
#ifndef MAINWINDOW1_H
#define MAINWINDOW1_H

#include <QtGui/QMainWindow>

class MainWindow1 : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow1(QWidget *parent = 0);
    ~MainWindow1();
};

#endif // MAINWINDOW1_H
mainwindow1.cpp
#include "mainwindow1.h"

#include <QtGui/QPushButton>
#include <QtGui/QHBoxLayout>

MainWindow1::MainWindow1(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(QRect(100, 100, 500, 300));

    QPushButton *btn1 = new QPushButton("btn1");
    QPushButton *btn2 = new QPushButton("btn2");
    QPushButton *btn3 = new QPushButton("btn3");
    QWidget *widget1 = new QWidget();
    QWidget *widget2 = new QWidget();

    QHBoxLayout *hLayout = new QHBoxLayout();
    hLayout->addWidget(btn1);
    hLayout->addWidget(widget1);
    hLayout->addWidget(btn2);
    hLayout->addWidget(widget2);
    hLayout->addWidget(btn3);

    btn2->setStyleSheet("background-color: red");
    widget2->setStyleSheet("background-color: lime");

    QWidget *mainWidget = new QWidget();
    mainWidget->setLayout(hLayout);

    setCentralWidget(mainWidget);
}

MainWindow1::~MainWindow1()
{

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 23.7.2025, 9:14