Russian Qt Forum

Qt => Общие вопросы => Тема начата: Caduceus от Апрель 27, 2009, 22:20



Название: Надо создать общий сигнал для контролов на диалоге, загруженном через QUiLoader
Отправлено: Caduceus от Апрель 27, 2009, 22:20
Сейчас попытаюсь объяснить.
У меня есть ui файлы, загружаемые через QUiLoader. Я знаю имена контролов на нем то есть могу через findChild найти. НО - я не знаю заранее тип контрола - то есть комбобокс это или слайдер или радиокнопка и тд - это неизвестно.

Так вот, мне надо ловить изменения в значениях от всех этих контролов - то есть чтобы все шло через функцию, первый аргумент которой идет указатель на виджет - а далше с агрументами не совсем понятно, как разруливать их типы.

Вот такой финт надо сделать... Как? Есть мысли?


Название: Re: Надо создать общий сигнал для контролов на диалоге, загруженном через QUiLoa
Отправлено: Karl-Philipp от Апрель 27, 2009, 22:49
думаю, что QSignalMapper Class подойдёт для перечисленных целей.


Название: Re: Надо создать общий сигнал для контролов на диалоге, загруженном через QUiLoader
Отправлено: Caduceus от Апрель 27, 2009, 22:50
О, спасибо, уже копаю

Правка Блин, I like this game. Супер. То что надо


Название: Re: Надо создать общий сигнал для контролов на диалоге, загруженном через QUiLoader
Отправлено: pastor от Апрель 27, 2009, 23:13
НО - я не знаю заранее тип контрола - то есть комбобокс это или слайдер или радиокнопка и тд - это неизвестно.

как разруливать их типы.

QObject *obj = .... ; // неизвестный тип

1.

Код
C++ (Qt)
obj->metaObject()->className();

Вернет имя класса объекта, например "QPushButton"

2.

Код
C++ (Qt)
QPushButton *pb = qobject_cast<QPushButton *>(obj);
if (pb) {
   // do something with QPushButton
}
 
QRadioButton *rb = qobject_cast<QRadioButton *>(obj);
if (rb) {
   // do something with QRadioButton
}
 
...


Название: Re: Надо создать общий сигнал для контролов на диалоге, загруженном через QUiLoader
Отправлено: Caduceus от Апрель 27, 2009, 23:19
Да, спасибо. Это тоже пригодится.
Всем спасибо. В мозгу все встало на свои места - понятно что делать