| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > пустой окно QLabel |
| Автор: yngwie19 13.6.2009, 22:20 | ||
Всем привет вот мой код. Подскажите почему при показе QLabel появляется пустое окно без текста "My Name":
|
| Автор: andrew_121 14.6.2009, 04:56 |
| Потому что метод show() вызывать нужно у объекта MyClass. А QLabel должен быть его членом, и в качестве парента должен использовать this. Именно об этом я тебе и пытался сказать здесь: http://forum.vingrad.ru/forum/topic-263063.html |
| Автор: Любитель 14.6.2009, 05:17 |
| Это, конечно, не по теме вопроса, но: 1. Возвращать указатель на char?! 2. В чём смысл пользование методом property со статическим параметром (известным в компайл-тайм, всмысле) для известного класса? Это ж ведь значительно медленнее, чем нормальный вызов конкретного метода! 3. Зачем создавать lbl и mc в куче? Да ещё и не удалять их (да, это уже обсуждалось тут не раз - в данном случае ничего не случится, но это ужасная практика). 4. И ещё - NULL в С++ всё-таки не особо принято писать (ибо требует никому не нужного инклюда, а ведь достаточно написать 0). |
| Автор: yngwie19 14.6.2009, 09:11 |
| andrew_121, не понял. у MyClass нет метода show. исправь пожалуйста в моем коде, покажи что ты имеешь в виду. |
| Автор: Любитель 14.6.2009, 11:32 | ||
yngwie19, посмотри какие дебажные сообщения при запуске выводит твой код ;)
Ещё раз - зачем так извращаться?! Почему не использовать "обычный" (для Qt) QString? |
| Автор: yngwie19 14.6.2009, 11:40 |
| Любитель, спасибо теперь получилось! Я не понял о чем говорит andrew_121, стоит так делать? |
| Автор: SABROG 14.6.2009, 11:51 | ||
| У QVariant'a нет типа "char *": http://doc.trolltech.com/latest/qvariant.html#Type-enum Поэтому тебе надо использовать QString, если ты хочешь содержать в свойстве строку. Но, если ты все-таки хочешь содержать там указатель на Си строку или любой другой тип, то тогда тебе его нужно зарегистрировать:
|
| Автор: yngwie19 14.6.2009, 12:52 |
| SABROG, спасибо тебе большое. |
| Автор: andrew_121 14.6.2009, 13:28 |
Да. И за это нужно бить по рукам. SABROG, Странный код получился) Обычно виджеты пихают в базовый класс. |
| Автор: SABROG 14.6.2009, 14:19 | ||
Предлагаешь привести указатель QObject'a к QWidget'у и передать в качестве родителя? ;) setParent() тоже не поможет, он переопределен у QWidget'a под QWidget* вместо QObject*. |
| Автор: SABROG 14.6.2009, 15:47 |
Учебники - скукота. Я например пишу то, что мне интересно, выбираю себе задачки сам. Если мне не интересно возится с сокетами, пока не припрет не стану изучать. Создавать третий виджет как-то влом было, да и превращать QObject в QWidget неохото |
| Автор: andrew_121 14.6.2009, 16:48 | ||||
Гм... Уважаемый, вы же не новичек! Все так. Потом локти грызем.
Да. Но было бы правильно. |
| Автор: SABROG 14.6.2009, 19:58 | ||||
Новичек. Я еще ни одного серьезного приложения на Qt не написал. Всё утилиты небольшие. Еще было бы правильно придерживаться стиля Qt и написать так:
Тогда не смотря на внутреннее имя переменной m_name к свойству можно обращаться как к "name" и использовать методы в Qtшном стиле:
Странно, что на это никто не обратил внимания |
| Автор: andrew_121 14.6.2009, 22:41 |