Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alex Custov от Ноябрь 17, 2009, 22:35



Название: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: Alex Custov от Ноябрь 17, 2009, 22:35
с помощью qobject_cast:

Код
C++ (Qt)
QDBusInterface *i = qobject_cast<QDBusInterface *>(sender());

Цитировать
/usr/include/qt4/QtDBus/qdbusabstractinterface.h: In member function ‘void QDBusAbstractInterface::qt_check_for_QOBJECT_macro(const T&) const [with T = QDBusInterface]’:
/usr/include/qt4/QtCore/qobject.h:441:   instantiated from ‘T qobject_cast(QObject*) [with T = QDBusInterface*]’
dbus.cpp:151:   instantiated from here
/usr/include/qt4/QtDBus/qdbusabstractinterface.h:66: error: void value not ignored as it ought to be

 ???


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: MoPDoBoPoT от Ноябрь 17, 2009, 22:56
В описании этого класса отсутствует макрос Q_OBJECT, может поэтому?


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: Alex Custov от Ноябрь 17, 2009, 23:08
В описании этого класса отсутствует макрос Q_OBJECT, может поэтому?

Да, посмотрел, отсутствует. Что характерно, в QDBusAbstractInterface он есть. Не консистентно, и не документировано.


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: Пантер от Ноябрь 17, 2009, 23:29
Попробуй static_cast.


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: BRE от Ноябрь 18, 2009, 00:08
с помощью qobject_cast:
Код
C++ (Qt)
QDBusInterface *i = qobject_cast<QDBusInterface *>(sender());
А какой сигнал ты обрабатываешь?


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: Alex Custov от Ноябрь 18, 2009, 00:16
А какой сигнал ты обрабатываешь?

от dbus сервера на стороне клиента.


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: BRE от Ноябрь 18, 2009, 00:24
А какой сигнал ты обрабатываешь?

от dbus сервера на стороне клиента.
Сигналы идут от QDBusConnection, а не от QDBusInterface.
bool QDBusConnection::connect ( const QString & service, const QString & path, const QString & interface, const QString & name, QObject * receiver, const char * slot )


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: Alex Custov от Ноябрь 18, 2009, 02:32
Сигналы идут от QDBusConnection, а не от QDBusInterface.
bool QDBusConnection::connect ( const QString & service, const QString & path, const QString & interface, const QString & name, QObject * receiver, const char * slot )

Здрасте :) Коннектить можно и через QDBusInterface:

Код
C++ (Qt)
V::V()
{...
  QDBusInterface *i = new QDBusInterface("org.freedesktop.Hal",
                                           "/org/freedesktop/Hal/Manager",
                                           "org.freedesktop.Hal.Manager",
                                           QDBusConnection::systemBus(),
                                           this);
 
   connect(i, SIGNAL(DeviceAdded(const QString &)), this, SLOT(slotAdded()));
...
}
 
void V::slotAdded()
{
   qDebug() << sender()->inherits("QDBusInterface") << '/' << sender()->metaObject()->superClass()->className();
}
 

Вставляем флешку, видим в консоли "true / QDBusAbstractInterface"  ;)


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: pastor от Ноябрь 18, 2009, 02:53
А откуда берется сигнал DeviceAdded?


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: Alex Custov от Ноябрь 18, 2009, 04:35
А откуда берется сигнал DeviceAdded?

из dbus сервиса


Название: Re: почему нельзя кастить QObject* к QDBusInterface*?
Отправлено: BRE от Ноябрь 18, 2009, 08:59
Здрасте :)
Согласен, парюсь.  :)

Так и приводи sender к QDBusAbstractInterface, ведь весь функционал в нем.