@kykryniks

QT. Как унаследовать класс?

Здравствуйте!

Есть программа, которая по bluetooth подключается к роботу. Я пишу gui к этой программе.
Проблема в следующем: в файле EpuckInterface.hpp описаны интерфейсы, к которым можно подключаться:
#ifndef	EPUCKINTERFACE_HPP__
#define	EPUCKINTERFACE_HPP__

#include <string>
using std::string;

#include "EpuckTypes.hpp"

#include <MeinHeader.h>
#include <QDialog>
namespace gui {

class EpuckImage;	// reference used in EpuckInterface

using gui::robots::epuck::IntFeld;
using gui::robots::epuck::led::LEDState;
class EpuckInterface
{
public:
    virtual ~EpuckInterface() { }
    virtual void reset() = 0;
    // drive
    virtual void setMotorSpeed( int left, int right ) = 0;  //управление колесиками на роботе 
    virtual IntFeld<2> getMotorSpeed() = 0;
    virtual void setMotorPosition( int left, int right ) = 0;
    virtual IntFeld<2> getMotorPosition() = 0;
    virtual void stopRobot() = 0;

};
}
#endif


Я создал MeinHeader.h :
#ifndef MEINHEADER_H
#define MEINHEADER_H
class MyWindow:  public QDialog  // Сюда мне нужно,как я понимаю, 
//добавить класс EpuckInterface 
// если я  делал так: class MyWindow:  public QDialog, public  gui::EpuckInterface 
// то  QT выдает ошибку: error: expected class-name before '{' token
// если же я не пытаюсь добавить gui::EpuckInterface 
//то: 'gui::EpuckInterface' has not been declared
// как мне здесь включить класс EpuckInterface, чтобы я  мог в void TTEST(); написать 
// void TTEST(gui::EpuckInterface *e);? так как  MyWindow.cpp требует это декларировать.  

 {
 
{
 Q_OBJECT
public:
    MyWindow(QWidget *parent = 0 );
private:
     EpuckInterface *e; // не работает
    QPushButton *ttest;  // для простоты оставил одну кнопку 

private slots:

void TTEST(gui::EpuckInterface *e);

};
#endif // MEINHEADER_H


В файле MyWindow.cpp все стандартно:
#include <QObject>
#include <MeinHeader.h>
#include <EpuckInterface.hpp>

MyWindow::MyWindow(QWidget *parent): QDialog(parent)
{

   e = new gui::EpuckInterface; // тоже не работает
    ttest = new QPushButton(tr("ttest"));
connect(ttest,SIGNAL(clicked()),this,SLOT(TTEST(gui::EpuckInterface *e)));
    QGridLayout *grid = new QGridLayout;
    grid->addWidget(ttest,0, 5);
    setLayout(grid);
    StopClicked();
    setWindowTitle("---");
}

void MyWindow::TTEST(gui::EpuckInterface *e)
{
    e->setMotorSpeed(100,50) ; //  сюда я не могу попасть из MyWindow::MyWindow .....
                                                 
}

}


Надеюсь, мой вопрос ясен. Если коротко, то - как я могу в мною созданных слотах использовать
класс EpuckInterface и все, что в нем лежит?
  • Вопрос задан
  • 756 просмотров
Пригласить эксперта
Ответы на вопрос 1
Zifix
@Zifix Куратор тега Qt
Barbatum
Вы совершенно неправильно работаете с UI в Qt. EpuckInterface выглядит как класс логики, а вы зачем-то пытаетесь сделать его предком UI класса. Просто создайте экземпляр EpuckInterface как поле MyWindow.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы