Qt focusObjectChanged пример? - PullRequest
       13

Qt focusObjectChanged пример?

0 голосов
/ 02 ноября 2018

Я ищу пример того, как обрабатывать указатель QObject, полученный слотом, когда получен сигнал 'focusObjectChanged'. Я хотел бы знать, как определить объект, который получает фокус?

В документации указывается, что указатель находится на объекте фокусировки, но как узнать, какой?

Я пытался проанализировать указатель в отладчике, но я не вижу ничего очевидного.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете определить класс и имя объекта, свойства виджета ...:

QObject::connect(qApp, &QApplication::focusObjectChanged, [](QObject *obj){
    if(obj) qWarning() << obj->metaObject()->className() << obj->objectName();

    QWidget* widget = qobject_cast<QWidget*>(obj);
    if(widget) qWarning() << widget->geometry(); // or other properties

    BaseType* baseType = qobject_cast<BaseType*>(obj);
    if(baseType) qWarning() << baseType->some_actions();

    Type1* type1 = qobject_cast<Type1*>(obj);
    if(Type1) qWarning() << type1->some_actions();

    Type2* type2 = qobject_cast<Type2*>(obj);
    if(Type2) qWarning() << type2->some_actions();
});

или сравните указатель с указателями виджета, чтобы найти нужный виджет:

SomeClassSlot(QObject* obj) {
if(!obj) return;
if(obj == m_mainWindows) ....
if(obj->parent() == m_table) ...
MyClass myClass = qobject_cast<MyClass*>(obj);
if(myClass) myClass->some_method();
}
...