Название: подключение класса, наследование Отправлено: 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::D_time() { update(); } void Texnology::main_func() { frame_texnologia_grafika->show(); time_draw->start(1000); } // далее функции прорисовки может стоит класс унаследовать от main_class а не от QWidget?помогите кто разбирается хорошо в этом. Название: Re: подключение класса, наследование Отправлено: kibsoft от Июня 11, 2010, 13:47 tex= new Texnology(this);
И чтобы фрейм нормально отображался в layout нужно засунуть. Цитировать ещё один экземпляр программы с фреймом этим Это называется окном :DНазвание: Re: подключение класса, наследование Отправлено: zenden от Июня 11, 2010, 16:29 Обрамляйте код тегами !!!
[сodе=cpp]ваш код [/cоde] Название: Re: подключение класса, наследование Отправлено: Firefox от Июня 11, 2010, 20:28 спасибо попробую))
Название: Re: подключение класса, наследование Отправлено: Firefox от Июня 16, 2010, 12:04 сделала как вы посоветовали, но не помогло, по прежнему 2 экземпляра окна. и ещё такой вопрос, чтобы обратиться к элементам на форме - тем что ранее созданы, из подключаемого класса, что сделать надо?
Название: Re: подключение класса, наследование Отправлено: Nimbus от Июня 16, 2010, 15:19 сделала как вы посоветовали, но не помогло, по прежнему 2 экземпляра окна. и ещё такой вопрос, чтобы обратиться к элементам на форме - тем что ранее созданы, из подключаемого класса, что сделать надо? Обратиться к элементам экземпляра окна (как вы его называете) можно, разыменовав указатель на объект класса окна и обратиться к полям, объявленным со спецификатором доступа public.Если вы использовали дизайнер для создания интерфейса, то обращайтесь уже по objectName. Название: Re: подключение класса, наследование Отправлено: spectre71 от Июня 17, 2010, 10:35 Если вы использовали дизайнер для создания интерфейса, то обращайтесь уже по objectName. Ерунда. И вообще какое отношение данная тема имеет к "Программирование > С/C++". Пренесите в "Вопросы новичков" Название: Re: подключение класса, наследование Отправлено: Firefox от Июня 17, 2010, 12:05 использовала дизайнер. в основном классе пишу например ui.textLabel->... в подключаемом такое обращение вызывает ошибку сразу.не поняла точно как сделать то, что вы советуете.
|