Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

как присоединить класс в 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 то файл прекреплённый к проетку то бирюзовый квадрат прекрастно бы отобразился а так прям грустно

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



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

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

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



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

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

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


Log in to reply