Russian Qt Forum
Января 18, 2025, 13:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: подключение класса, наследование  (Прочитано 6995 раз)
Firefox
Гость
« : Июня 11, 2010, 13:22 »

Здравствуйте. помогите решить такую задачку: есть основной класс с формой( с использованием qt), к нему хочу подключить другой класс. в другом классе создаётся фрейм , на котором рисуются определённые графики.Второй класс унаследовала от QWidget и подключила к нему хидер формы. всё ничего, но при нажатии на кнопку должен открыться новый фрейм, а вместо этого открывается ещё один экземпляр программы с фреймом этим.
вот код программы:
основной класс .cpp
main_class::main_class(QWidget *parent, Qt::WFlags flags,char *argv[])
   : QWidget(parent, flags)
{
   
   ui.setupUi(this);
   ....
tex= new Texnology;

}
// слот на кнопку по которой открывается фрейм новый(должно происходить обращение к фунции второго класса)
void main_class::on_bn_TEXN_clicked()
{
   tex->main_func();
}
 

основной класс .h

#include "Texnology.h"
#include "ui_main_class.h"
class main_class : public QWidget
{
   Q_OBJECT

public:
   main_class(QWidget *parent = 0, Qt::WFlags flags = 0,char *argv[]='\0');
   ~main_class();
.....
private:
   Ui::main_classClass ui;
        void keyPressEvent(QKeyEvent * ev);
   bool eventFilter(QObject *obj, QEvent *event);
   XchangeSystemClient *pClient_dev;
       Texnology *tex;

подключаемый класс .h

#include "ui_main_class.h"
#include <QtGui>
#include <QFile>
#include <QImage>
#include <QPainter>
#include <QFrame>
#include"Include/Driver.h"
#include "Include/palette.h"

#define PI_180   180.f/3.141593
class Texnology: public QWidget
{
   Q_OBJECT

   public:
      Texnology(QWidget *parent = 0, Qt::WFlags flags = 0);
      ~Texnology();
      
