Russian Qt Forum
Ноябрь 23, 2024, 22:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Передача данных в главный виджет
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Передача данных в главный виджет (Прочитано 9408 раз)
Etud
Гость
Передача данных в главный виджет
«
:
Март 25, 2010, 11:21 »
Привет !
Возник интересный вопрос:
Как данные передать из виджета в главный виджет ?
Но без использования сигналов и слотов.
Пока получилось передать данные из главного виджета в дочерний через указатель.
НАДО НАОБОРОТ !
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Передача данных в главный виджет
«
Ответ #1 :
Март 25, 2010, 11:32 »
Вообще-то Qt и его виджеты здесь не причём.
Кто мешает держать в свойствах дочерних объектов указатель на родительский объект?
Записан
Qt 5.11/4.8.7 (X11/Win)
Rcus
Гость
Re: Передача данных в главный виджет
«
Ответ #2 :
Март 25, 2010, 12:12 »
Без сигналов и слотов есть parentWidget() и на выбор static_cast<SomeType*>() или в стиле Smalltalk - sendEvent
Записан
whirlwind
Гость
Re: Передача данных в главный виджет
«
Ответ #3 :
Март 25, 2010, 14:45 »
Цитата: Rcus от Март 25, 2010, 12:12
Без сигналов и слотов есть parentWidget() и на выбор static_cast<SomeType*>() или в стиле Smalltalk - sendEvent
идеологически правильнее было бы qobject_cast, или хотя бы dynamic_cast
Записан
Rcus
Гость
Re: Передача данных в главный виджет
«
Ответ #4 :
Март 25, 2010, 16:16 »
/*shrugs*/ Ну получите вы 0 указатель и что дальше будете с ним делать? У меня для таких случаев есть
Цитировать
template<class T> inline T rzobject_cast(QObject *o)
{
Q_ASSERT(qobject_cast<T>(o));
return static_cast<T>(o);
}
template<class T> inline T rzobject_cast(const QObject *o)
{
Q_ASSERT(qobject_cast<T>(o));
return static_cast<T>(o);
}
Множественное наследование не использую, потому этого хватает.
Записан
Etud
Гость
Re: Передача данных в главный виджет
«
Ответ #5 :
Март 26, 2010, 09:42 »
Цитировать
Без сигналов и слотов есть parentWidget() и на выбор static_cast<SomeType*>()
С методом parentWidget() ясно. Он возвращает родительский класс.
Дальше не понятно.
Как обратиться в объекту главного виджета, чтобы изменить label например.
в функции main
Код:
MyWidget myw;
myw.show();
Кусочек бы кода !
Записан
Etud
Гость
Re: Передача данных в главный виджет
«
Ответ #6 :
Март 28, 2010, 01:55 »
Классика приведения:
Код:
CWidget *p = ((CWidget *)parentWidget());
p->resize(200,300);
Записан
Gorthauer
Гость
Re: Передача данных в главный виджет
«
Ответ #7 :
Март 29, 2010, 22:54 »
Цитата: Etud от Март 28, 2010, 01:55
Классика приведения:
Код:
CWidget *p = ((CWidget *)parentWidget());
p->resize(200,300);
ССЗБ detected. Стреляйте в ноги где-нибудь в другом месте, и не учите новичков так делать. Сишные касты в С++ да ещё и в Qt это моветон.
Кстати, а чем плох static_cast? Проверяется всё ещё на этапе компиляции
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Передача данных в главный виджет
«
Ответ #8 :
Март 30, 2010, 11:50 »
ИМХО, лучше выделить в главном виджете структуру с параметрами, которые будут меняться дочерним виджетом. И при его (дочернем) создании передать ему поинтер на данную структуру. Таким образом можно организовать и двусторонний обмен.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
SASA
Гость
Re: Передача данных в главный виджет
«
Ответ #9 :
Март 30, 2010, 14:39 »
Цитата: Gorthauer от Март 29, 2010, 22:54
Цитата: Etud от Март 28, 2010, 01:55
Классика приведения:
Стреляйте в ноги где-нибудь в другом месте, и не учите новичков так делать.
Rcus
, а зачем в случае с const делать static_cast?
Записан
Rcus
Гость
Re: Передача данных в главный виджет
«
Ответ #10 :
Март 30, 2010, 16:17 »
Цитата: SASA от Март 30, 2010, 14:39
Rcus
, а зачем в случае с const делать static_cast?
Перегрузка для const QObject* нужна для полного набора. Вдруг будет указатель на константный объект, и нужно вызвать константный метод из подкласса?
На самом деле у меня на 18k LoC всего 10 rzobject_cast, 22 qobject_cast, 21 static_cast и 4 qstyleoption_cast. Приведение типов для const T* используется только в случае qstyleoption_cast.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...