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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как получить список подключенных объектов  (Прочитано 4616 раз)
alexis031182
Гость
« : Март 09, 2010, 19:25 »

Имеется объект, которому нужна информация о подключенных к нему методом QObject::connect() других объектах. Просто хотя бы список получить. QObject::connectNotify() и QObject::receivers() не подходят, т.к. первый метод не передаёт информации о самом объекте, а второй лишь возвращает общее количество подключенных объектов.
Записан
SABROG
Гость
« Ответ #1 : Март 09, 2010, 20:53 »

Стандартными средствами никак.
Записан
alexis031182
Гость
« Ответ #2 : Март 09, 2010, 21:57 »

Если нестандартно, то только при помощи хранения списка указателей на объекты подключенных классов? Других вариантов нет?
Записан
SASA
Гость
« Ответ #3 : Март 10, 2010, 14:57 »

Можно в отладчике по шагам посмотреть, что происходит при "испускании" сигнала и как он доходит до слушающих. Мне кажется внутри QObject есть место где хранится эта информация. Может как-нибудь можно до неё добраться Улыбающийся
Записан
SABROG
Гость
« Ответ #4 : Март 10, 2010, 15:20 »

Можно, добирались, но это хак.
Записан
alexis031182
Гость
« Ответ #5 : Март 10, 2010, 15:50 »

Спасибо за участие. Решил задачу через сигнальную петлю.
Записан
Akaiten
Гость
« Ответ #6 : Март 10, 2010, 16:08 »

Есть ещё один, несколько "хакерский" способ. Через использование Q_DECLARE_PRIVATE. Пример:
Код
C++ (Qt)
#include "qobject_p.h"
 
class MyObject : public QObject
{
Q_OBJECT
 
public:
MyObject(QObject *parent = 0);
~MyObject();
 
inline QObjectList senderList() const
{ return d_func()->senderList(); }
inline QObjectList receiverList(const char *signal) const
{ return d_func()->receiverList(signal); }
 
private:
Q_DECLARE_PRIVATE(QObject)
};
 
Также см. исходники QAccessibleWidget.
Записан
alexis031182
Гость
« Ответ #7 : Март 10, 2010, 16:34 »

О! Спасибо! Этот способ куда как лучше моего Улыбающийся
Записан
SABROG
Гость
« Ответ #8 : Март 10, 2010, 17:03 »

Раз уж хак все-таки тут разместили, то еще один способ "доступа".

Код
C++ (Qt)
#include "qobject_p.h"
 
class MyObject : public QObject
{
Q_OBJECT
 
public:
MyObject(QObject *parent = 0);
~MyObject();
 
inline QObjectList senderList() const
{ return d_ptr->senderList(); }
inline QObjectList receiverList(const char *signal) const
{ return d_ptr->receiverList(signal); }
 
private:
using QObject::d_ptr;
};
 

Также см. исходники QAccessibleWidget.

А вот "легальный" пример с использованием классов для людей с ограниченными возможностями я бы с удовольствием посмотрел.
« Последнее редактирование: Март 10, 2010, 17:05 от SABROG » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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