Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. can't start class in class
Forum Updated to NodeBB v4.3 + New Features

can't start class in class

Scheduled Pinned Locked Moved Solved General and Desktop
qt52d graphics
8 Posts 5 Posters 970 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • timob256T Offline
    timob256T Offline
    timob256
    wrote on last edited by
    #1

    can't start class in class .
    I draw a 2D picture. Created this primitive circle. BUT I can’t call it.

    here is all the code

    tank.pro

    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = tank
    TEMPLATE = app
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    
    SOURCES += \
            main.cpp \
            tank.cpp \
        krug_qt.cpp
    
    HEADERS += \
            tank.h \
        krug_qt.h
    

    krug_qt.h

    #ifndef KRUG_QT_H
    #define KRUG_QT_H
    
    #include <QMainWindow>
    #include <QDebug>
    #include <QPainter>
    #include <QPen>
    #include <QFont>
    #include <QtMath>
    #include <QPointF>
    #include <QResizeEvent>
     #include <QGridLayout>
    
    
    // структура для отрисовки круга
    struct strKryg
    {
        strKryg()
        {
            R = 0.0; kol_toch = 0;
            tocka_1 = 0; tocka_2 = 0;
            X = 0.0; Y = 0.0;
            integerVector.clear();
        }
        float R;                        // радиус
        int kol_toch;                   // колич точек которые будут формировать круг
        int tocka_1;                    // точка выреза начало
        int tocka_2;                    // точка выреза конец
        float X; float Y;               // расположение икса и игрика
    
        QVector<float> integerVector;   // вектор куда кладём точки (Х и У)
    };
    
    class Krug_qt : public QWidget
    {
        Q_OBJECT
    
    public:
        Krug_qt(QWidget *parent = 0);
        ~Krug_qt();
    
        void krygVertexArray();
        void vvodZnach(float R, int kol_toch);
        void vvodZnach(float R, int kol_toch, float X, float Y);
        void vvodZnach(float R, int kol_toch, int tocka_1, int tocka_2, float X, float Y);
    
    
    
    protected:
        void paintEvent(QPaintEvent *event);
        strKryg     _mytKrg;        // структура круга
    };
    
    #endif // KRUG_QT_H
    

    tank.h

    #ifndef TANK_H
    #define TANK_H
    
    #include <QMainWindow>
    #include <QDebug>
    #include <QPainter>
    #include <QPen>
    #include <QFont>
    #include <QFontMetrics>
    #include <QKeyEvent>
    #include <QRegion>
    #include <QPointF>
    #include <QGraphicsView>
    #include <QtMath>
    #include <QRectF>
    #include <QBoxLayout>
    #include <QResizeEvent>
    
    #include "krug_qt.h"
    
    struct texnStructur
    {
        texnStructur() // сразу же заполняем его нулями
        {
            podves_znach_1 = false; podves_znach_2 = false;
    //        m_t_pitch = 0; m_pitch =0;
            for(uint i=0; i < sizeof(m_t_razm)/ sizeof(m_t_razm[0]); i++)
                m_t_razm[i] = 0;
        }
        /***
          m_t_razm[0] - отступ по Х (окно)
          m_t_razm[1] - отступ по У (окно)
          m_t_razm[2] - ширина (окно)
          m_t_razm[3] - высота (окно)
          m_t_razm[4] - ширина танка
          m_t_razm[5] - высота танка
          m_t_razm[6] - диаметр башни
          m_t_razm[7] - ширина и высота квадрада эмулир "подвесы"
          m_t_razm[8] - длинна пушки
          m_t_razm[9] - переменная размера шрифта текста
    
          m_t_razm[10] - m_pitch переменная для положения на градусной ленте
          m_t_razm[11] - razm_shrift переменная размера шрифта текста компаса
        ***/
        float m_t_razm[12];
        bool podves_znach_1; // переменные для значения подвесов
        bool podves_znach_2;
    };
    
    
    class Tank : public QMainWindow
    {
        Q_OBJECT
    
    public:
        Tank(QWidget *parent = 0);
        ~Tank();
    
        QWidget*  centralWidget;
        QGridLayout* layout;
    
        void razmer_tank(int x, int y);
    
    
    protected:
        void paintEvent(QPaintEvent *event);
        void keyPressEvent(QKeyEvent *event);
    
        texnStructur _myTexpr;  // обьявляем его
        strKryg      _mytKrg;    // структура круга
    
    private:
        Krug_qt* krug;
    
    };
    
    #endif // TANK_H
    

    krug_qt.cpp

    #include "krug_qt.h"
    
    Krug_qt::Krug_qt(QWidget *parent)
    {
    
    }
    
    Krug_qt::~Krug_qt()
    {
    
    }
    
    void Krug_qt::krygVertexArray()
    {
        float grad = 360.0/_mytKrg.kol_toch;
        float grad_kol_toch = 0.0;
        // градусы*M_PI/180 = радианы
        int j;
        for (j = 0; j < _mytKrg.kol_toch; ++j){
            _mytKrg.integerVector.append(_mytKrg.R * cos(grad_kol_toch*M_PI/180.0));
            _mytKrg.integerVector.append(_mytKrg.R * sin(grad_kol_toch*M_PI/180.0));
            grad_kol_toch = grad_kol_toch + grad;
        }
    }
    void Krug_qt::vvodZnach(float R, int kol_toch)
    {
        _mytKrg.R = R;
        _mytKrg.kol_toch = kol_toch;
        _mytKrg.tocka_1 = 0;
        _mytKrg.tocka_2 = 0;
        _mytKrg.X = 0.0;
        _mytKrg.Y = 0.0;
    }
    
    void Krug_qt::vvodZnach(float R, int kol_toch, float X, float Y)
    {
        _mytKrg.R = R;
        _mytKrg.kol_toch = kol_toch;
        _mytKrg.tocka_1 = 0;
        _mytKrg.tocka_2 = 0;
        _mytKrg.X = X;
        _mytKrg.Y = Y;
    }
    
    void Krug_qt::vvodZnach(float R, int kol_toch, int tocka_1, int tocka_2, float X, float Y)
    {
        _mytKrg.R = R;
        _mytKrg.kol_toch = kol_toch;
        _mytKrg.tocka_1 = tocka_1;
        _mytKrg.tocka_2 = tocka_2;
        _mytKrg.X = X;
        _mytKrg.Y = Y;
    }
    
    void Krug_qt::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);                                   // Создаём объект отрисовщика
        QPen pen_abris(Qt::black, 2, Qt::SolidLine, Qt::FlatCap); // кисть обрисовки (компаса)
        painter.setRenderHint(QPainter::Antialiasing);            // убираем резкие кубики
        painter.setPen(pen_abris);                                // Устанавливаем кисть обрисовки
        krygVertexArray();                                       // Набираем массив
    
        int i; bool d_t;                                          // используемые переменные
        d_t = true;
        i = 0;                                                    // ТОЧКА ОТРИСОВКИ
        for( ; i<_mytKrg.kol_toch; ++i)
        {
            if(i > _mytKrg.tocka_1)          // угол "вырезания"  начало
            {
                d_t =  false;
                if( i < _mytKrg.tocka_2)      // угол "вырезания" конец
                {
                    _mytKrg.tocka_1 = i*2;
                    d_t = true;
                }
            }
            if(d_t == true)
            {
                // это отдельно все работает полноценный круг
                _mytKrg.tocka_2 =  _mytKrg.tocka_1+1;
                painter.drawPoint(QPointF(_mytKrg.X+_mytKrg.integerVector[_mytKrg.tocka_1],_mytKrg.Y+_mytKrg.integerVector[_mytKrg.tocka_2]));
                _mytKrg.tocka_1 = _mytKrg.tocka_1 +2;
            }
        }
    }
    

    main.cpp

    #include "tank.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Tank w;
        w.show();
    
        return a.exec();
    }
    

    tank.cpp

    #include "tank.h"
    
    Tank::Tank(QWidget *parent)
        : QMainWindow(parent)
    {
        krug = new  Krug_qt(this);
    
        centralWidget = new QWidget;
        setCentralWidget(centralWidget);
    
        layout= new QGridLayout;
        centralWidget->setLayout(layout);
        layout->addWidget(krug);
    }
    
    Tank::~Tank()
    {
    
    }
    
    void Tank::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this); // Создаём объект отрисовщика
        painter.setRenderHint(QPainter::Antialiasing); // убираем резкие кубики
        QPen pen_osn(Qt::black, 2, Qt::SolidLine, Qt::FlatCap); // кисть  для основного тела
        QPen pen_bashn(Qt::black, 4, Qt::SolidLine, Qt::FlatCap);  // кисть для башни
    
        razmer_tank(this->width(), this->height()); // выставляем размеры
    
        painter.setPen(pen_osn);     // Устанавливаем кисть для линий и текста
    
        // рисуем корпус
        painter.drawLine(_myTexpr.m_t_razm[0],  _myTexpr.m_t_razm[1],
                _myTexpr.m_t_razm[0], _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]);
    
        painter.drawLine(_myTexpr.m_t_razm[0],  _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5],
                _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4],_myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]);
    
        painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[1],
                _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]);
    
    
        painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4],         _myTexpr.m_t_razm[1],
                _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2,     _myTexpr.m_t_razm[1]+ _myTexpr.m_t_razm[1]*cos(8));
    
        painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2.0,    _myTexpr.m_t_razm[1]+ _myTexpr.m_t_razm[1]*cos(8),
                _myTexpr.m_t_razm[0],       _myTexpr.m_t_razm[1]);
    
        painter.setPen(pen_bashn);     // Устанавливаем кисть для пушек и обвесов
        // рисуем пушку и башню
        //// Создать свою арку. Именно свою функцию на флоотах
        krug->vvodZnach(_myTexpr.m_t_razm[5], 90, _myTexpr.m_t_razm[2],  _myTexpr.m_t_razm[3]);
        krug->update();
        painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2,
                _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5,
                _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2,
                _myTexpr.m_t_razm[1]-_myTexpr.m_t_razm[1]*0.2);
        // перемещаем позицию отрисовки а также проворачиваем (угол в другой системме кординат)
        // для отрисовки "подвесов"
        painter.translate(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2+(_myTexpr.m_t_razm[7]*1.3),
                _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5);
    
        painter.rotate(45.0);
        painter.drawRect(0,0,_myTexpr.m_t_razm[7],  _myTexpr.m_t_razm[7]);
        painter.rotate(-45.0);
        // возвращаем позицию отрисовки (мировых координат)
        painter.translate(-(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2+(_myTexpr.m_t_razm[7]*1.3)),
                -(_myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5));
    
        painter.translate(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2-(_myTexpr.m_t_razm[7]*1.3),
                _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5);
    
        painter.rotate(45.0);
        painter.drawRect(0,0,_myTexpr.m_t_razm[7],  _myTexpr.m_t_razm[7]);
        painter.rotate(-45.0);
    
        // возвращаем позицию отрисовки (мировых координат)
        painter.translate(-(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2-(_myTexpr.m_t_razm[7]*1.3)),
                -(_myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5));
    
        QString ctroka;                                                 // строка для вывода цифр
        QFont razm_shrift("Areal", _myTexpr.m_t_razm[9], QFont::Light); // свойства шрифта
        painter.setFont(razm_shrift);                                   // устанавливаем размер шрифта
        QFontMetrics stroka_razm = painter.fontMetrics();               // метрика шрифта
        // Вот тут текст
        ctroka = "RPM \n 50";
    
    
        painter.drawText(_myTexpr.m_t_razm[0]*0.96,
                _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.8,
                _myTexpr.m_t_razm[7]*2.0,_myTexpr.m_t_razm[7]*2,0,ctroka,nullptr);
    
        painter.drawText(_myTexpr.m_t_razm[0]*1.12,
                _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.8,
                _myTexpr.m_t_razm[7]*2.0,_myTexpr.m_t_razm[7]*2,0,ctroka,nullptr);
    }
    
    
    void Tank::keyPressEvent(QKeyEvent *event)
    {
        switch (event->key()) {
        case Qt::Key_F:
            _myTexpr.podves_znach_1 = ! _myTexpr.podves_znach_1;
            break;
        case Qt::Key_G:
            _myTexpr.podves_znach_2 = ! _myTexpr.podves_znach_2;
            break;
        default:
            QWidget::keyPressEvent(event);
            break;
        }
    }
    
    void Tank::razmer_tank(int x, int y)
    {
        //    m_t_razm[0] - отступ по Х (окно)
        //    m_t_razm[1] - отступ по У (окно)
        //    m_t_razm[2] - ширина (окно)
        //    m_t_razm[3] - высота (окно)
        //    m_t_razm[4] - ширина танка
        //    m_t_razm[5] - высота танка
        //    m_t_razm[6] - диаметр башни
        //    m_t_razm[7] - ширина и высота квадрада эмулир "подвесы"
        //    m_t_razm[8] - длинна пушки
        //    m_t_razm[8] - размер текста
        //    m_t_razm[9] - переменная размера шрифта текста
    
    
        _myTexpr.m_t_razm[0] = x/1.25;                  // начало (отступ по х) х1
        _myTexpr.m_t_razm[1] = y/3.0;                   // начало (отступ по y) y1
    
        _myTexpr.m_t_razm[2] = x/3.0;                   // ширина (окно)
        _myTexpr.m_t_razm[3] = y/3.0;                   // высота (окно)
    
        _myTexpr.m_t_razm[4] = x/12.0;                  // ширина танка
        _myTexpr.m_t_razm[5] = y/4.5;                   // высота танка
    
        _myTexpr.m_t_razm[6] = (x/12.0+y/12.0)/2.0;     // диаметр башни
        _myTexpr.m_t_razm[7] = (x/10.0+y/10.0)/10.0;    // ширина и высота квадрада эмулир "подвесы"
        _myTexpr.m_t_razm[8] = y/6.0;                   // длинна пушки
    
        _myTexpr.m_t_razm[9] = (y+x)/200.0;              // размер текста
    }
    

    I am calling the Krug_qt class. But I can't change its location and also pull it out several times

    jsulmJ 1 Reply Last reply
    0
    • M Offline
      M Offline
      mpergand
      wrote on last edited by
      #8
      #include "krug_qt.h"
      
      Krug_qt::Krug_qt(QWidget *parent)
      {
      
      }
      

      Should be:

      Krug_qt::Krug_qt(QWidget *parent) : QWidget(parent)
      
      1 Reply Last reply
      5
      • timob256T timob256

        can't start class in class .
        I draw a 2D picture. Created this primitive circle. BUT I can’t call it.

        here is all the code

        tank.pro

        QT       += core gui
        
        greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
        
        TARGET = tank
        TEMPLATE = app
        
        # The following define makes your compiler emit warnings if you use
        # any feature of Qt which has been marked as deprecated (the exact warnings
        # depend on your compiler). Please consult the documentation of the
        # deprecated API in order to know how to port your code away from it.
        DEFINES += QT_DEPRECATED_WARNINGS
        
        # You can also make your code fail to compile if you use deprecated APIs.
        # In order to do so, uncomment the following line.
        # You can also select to disable deprecated APIs only up to a certain version of Qt.
        #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
        
        
        SOURCES += \
                main.cpp \
                tank.cpp \
            krug_qt.cpp
        
        HEADERS += \
                tank.h \
            krug_qt.h
        

        krug_qt.h

        #ifndef KRUG_QT_H
        #define KRUG_QT_H
        
        #include <QMainWindow>
        #include <QDebug>
        #include <QPainter>
        #include <QPen>
        #include <QFont>
        #include <QtMath>
        #include <QPointF>
        #include <QResizeEvent>
         #include <QGridLayout>
        
        
        // структура для отрисовки круга
        struct strKryg
        {
            strKryg()
            {
                R = 0.0; kol_toch = 0;
                tocka_1 = 0; tocka_2 = 0;
                X = 0.0; Y = 0.0;
                integerVector.clear();
            }
            float R;                        // радиус
            int kol_toch;                   // колич точек которые будут формировать круг
            int tocka_1;                    // точка выреза начало
            int tocka_2;                    // точка выреза конец
            float X; float Y;               // расположение икса и игрика
        
            QVector<float> integerVector;   // вектор куда кладём точки (Х и У)
        };
        
        class Krug_qt : public QWidget
        {
            Q_OBJECT
        
        public:
            Krug_qt(QWidget *parent = 0);
            ~Krug_qt();
        
            void krygVertexArray();
            void vvodZnach(float R, int kol_toch);
            void vvodZnach(float R, int kol_toch, float X, float Y);
            void vvodZnach(float R, int kol_toch, int tocka_1, int tocka_2, float X, float Y);
        
        
        
        protected:
            void paintEvent(QPaintEvent *event);
            strKryg     _mytKrg;        // структура круга
        };
        
        #endif // KRUG_QT_H
        

        tank.h

        #ifndef TANK_H
        #define TANK_H
        
        #include <QMainWindow>
        #include <QDebug>
        #include <QPainter>
        #include <QPen>
        #include <QFont>
        #include <QFontMetrics>
        #include <QKeyEvent>
        #include <QRegion>
        #include <QPointF>
        #include <QGraphicsView>
        #include <QtMath>
        #include <QRectF>
        #include <QBoxLayout>
        #include <QResizeEvent>
        
        #include "krug_qt.h"
        
        struct texnStructur
        {
            texnStructur() // сразу же заполняем его нулями
            {
                podves_znach_1 = false; podves_znach_2 = false;
        //        m_t_pitch = 0; m_pitch =0;
                for(uint i=0; i < sizeof(m_t_razm)/ sizeof(m_t_razm[0]); i++)
                    m_t_razm[i] = 0;
            }
            /***
              m_t_razm[0] - отступ по Х (окно)
              m_t_razm[1] - отступ по У (окно)
              m_t_razm[2] - ширина (окно)
              m_t_razm[3] - высота (окно)
              m_t_razm[4] - ширина танка
              m_t_razm[5] - высота танка
              m_t_razm[6] - диаметр башни
              m_t_razm[7] - ширина и высота квадрада эмулир "подвесы"
              m_t_razm[8] - длинна пушки
              m_t_razm[9] - переменная размера шрифта текста
        
              m_t_razm[10] - m_pitch переменная для положения на градусной ленте
              m_t_razm[11] - razm_shrift переменная размера шрифта текста компаса
            ***/
            float m_t_razm[12];
            bool podves_znach_1; // переменные для значения подвесов
            bool podves_znach_2;
        };
        
        
        class Tank : public QMainWindow
        {
            Q_OBJECT
        
        public:
            Tank(QWidget *parent = 0);
            ~Tank();
        
            QWidget*  centralWidget;
            QGridLayout* layout;
        
            void razmer_tank(int x, int y);
        
        
        protected:
            void paintEvent(QPaintEvent *event);
            void keyPressEvent(QKeyEvent *event);
        
            texnStructur _myTexpr;  // обьявляем его
            strKryg      _mytKrg;    // структура круга
        
        private:
            Krug_qt* krug;
        
        };
        
        #endif // TANK_H
        

        krug_qt.cpp

        #include "krug_qt.h"
        
        Krug_qt::Krug_qt(QWidget *parent)
        {
        
        }
        
        Krug_qt::~Krug_qt()
        {
        
        }
        
        void Krug_qt::krygVertexArray()
        {
            float grad = 360.0/_mytKrg.kol_toch;
            float grad_kol_toch = 0.0;
            // градусы*M_PI/180 = радианы
            int j;
            for (j = 0; j < _mytKrg.kol_toch; ++j){
                _mytKrg.integerVector.append(_mytKrg.R * cos(grad_kol_toch*M_PI/180.0));
                _mytKrg.integerVector.append(_mytKrg.R * sin(grad_kol_toch*M_PI/180.0));
                grad_kol_toch = grad_kol_toch + grad;
            }
        }
        void Krug_qt::vvodZnach(float R, int kol_toch)
        {
            _mytKrg.R = R;
            _mytKrg.kol_toch = kol_toch;
            _mytKrg.tocka_1 = 0;
            _mytKrg.tocka_2 = 0;
            _mytKrg.X = 0.0;
            _mytKrg.Y = 0.0;
        }
        
        void Krug_qt::vvodZnach(float R, int kol_toch, float X, float Y)
        {
            _mytKrg.R = R;
            _mytKrg.kol_toch = kol_toch;
            _mytKrg.tocka_1 = 0;
            _mytKrg.tocka_2 = 0;
            _mytKrg.X = X;
            _mytKrg.Y = Y;
        }
        
        void Krug_qt::vvodZnach(float R, int kol_toch, int tocka_1, int tocka_2, float X, float Y)
        {
            _mytKrg.R = R;
            _mytKrg.kol_toch = kol_toch;
            _mytKrg.tocka_1 = tocka_1;
            _mytKrg.tocka_2 = tocka_2;
            _mytKrg.X = X;
            _mytKrg.Y = Y;
        }
        
        void Krug_qt::paintEvent(QPaintEvent *event)
        {
            QPainter painter(this);                                   // Создаём объект отрисовщика
            QPen pen_abris(Qt::black, 2, Qt::SolidLine, Qt::FlatCap); // кисть обрисовки (компаса)
            painter.setRenderHint(QPainter::Antialiasing);            // убираем резкие кубики
            painter.setPen(pen_abris);                                // Устанавливаем кисть обрисовки
            krygVertexArray();                                       // Набираем массив
        
            int i; bool d_t;                                          // используемые переменные
            d_t = true;
            i = 0;                                                    // ТОЧКА ОТРИСОВКИ
            for( ; i<_mytKrg.kol_toch; ++i)
            {
                if(i > _mytKrg.tocka_1)          // угол "вырезания"  начало
                {
                    d_t =  false;
                    if( i < _mytKrg.tocka_2)      // угол "вырезания" конец
                    {
                        _mytKrg.tocka_1 = i*2;
                        d_t = true;
                    }
                }
                if(d_t == true)
                {
                    // это отдельно все работает полноценный круг
                    _mytKrg.tocka_2 =  _mytKrg.tocka_1+1;
                    painter.drawPoint(QPointF(_mytKrg.X+_mytKrg.integerVector[_mytKrg.tocka_1],_mytKrg.Y+_mytKrg.integerVector[_mytKrg.tocka_2]));
                    _mytKrg.tocka_1 = _mytKrg.tocka_1 +2;
                }
            }
        }
        

        main.cpp

        #include "tank.h"
        #include <QApplication>
        
        int main(int argc, char *argv[])
        {
            QApplication a(argc, argv);
            Tank w;
            w.show();
        
            return a.exec();
        }
        

        tank.cpp

        #include "tank.h"
        
        Tank::Tank(QWidget *parent)
            : QMainWindow(parent)
        {
            krug = new  Krug_qt(this);
        
            centralWidget = new QWidget;
            setCentralWidget(centralWidget);
        
            layout= new QGridLayout;
            centralWidget->setLayout(layout);
            layout->addWidget(krug);
        }
        
        Tank::~Tank()
        {
        
        }
        
        void Tank::paintEvent(QPaintEvent *event)
        {
            QPainter painter(this); // Создаём объект отрисовщика
            painter.setRenderHint(QPainter::Antialiasing); // убираем резкие кубики
            QPen pen_osn(Qt::black, 2, Qt::SolidLine, Qt::FlatCap); // кисть  для основного тела
            QPen pen_bashn(Qt::black, 4, Qt::SolidLine, Qt::FlatCap);  // кисть для башни
        
            razmer_tank(this->width(), this->height()); // выставляем размеры
        
            painter.setPen(pen_osn);     // Устанавливаем кисть для линий и текста
        
            // рисуем корпус
            painter.drawLine(_myTexpr.m_t_razm[0],  _myTexpr.m_t_razm[1],
                    _myTexpr.m_t_razm[0], _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]);
        
            painter.drawLine(_myTexpr.m_t_razm[0],  _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5],
                    _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4],_myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]);
        
            painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[1],
                    _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]);
        
        
            painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4],         _myTexpr.m_t_razm[1],
                    _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2,     _myTexpr.m_t_razm[1]+ _myTexpr.m_t_razm[1]*cos(8));
        
            painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2.0,    _myTexpr.m_t_razm[1]+ _myTexpr.m_t_razm[1]*cos(8),
                    _myTexpr.m_t_razm[0],       _myTexpr.m_t_razm[1]);
        
            painter.setPen(pen_bashn);     // Устанавливаем кисть для пушек и обвесов
            // рисуем пушку и башню
            //// Создать свою арку. Именно свою функцию на флоотах
            krug->vvodZnach(_myTexpr.m_t_razm[5], 90, _myTexpr.m_t_razm[2],  _myTexpr.m_t_razm[3]);
            krug->update();
            painter.drawLine(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2,
                    _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5,
                    _myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2,
                    _myTexpr.m_t_razm[1]-_myTexpr.m_t_razm[1]*0.2);
            // перемещаем позицию отрисовки а также проворачиваем (угол в другой системме кординат)
            // для отрисовки "подвесов"
            painter.translate(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2+(_myTexpr.m_t_razm[7]*1.3),
                    _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5);
        
            painter.rotate(45.0);
            painter.drawRect(0,0,_myTexpr.m_t_razm[7],  _myTexpr.m_t_razm[7]);
            painter.rotate(-45.0);
            // возвращаем позицию отрисовки (мировых координат)
            painter.translate(-(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2+(_myTexpr.m_t_razm[7]*1.3)),
                    -(_myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5));
        
            painter.translate(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2-(_myTexpr.m_t_razm[7]*1.3),
                    _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5);
        
            painter.rotate(45.0);
            painter.drawRect(0,0,_myTexpr.m_t_razm[7],  _myTexpr.m_t_razm[7]);
            painter.rotate(-45.0);
        
            // возвращаем позицию отрисовки (мировых координат)
            painter.translate(-(_myTexpr.m_t_razm[0]+_myTexpr.m_t_razm[4]/2-(_myTexpr.m_t_razm[7]*1.3)),
                    -(_myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.2-_myTexpr.m_t_razm[6]/2.5));
        
            QString ctroka;                                                 // строка для вывода цифр
            QFont razm_shrift("Areal", _myTexpr.m_t_razm[9], QFont::Light); // свойства шрифта
            painter.setFont(razm_shrift);                                   // устанавливаем размер шрифта
            QFontMetrics stroka_razm = painter.fontMetrics();               // метрика шрифта
            // Вот тут текст
            ctroka = "RPM \n 50";
        
        
            painter.drawText(_myTexpr.m_t_razm[0]*0.96,
                    _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.8,
                    _myTexpr.m_t_razm[7]*2.0,_myTexpr.m_t_razm[7]*2,0,ctroka,nullptr);
        
            painter.drawText(_myTexpr.m_t_razm[0]*1.12,
                    _myTexpr.m_t_razm[1]+_myTexpr.m_t_razm[5]/3.8,
                    _myTexpr.m_t_razm[7]*2.0,_myTexpr.m_t_razm[7]*2,0,ctroka,nullptr);
        }
        
        
        void Tank::keyPressEvent(QKeyEvent *event)
        {
            switch (event->key()) {
            case Qt::Key_F:
                _myTexpr.podves_znach_1 = ! _myTexpr.podves_znach_1;
                break;
            case Qt::Key_G:
                _myTexpr.podves_znach_2 = ! _myTexpr.podves_znach_2;
                break;
            default:
                QWidget::keyPressEvent(event);
                break;
            }
        }
        
        void Tank::razmer_tank(int x, int y)
        {
            //    m_t_razm[0] - отступ по Х (окно)
            //    m_t_razm[1] - отступ по У (окно)
            //    m_t_razm[2] - ширина (окно)
            //    m_t_razm[3] - высота (окно)
            //    m_t_razm[4] - ширина танка
            //    m_t_razm[5] - высота танка
            //    m_t_razm[6] - диаметр башни
            //    m_t_razm[7] - ширина и высота квадрада эмулир "подвесы"
            //    m_t_razm[8] - длинна пушки
            //    m_t_razm[8] - размер текста
            //    m_t_razm[9] - переменная размера шрифта текста
        
        
            _myTexpr.m_t_razm[0] = x/1.25;                  // начало (отступ по х) х1
            _myTexpr.m_t_razm[1] = y/3.0;                   // начало (отступ по y) y1
        
            _myTexpr.m_t_razm[2] = x/3.0;                   // ширина (окно)
            _myTexpr.m_t_razm[3] = y/3.0;                   // высота (окно)
        
            _myTexpr.m_t_razm[4] = x/12.0;                  // ширина танка
            _myTexpr.m_t_razm[5] = y/4.5;                   // высота танка
        
            _myTexpr.m_t_razm[6] = (x/12.0+y/12.0)/2.0;     // диаметр башни
            _myTexpr.m_t_razm[7] = (x/10.0+y/10.0)/10.0;    // ширина и высота квадрада эмулир "подвесы"
            _myTexpr.m_t_razm[8] = y/6.0;                   // длинна пушки
        
            _myTexpr.m_t_razm[9] = (y+x)/200.0;              // размер текста
        }
        

        I am calling the Krug_qt class. But I can't change its location and also pull it out several times

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #2

        @timob256 said in can't start class in class:

        But I can't change its location and also pull it out several times

        I really have no idea what this means.
        Can you please explain better?
        What does "can't start class in class" mean?
        What EXACTLY does not work?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        timob256T 1 Reply Last reply
        0
        • timob256T Offline
          timob256T Offline
          timob256
          wrote on last edited by
          #3
          krug->vvodZnach(_myTexpr.m_t_razm[5], 90, _myTexpr.m_t_razm[2],  _myTexpr.m_t_razm[3]);
              krug->update();
          

          this not work .

          class Tank does not cause class Krug_qt

          1 Reply Last reply
          0
          • jsulmJ jsulm

            @timob256 said in can't start class in class:

            But I can't change its location and also pull it out several times

            I really have no idea what this means.
            Can you please explain better?
            What does "can't start class in class" mean?
            What EXACTLY does not work?

            timob256T Offline
            timob256T Offline
            timob256
            wrote on last edited by
            #4

            @jsulm I cannot call the krug_qt class in the tank class

            JonBJ 1 Reply Last reply
            0
            • timob256T timob256

              @jsulm I cannot call the krug_qt class in the tank class

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by
              #5

              @timob256 said in can't start class in class:

              I cannot call the krug_qt class in the tank class

              If you want to access Krug_qt from Tank then tank.cpp or tank.h needs #include "krug_qt.h". Is that what you are asking about?

              Pl45m4P 1 Reply Last reply
              0
              • JonBJ JonB

                @timob256 said in can't start class in class:

                I cannot call the krug_qt class in the tank class

                If you want to access Krug_qt from Tank then tank.cpp or tank.h needs #include "krug_qt.h". Is that what you are asking about?

                Pl45m4P Offline
                Pl45m4P Offline
                Pl45m4
                wrote on last edited by Pl45m4
                #6

                @JonB said in can't start class in class:

                tank.h needs #include "krug_qt.h"

                He has, as far as I can see....

                @timob256 said in can't start class in class:

                I cannot call the krug_qt class in the tank class

                What do you mean by "call"? Does it mean the values dont update when you call this function from tank class?!

                In tank.cpp you create an instance of krug_qt

                #include "tank.h"
                
                Tank::Tank(QWidget *parent)
                    : QMainWindow(parent)
                {
                    krug = new  Krug_qt(this);
                

                So this should work, right?!


                If debugging is the process of removing software bugs, then programming must be the process of putting them in.

                ~E. W. Dijkstra

                timob256T 1 Reply Last reply
                0
                • Pl45m4P Pl45m4

                  @JonB said in can't start class in class:

                  tank.h needs #include "krug_qt.h"

                  He has, as far as I can see....

                  @timob256 said in can't start class in class:

                  I cannot call the krug_qt class in the tank class

                  What do you mean by "call"? Does it mean the values dont update when you call this function from tank class?!

                  In tank.cpp you create an instance of krug_qt

                  #include "tank.h"
                  
                  Tank::Tank(QWidget *parent)
                      : QMainWindow(parent)
                  {
                      krug = new  Krug_qt(this);
                  

                  So this should work, right?!

                  timob256T Offline
                  timob256T Offline
                  timob256
                  wrote on last edited by
                  #7

                  @Pl45m4 @JonB

                  this shit #include "krug_qt.h" chek

                  I want Screenshot_20211027_174721.png
                  but this shit not wok. but i work in books ;_; (klass in klass)

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mpergand
                    wrote on last edited by
                    #8
                    #include "krug_qt.h"
                    
                    Krug_qt::Krug_qt(QWidget *parent)
                    {
                    
                    }
                    

                    Should be:

                    Krug_qt::Krug_qt(QWidget *parent) : QWidget(parent)
                    
                    1 Reply Last reply
                    5

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved