crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Тема закрытаНачать новую тему
> как правильно сделать свой QLabel
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2008, 18:56
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Туговато у меня с классами, вопрос скорее о С++, но все же.

Написал такую прогу, теста ради:
#include <QtGui>

// ----------------------------------------------------------------------
class YLabel : public QLabel
{

};
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QLabel    l1("QLabel-l1");
    YLabel    l2;

    l2.setText("YLabel-l2");

    l1.show();
    l2.show();
    
    return app.exec();
}

Копилится и работает, а когда пытаюсь проинициализировать YLabel текстом, вот так:
    YLabel    l2("YLabel-l2");

то выдается такая ошибка:
main.cpp: In function `int qMain(int, char**)':
main.cpp:24: error: no matching function for call to `YLabel::YLabel(const char[10])'
main.cpp:23: note: candidates are: YLabel::YLabel()
main.cpp:13: note:                 YLabel::YLabel(const YLabel&)
mingw32-make[1]: *** [release/main.o] Error 1

Как использовать в дочернем классе конструктор от родительского?
Подскажите как сделать по сути клон, т.е. чтобы мой клас обладал всеми возможностями родительского.
А то дальше и брыкатся со своими виджетами безсмыслено. <_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
balbes
  опции профиля:
сообщение 15.1.2008, 19:07
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 62
Регистрация: 11.10.2007
Пользователь №: 10

Спасибо сказали: 0 раз(а)




Репутация:   0  


В пустом класс есть только конструктор по умолчанию и конструктор копировщик.
При вызове: YLabel l2("YLabel-l2"); компилятор считает, что ты пытаешься таким образом обратиться к конструктору копировщику а привеления из строки к YLabel нет, вот и пишет ошибку.

Тебе нужно переопределить конструктор:
QLabel::QLabel ( const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0 )
в твоем классе и все :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2008, 19:16
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


А как это сделать?
я пытался так:
YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)
        : QLabel(text, parent, f)
{

}

Это совсем мимо? :rolleyes:
напишите пожалуйста, объявление и реализацию, а то у меня ниодной книжки по С++ нету <_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 15.1.2008, 19:21
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Почти, нужно так:
class YLabel : public QLabel
{
public:
    YLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
};

YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) : QLabel(text, parent, f)
{

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
balbes
  опции профиля:
сообщение 15.1.2008, 19:23
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 62
Регистрация: 11.10.2007
Пользователь №: 10

Спасибо сказали: 0 раз(а)




Репутация:   0  


Книжки можно качнуть тут: http://privatelib.narod.ru :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2008, 19:40
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


За книжки спасибо, я уже заказал на Ozon.ru Герберт Шилдт "Полный справочник по C++" должна в конце недели прийти.
Надеюсь она мне поможет.
ViGOur
я так делал тогда ругается так:
main.cpp: In function `int qMain(int, char**)':
main.cpp:31: error: no matching function for call to `YLabel::YLabel()'
main.cpp:16: note: candidates are: YLabel::YLabel(const YLabel&)
main.cpp:21: note:                 YLabel::YLabel(const QString&, QWidget*, Qt::WindowFlags)

причем уже в самом первом варианте, т.е.
YLabel    l2;
l2.setText("YLabel-l2");

я этого совсем не понимаю :(
без конструктора, использует метод родителя без проблем, щаззз заплачу, или пойду натрескаюсь пива :angry:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 15.1.2008, 19:47
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А в это случае так как ты переопределил конструктор, ты перекрыл конструктор по умолчанию, о чем тебе и говорит компилятор.
Так будет работать:
class YLabel : public QLabel
{
public:
    YLabel( QWidget * parent = 0, Qt::WindowFlags f = 0 );
    YLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
};

YLabel::YLabel( QWidget * parent, Qt::WindowFlags f): QLabel(parent, f){}

YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) : QLabel(text, parent, f){}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2008, 19:58
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Щас точно пойду нажрусь, в обед делал оба конструктора, не покатило, блин жаль, что перетер, щас бы сравнил.
Спасибо, работает.
Видать думал таки в правильном направлении, но где то чушь на порол.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 15.1.2008, 20:13
Сообщение #9


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Litkevich Yuriy @ 15.1.2008, 19:58) *
Щас точно пойду нажрусь,
Лучше почитать книжку, тему: классы и наследование, многое станет понятно, тем более после того как попробовал и почти сам дошел. Так что будет читаться как бестселлер... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2008, 21:35
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ViGOur
Жду книжку, наверное только в пятницу прийдет.

Герберт Шилдт "Полный справочник по C++"

Как считаешь Хорошая?

Страуструпа не хочу, меня от него в сон клонет либомозги начинают булькать :( .
читал английскую версию Вики книги
русская в этом именно месте(объектно-ориентированное програмирование) еще не написана :(

Сообщение отредактировал Litkevich Yuriy - 15.1.2008, 21:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 19:24