как присоединить класс в 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);
}

