Russian Qt Forum
Март 29, 2024, 17:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Наследование  (Прочитано 29535 раз)
ruzik
Гость
« : Февраль 11, 2011, 15:46 »

Здравствуйте, скажи пожалуйста, что я делаю не правильно
Надо сделать новый класс из QLineEdit

Код:
#include "QLineEdit"

class RLineEdit: public QLineEdit
{
Q_OBJECT

public:
RLineEdit(QWidget *parent = 0);
~RLineEdit();
};

RLineEdit::RLineEdit(QWidget *parent )
{
this->setStyleSheet("QLineEdit { border-radius: 5px; padding: 2px 2px; border: 1px groove gray;}");
};
RLineEdit::~RLineEdit()
{

};
Мне выводит 25 ошибок, вот главные из них

Ошибка   1   error C2011: RizekLineEdit: переопределение типа "class"   c:\documents and settings\rustam\мои документы\visual studio 2008\projects\mybr\mybr\RFoundationClasses\RLineEdit.h   3
Ошибка   2   error C2027: использование неопределенного типа "RizekLineEdit"   c:\documents and settings\rustam\мои документы\visual studio 2008\projects\mybr\mybr\RFoundationClasses\RLineEdit.h   12
« Последнее редактирование: Февраль 11, 2011, 17:27 от ruzik » Записан
ilyagoo
Гость
« Ответ #1 : Февраль 11, 2011, 16:05 »

#include <QLineEdit> - так лучше смотрится))
нафига ";" после тела функции?
нафига вызов метода предка через this?

а это вообще где RizekLineEdit?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Февраль 11, 2011, 16:51 »

Забыл вызвать конструктор базового класса
Код
C++ (Qt)
RLineEdit::RLineEdit(QWidget *parent )
: QLineEdit( parent )
{
   ...
}

И где код RLineEdit.h?
Записан

Qt 5.11/4.8.7 (X11/Win)
ruzik
Гость
« Ответ #3 : Февраль 11, 2011, 17:12 »

Это и есть код RLineEdit.h, а точнее RizekLineEdit.h просто немножко подсократил название перед тем как выкладывать на форум, что бы читать стало легче
Добавил конструктор базового класса, теперь ошибок 28))
Код:
#include "QLineEdit"

class RizekLineEdit: public QLineEdit
{
Q_OBJECT

public:
RizekLineEdit(QWidget *parent = 0);
~RizekLineEdit();
};

RizekLineEdit::RizekLineEdit(QWidget *parent )
:QLineEdit(parent)
{
this->setStyleSheet("QLineEdit { border-radius: 5px; padding: 2px 2px; border: 1px groove gray;}");
}
RizekLineEdit::~RizekLineEdit()
{

}
А ; после функции можно ставить, хуже не станет, это просто стиль программирования
« Последнее редактирование: Февраль 11, 2011, 17:26 от ruzik » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Февраль 11, 2011, 17:17 »

Похоже компилятор не находит Qt-шных инклюдов.
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 11, 2011, 17:23 »

ruzik, пользуйся тегом code для оформления постов.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ruzik
Гость
« Ответ #6 : Февраль 11, 2011, 17:27 »

ruzik, пользуйся тегом code для оформления постов.
Исправил
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #7 : Февраль 11, 2011, 17:54 »

Забыл вызвать конструктор базового класса
Код
C++ (Qt)
RLineEdit::RLineEdit(QWidget *parent )
: QLineEdit( parent )
{
   ...
}
Зачем?) Это важно только если при создании объекта RLineEdit, он в него передаст предка, по умолчанию у виджета он равен 0. Хотя в твоём варианте его передавать надо обязательно.
« Последнее редактирование: Февраль 11, 2011, 17:57 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Февраль 11, 2011, 18:00 »

Цитировать
Зачем?) Это важно только если при создании объекта RLineEdit, он в него передаст предка.
Интересно, кто-то реально в реальных проектах создаёт контролы без предков?
А если укажет предка, то каким образом про него узнает базовый класс?

Цитировать
Хотя в твоём варианте его передавать надо обязательно.
Вовсе нет - смотри описание конструктора.

« Последнее редактирование: Февраль 11, 2011, 18:04 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #9 : Февраль 11, 2011, 18:03 »

Под описанием имеется ввиду
Код
C++ (Qt)
RLineEdit::RLineEdit(QWidget *parent )
 
? Если да, то не вижу тут ничего похожего на
Код
C++ (Qt)
RLineEdit::RLineEdit(QWidget *parent = 0)
 
Записан

kubuntu/Win7/x64/NetBeans
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Февраль 11, 2011, 18:06 »

Вы ссылаетесь на имплементацию, где дефолтные значения непозволительны, а вот описание:
Код
C++ (Qt)
class RizekLineEdit: public QLineEdit
{
Q_OBJECT
 
public:
RizekLineEdit(QWidget *parent = 0);
~RizekLineEdit();
};
 

Перед тем как вступать в полемику не мешало бы повнимательнее просмотреть тему)
Записан

Qt 5.11/4.8.7 (X11/Win)
Fat-Zer
Гость
« Ответ #11 : Февраль 11, 2011, 18:07 »

Это и есть код RLineEdit.h, а точнее RizekLineEdit.h просто немножко подсократил название перед тем как выкладывать
методы, надеюсь, определены всё же в cpp файле? И хорошо бы увидеть полный список ошибок под каким-нить спойлеров.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #12 : Февраль 11, 2011, 18:08 »

Интересно, кто-то реально в реальных проектах создаёт контролы без предков?
Да, потому что addWidget() никто не отменял. В чём подвох?

А если укажет предка, то каким образом про него узнает базовый класс?
не понял вопроса

Вы ссылаетесь на имплементацию, где дефолтные значения непозволительны, а вот описание:
Код
C++ (Qt)
class RizekLineEdit: public QLineEdit
{
Q_OBJECT
 
public:
RizekLineEdit(QWidget *parent = 0);
~RizekLineEdit();
};
 

Перед тем как вступать в полемику не мешало бы повнимательнее просмотреть тему)

Я ссылаюсь не на имплементацию, а на конкретный пост #3. Это тоже имплементация?)
« Последнее редактирование: Февраль 11, 2011, 18:12 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Февраль 11, 2011, 18:15 »

Цитировать
Я ссылаюсь не на имплементацию, а на конкретный пост #3. Это тоже имплементация?)
Конечно. Чего-то я не понимаю ваших непоняток.
Записан

Qt 5.11/4.8.7 (X11/Win)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #14 : Февраль 11, 2011, 18:18 »

Я имею ввиду чем по-вашему плох способ:
Код
C++ (Qt)
QLineEdit* le = new QLineEdit;
myWidget->addWidget(le);
 
? Предка не указал
« Последнее редактирование: Февраль 11, 2011, 18:21 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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