как присоединить класс в qt проект без ui файла?

создал класс который добавил к проекту без ui. Не получается верно его вызвать.

класс который встраиваю:

#ifndef OKNONASTROEK_H
#define OKNONASTROEK_H

#include <QMainWindow>
#include <QDebug>
#include <QPainter>
#include <QPen>
#include <QFont>
#include <QFontMetrics>
#include <QKeyEvent>
#include <QRegion>
#include <QPointF>
#include <QGraphicsView>

namespace Widgets {
struct texnStructur
{
    texnStructur() // сразу же заполняем его нулями
    {
        for(uint i=0; i < sizeof(m_t_razm)/ sizeof(m_t_razm[0]); i++)
            m_t_razm[i] = 0;
    }
    float m_t_razm[12];
};


class oknonastroek : public QWidget
{
    Q_OBJECT

public:
    oknonastroek(QWidget *parent = 0);
    ~oknonastroek();

    void razmer_element(int x, int y);


protected:
    void paintEvent(QPaintEvent *event);


    texnStructur _myTexpr;

};
}
#endif // OKNONASTROEK_H

вот "тело" класса

#include "oknonastroek.h"

Widgets::oknonastroek::oknonastroek(QWidget *parent)
    : QWidget(parent)
{
}

Widgets::oknonastroek::~oknonastroek()
{

}

void Widgets::oknonastroek::razmer_element(int x, int y)
{
    // тут задай размер  линий
    _myTexpr.m_t_razm[0] = x/60.0;  // отступ по Х
    _myTexpr.m_t_razm[1] = y/4.0 + y/60.0;  // отступ по У
    _myTexpr.m_t_razm[2] = x/3.0; // ширина (окно) x
    _myTexpr.m_t_razm[3] = y/1.4;  //  высота (окно) y
}

void Widgets::oknonastroek::paintEvent(QPaintEvent *event)
{
    QPainter painter(this); // Создаём объект отрисовщика
    QBrush bgfon(QColor(180,220,220),Qt::SolidPattern); // устанавливаем цвет фона и тип заливки (с фоном без фона и тип заливки)
    painter.setPen(Qt::NoPen);                      // кисть обрисовки в влучае если она не нужна

    painter.setRenderHint(QPainter::Antialiasing); // убираем резкие кубики
    painter.setBrush(bgfon); // задаём цвет фона
    razmer_element(this->width(), this->height());  // выставляем размеры элемента

    painter.drawRect(_myTexpr.m_t_razm[0], _myTexpr.m_t_razm[1], _myTexpr.m_t_razm[2], _myTexpr.m_t_razm[3]);
}

А вот основной класс:

#ifndef OKNOWIBORA_H
#define OKNOWIBORA_H

#include <QMainWindow>
#include <QDebug>
#include <QPainter>
#include <QPen>
#include <QFont>
#include <QFontMetrics>
#include <QKeyEvent>
#include <QRegion>
#include <QPointF>
#include <QGraphicsView>

#include "oknonastroek.h"



struct texnStructur
{
    texnStructur() // сразу же заполняем его нулями
    {
        for(uint i=0; i < sizeof(m_t_razm)/ sizeof(m_t_razm[0]); i++)
            m_t_razm[i] = 0;
    }
    
    float m_t_razm[12];
};

class OknoWibora : public QMainWindow
{
    Q_OBJECT

public:
    OknoWibora(QWidget *parent = 0);
    ~OknoWibora();

    void razmer_element(int x, int y);


protected:
    void paintEvent(QPaintEvent *event);
    Widgets::oknonastroek* oknonastr;

    texnStructur _myTexpr;
};

#endif // OKNOWIBORA_H

"тело" основного класса

#include "oknowibora.h"

OknoWibora::OknoWibora(QWidget *parent)
    : QMainWindow(parent)
{
    oknonastr = new Widgets::oknonastroek(this);
}

OknoWibora::~OknoWibora()
{

}

void OknoWibora::paintEvent(QPaintEvent *event)
{
    QPainter painter(this); // Создаём объект отрисовщика
    QBrush bgfon(QColor(220,180,220),Qt::SolidPattern); // устанавливаем цвет фона и тип заливки (с фоном без фона и тип заливки)

    QPen pen_abris(Qt::black, 2, Qt::SolidLine, Qt::FlatCap); // кисть обрисовки (компаса)
    QPen pen_line(Qt::black, 2, Qt::SolidLine, Qt::FlatCap);  // кисть для линий и текста

    painter.setRenderHint(QPainter::Antialiasing); // убираем резкие кубики
    painter.setBrush(bgfon); // задаём цвет фона

    painter.setPen(Qt::NoPen);                      // кисть обрисовки в влучае если она не нужна
    razmer_element(this->width(), this->height());  // выставляем размеры
    painter.drawRect(_myTexpr.m_t_razm[0], _myTexpr.m_t_razm[1], _myTexpr.m_t_razm[2], _myTexpr.m_t_razm[3]);

    oknonastr->update();

    qDebug() <<"rere1";
}
void OknoWibora::razmer_element(int x, int y)
{
    // тут задай размер  линий
    _myTexpr.m_t_razm[0] = x/60.0;  // отступ по Х
    _myTexpr.m_t_razm[1] = y/60.0;  // отступ по У
    _myTexpr.m_t_razm[2] = x-(x/60.0)*2.0; // ширина (окно) x
    _myTexpr.m_t_razm[3] = y/4.0;  //  высота (окно) y
            qDebug() << "x: " << x  << " _myTexpr.m_t_razm[0]: "<< _myTexpr.m_t_razm[0];
            qDebug() << "x: " << x  << " _myTexpr.m_t_razm[1]: "<< _myTexpr.m_t_razm[1];
            qDebug() << "y: " << y  << " _myTexpr.m_t_razm[2]: "<< _myTexpr.m_t_razm[2];
            qDebug() << "y: " << y  << " _myTexpr.m_t_razm[3]: "<< _myTexpr.m_t_razm[3];
}

вот объявление

  oknonastr = new Widgets::oknonastroek(this);

вот обновление

     oknonastr->update();

если бы был ui то файл прекреплённый к проетку то бирюзовый квадрат прекрастно бы отобразился а так прям грустно

введите сюда описание изображения


Ответы (1 шт):

Автор решения: timob256

вот так вот заработало

OknoWibora::OknoWibora(QWidget *parent)
    : QMainWindow(parent)
{
    oknonastr = new Widgets::OknoNastroek(this);

    QWidget* centralWidget= new QWidget;
    setCentralWidget(centralWidget);
    QBoxLayout* layout= new QVBoxLayout;
    centralWidget->setLayout(layout);
    layout->addWidget(oknonastr);
 }

введите сюда описание изображения

→ Ссылка