      QFrame *fr_Verh,*fr_Niz_ATGS_A,*fr_Niz,*fr_3,*frame_texnologia_grafika;
      QLineEdit *edit_P,*edit_KU,*edit_Dist;
      QImage *img,*img1,*img2,*img3,*img4;
      QPainter *paint,*paint1;
      QTimer *time_draw;
      void draw_atgs_a();
      void draw_atgs();
      void draw_KS();
      int vodopad_KS(int KS);
      int vodopad_atgs(int Vod);
      void draw_xn_cetka();
      void atgs_color();
      float calculate_xn();
      void draw_xn();
      void pomexa_view();
      void Grafik_ATGS_A();
      void draw_pomexa();
      void main_func();
      int flag,flag_atgs_a,flag_ks,flag_pom,flag1,flag2,flag3,mass_color[818]
      ,flag_atgs,XN,rez_dezyrn;
      float mas_atgs_a[819],fl_mas,mas[721],mas_pom[708];
   private:
      bool eventFilter(QObject *obj, QEvent *event);
      void mouseMoveEvent(QMouseEvent * xy_cur);
      void keyPressEvent(QKeyEvent * ev);
private slots:
   void D_time();
};

подключаемый класс .cpp

#include "Texnology.h"

Texnology::Texnology(QWidget *parent, Qt::WFlags flags)
         : QWidget(parent, flags)
{
   frame_texnologia_grafika=new QFrame();
   frame_texnologia_grafika->setGeometry(0,0,1280,1024);
   frame_texnologia_grafika->setBackgroundColor(QColor(77,77,79));
   frame_texnologia_grafika->setAutoFillBackground(true);
   fr_Verh=new QFrame(frame_texnologia_grafika);
   fr_Verh->setGeometry(200, 40, 870, 361);
   fr_Verh->setBackgroundColor(QColor(77,77,79));
   fr_Verh->setAutoFillBackground(true);
   fr_Niz_ATGS_A=new QFrame(frame_texnologia_grafika);
   fr_Niz_ATGS_A->setGeometry(200, 400, 870, 120);
   fr_Niz_ATGS_A->setBackgroundColor(QColor(77,77,79));
   fr_Niz_ATGS_A->setAutoFillBackground(true);
   fr_Niz=new QFrame(frame_texnologia_grafika);
   fr_Niz->setBackgroundColor(QColor(77,77,79));
   fr_Niz->setAutoFillBackground(true);
   fr_Niz->setGeometry(200, 519, 870, 441);
   fr_3=new QFrame(frame_texnologia_grafika);
   fr_3->setBackgroundColor(QColor(77,77,79));
   fr_3->setAutoFillBackground(true);
   fr_3->setGeometry(200, 519, 870, 441);
   edit_P=new QLineEdit(fr_3);
   edit_P->setGeometry(30, 5, 60, 22);
   edit_KU=new QLineEdit(fr_3);
   edit_KU->setGeometry(30, 5, 60, 22);
   edit_Dist=new QLineEdit(fr_3);
   edit_Dist->setGeometry(30, 5, 60, 22);
   
   
   img=new QImage(fr_Verh->width(),fr_Verh->height()*2,QImage::Format_RGB32);
   img1=new QImage(fr_Niz_ATGS_A->width(),fr_Niz_ATGS_A->height()*2,QImage::Format_RGB32);
   img2=new QImage(fr_Niz->width()*2,fr_Niz->height()*2,QImage::Format_RGB32);
   img3=new QImage(fr_Niz->width()*2,fr_Niz->height()*2,QImage::Format_RGB32);
   img4=new QImage(fr_Niz->width()*2,fr_Niz->height()*2,QImage::Format_RGB32);
   time_draw=new QTimer(this);
   connect(time_draw,SIGNAL(timeout()), SLOT(D_time()));
   
   fr_Verh->show();
   fr_Niz_ATGS_A->show();
   fr_Verh->installEventFilter(this);
   fr_Niz_ATGS_A->installEventFilter(this);
   fr_Niz->installEventFilter(this);
   this->installEventFilter(this);
   paint=new QPainter(img2);
   paint->setPen(QColor(0,0,0));
   paint->setBrush(QColor(0,0,0));
   paint->drawRect(20,10,820,fr_Niz->height()*2);
   delete paint;
   paint1=new QPainter(img3);
   paint1->setPen(QColor(0,0,0));
   paint1->setBrush(QColor(0,0,0));
   paint1->drawRect(20,10,820,fr_Niz->height()*2);
   delete paint1;
   paint1=new QPainter(img4);
   paint1->fillRect(0,0,870,441,QBrush(QColor(77,77,77)));
   paint1->setPen(QColor(0,0,0));
   paint1->setBrush(QColor(0,0,0));
   paint1->drawRect(20,0,728,fr_Niz->height()*2);
   delete paint1;
   setMouseTracking(TRUE);
   fr_Verh->setMouseTracking(TRUE);
   flag=0;flag_atgs_a=0;flag_ks=0;flag_pom=0;flag1=0;flag2=0;flag3=0;flag_atgs=0;XN=0;
   rez_dezyrn=0;fl_mas=0;
}
Texnology::~Texnology()
{

}
Texnology::~Texnology()
{

}
void Texnology:Веселый_time()
{
   update();
}
void Texnology::main_func()
{
   
   frame_texnologia_grafika->show();
   time_draw->start(1000);   
}

// далее функции прорисовки

может стоит класс унаследовать от main_class а не от QWidget?помогите кто разбирается хорошо в этом.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Июня 11, 2010, 13:47 »

tex= new Texnology(this);
И чтобы фрейм нормально отображался в layout нужно засунуть.
Цитировать
ещё один экземпляр программы с фреймом этим
Это называется окном Веселый
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
zenden
Гость
« Ответ #2 : Июня 11, 2010, 16:29 »

Обрамляйте код тегами !!!

[сodе=cpp]ваш код [/cоde]
« Последнее редактирование: Июня 11, 2010, 16:33 от zenden » Записан
Firefox
Гость
« Ответ #3 : Июня 11, 2010, 20:28 »

спасибо попробую))
Записан
Firefox
Гость
« Ответ #4 : Июня 16, 2010, 12:04 »

сделала как вы посоветовали, но не помогло, по прежнему 2 экземпляра окна. и ещё такой вопрос, чтобы обратиться к элементам на форме - тем что ранее созданы, из подключаемого класса, что сделать надо?
Записан
Nimbus
Гость
« Ответ #5 : Июня 16, 2010, 15:19 »

сделала как вы посоветовали, но не помогло, по прежнему 2 экземпляра окна. и ещё такой вопрос, чтобы обратиться к элементам на форме - тем что ранее созданы, из подключаемого класса, что сделать надо?
Обратиться к элементам экземпляра окна (как вы его называете) можно, разыменовав указатель на объект класса окна и обратиться к полям, объявленным со спецификатором доступа public.
Если вы использовали дизайнер для создания интерфейса, то обращайтесь уже по objectName.
Записан
spectre71
Гость
« Ответ #6 : Июня 17, 2010, 10:35 »

Если вы использовали дизайнер для создания интерфейса, то обращайтесь уже по objectName.

Ерунда.

И вообще какое отношение данная тема имеет к  "Программирование > С/C++".
Пренесите в "Вопросы новичков"
« Последнее редактирование: Июня 17, 2010, 10:37 от Spectre » Записан
Firefox
Гость
« Ответ #7 : Июня 17, 2010, 12:05 »

использовала дизайнер. в основном классе пишу например ui.textLabel->... в подключаемом такое обращение вызывает ошибку сразу.не поняла точно как сделать то, что вы советуете.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 23.