Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2017, 17:54   #1
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию Проблема с наследованием в Qt (ошибка компиляции)

Всем доброго времени суток! С Qt новичок, что-то туплю. Итак есть объявление класса:
Код:
#include <QLabel>
#include <QDialog>
#include <gst/gst.h>
#include "pipeline.h"

namespace Ui 
{
  class Draw;
}

class Draw : public QDialog
{
  Q_OBJECT

public:
  int MaxCounter;
  QLabel *Label;
  GstBuffer *Buffer;

private:
  Ui::Draw *ui;
  Pipeline *pPipe;
  int VidCounter;

public:
  Draw(Pipeline *, QWidget *parent = 0);
  int DrawBuffer(void);

private:
};
Реализация:

Код:
#include "draw.h"

Draw::Draw(Pipeline *p, QWidget *parent) : QDialog(parent), ui(new Ui::Draw)
{
  pPipe = p;
  VidCounter = 0;

  QLabel mode;
  mode.setPixmap(QPixmap(QString::fromUtf8(":/icons/mode1.png")));
  mode.setGeometry(QRect(42, 40, 49, 69));
  mode.show();

  while(1);
}
Однако при попытке компиляции выдает 2 ошибки: error: invalid use of incomplete type 'struct Ui::Draw' и error: forward declaration of 'struct Ui::Draw'.

Как с этим разобраться ума не приложу.. Если убираю наследование, то QLabel не отображается на экране, виден только курсор в центре экрана.

Благодарю за любую помощь и мысли!
Xuch вне форума Ответить с цитированием
Старый 08.02.2017, 19:47   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Код:
class Draw : public QDialog
Заменить на:
Код:
class Ui::Draw : public QDialog
waleri вне форума Ответить с цитированием
Старый 09.02.2017, 07:56   #3
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

Спасибо.
Исправил, но теперь другая проблема((

Определение:
Код:
namespace Ui 
{
    class Draw;
}

class Ui::Draw : public QDialog
{
  Q_OBJECT

public:
  int MaxCounter;
  QLabel *Label;
  GstBuffer *Buffer;

private:
  Ui::Draw *ui;
  Pipeline *pPipe;
  int VidCounter;

public:
  Draw(Pipeline *, QWidget *parent = 0);
  int DrawBuffer(void);

private:
};
Реализация:
Код:
Ui::Draw::Draw(Pipeline *p, QWidget *parent) : QDialog(parent), ui(new Ui::Draw)
{
  pPipe = p;
  VidCounter = 0;

  QLabel mode;
  mode.setPixmap(QPixmap(QString::fromUtf8(":/icons/mode1.png")));
  mode.setGeometry(QRect(42, 40, 49, 69));
  mode.show();

  while(1);
}
Но теперь компилятор ругается на реализацию Ui::Draw::Draw следующим образом:
Код:
error: no matching function for call to 'Ui::Draw::Draw()'
candidates are: Ui::Draw::Draw(Pipeline*, QWidget*)
note:                 Ui::Draw::Draw(const Ui::Draw&)
Что-то я в ступоре...
Xuch вне форума Ответить с цитированием
Старый 09.02.2017, 09:53   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Вы в конструкторе класса Draw создаете объект класса Draw - это как и зачем?
Зачем в классе Draw указатель на класс Draw?
waleri вне форума Ответить с цитированием
Старый 09.02.2017, 10:37   #5
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

Чтобы в конструкторе Draw можно было вызвать

Код:
    ui->setupUi(this);
    this->activateWindow();
    setFocusPolicy(Qt::StrongFocus);
    this->setFocus();
    QCursor::setPos(800,600);
Xuch вне форума Ответить с цитированием
Старый 09.02.2017, 10:43   #6
Xuch
Пользователь
 
Регистрация: 25.03.2013
Сообщений: 36
По умолчанию

Так.. У меня форма Draw и класс Draw имеют одинаковые названия, поэтому запутался. В первоначальном коде изменил форму на WDraw, подключил #include "ui_WDraw.h" и все заработало.

Большое спасибо за помощь!
Xuch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка компиляции WolfEater Общие вопросы C/C++ 5 23.09.2015 07:01
Ошибка компиляции II_Dimit_II Visual C++ 2 12.06.2012 01:21
Проблема с наследованием NickolayNest Общие вопросы по Java, Java SE, Kotlin 3 19.01.2012 23:05
Проблема с множественным наследованием Angryant Общие вопросы C/C++ 3 25.12.2011 16:48
Проблема с наследованием! Shepard90 Общие вопросы C/C++ 1 16.12.2010 18:46