Безопасно ли применять run-time рефлексию, к стандартным диалоговым окнам Qt?
От: Chorkov Россия  
Дата: 09.12.22 11:54
Оценка:
Например:
        QString nn = ...;
        QInputDialog dlg(this);
        dlg.setLabelText( tr("Enter new name:") );
        dlg.setTextValue( nn );
        connect( &dlg, &QInputDialog::textValueChanged,
                 [&validateName,&dlg](const QString &text){
            QString err = validateName(text);
            // Эти строки вызывают сомнение :
            for(QPushButton*p_ok: dlg.findChildren<QPushButton*>() )
                if(p_ok->isDefault())
                {
                    p_ok->setEnabled( err.isEmpty() );
                    p_ok->setToolTip( err );
                }
        });
        if( dlg.exec() == QDialog::Accepted )
            return dlg.textValue();
        else
            return "";


Безопасно ли искать и менять свойства элементов управления на чужих диалоговых окнах, в том числе, на стандартных диалогах Qt?

С одной стороны, вдруг следуя стилю дизайна OS, окно будет переделано, и кнопка [Ok] окажется не QPushButton?
С другой стороны, зачем-то ведь нам дан класс QInputDialog, а не только статические функции типа getText?
Re: Безопасно ли применять run-time рефлексию, к стандартным диалоговым окнам Qt
От: Igore Россия  
Дата: 09.12.22 14:39
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Например:

C>Безопасно ли искать и менять свойства элементов управления на чужих диалоговых окнах, в том числе, на стандартных диалогах Qt?
А что смущает? Не вижу никаких проблем.

C>С одной стороны, вдруг следуя стилю дизайна OS, окно будет переделано, и кнопка [Ok] окажется не QPushButton?

Тогда обратная совместимость поедет, они так стараются не делать, ну может быть в Qt7 будет по другом, и то сомневаюсь.
C>С другой стороны, зачем-то ведь нам дан класс QInputDialog, а не только статические функции типа getText?
Чтобы настроить его как тебе надо и показать, там на статических функциях только простейшие операции.

Тут скорее дизайнерский момент что делается типа стандартный диалог с не совсем стандартным поведением для системы.
Re[2]: Безопасно ли применять run-time рефлексию, к стандартным диалоговым окнам
От: SaZ  
Дата: 10.12.22 13:08
Оценка:
Здравствуйте, Igore, Вы писали:

I>Здравствуйте, Chorkov, Вы писали:


C>>Например:

C>>Безопасно ли искать и менять свойства элементов управления на чужих диалоговых окнах, в том числе, на стандартных диалогах Qt?
I>А что смущает? Не вижу никаких проблем.

Исключение — диалоги которые вызываются системой, например открытие файла. Хотя и для него можно указать чтобы явно использовался кутэшный вариант.
Re: Безопасно ли применять run-time рефлексию, к стандартным диалоговым окнам Qt
От: Skorodum Россия  
Дата: 12.12.22 13:56
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Безопасно ли искать и менять свойства элементов управления на чужих диалоговых окнах, в том числе, на стандартных диалогах Qt?

А почему нет? В крайнем случае не найдешь элемент
Какая разница между внешней лямбдой и слотом этого класса?

C>С одной стороны, вдруг следуя стилю дизайна OS, окно будет переделано, и кнопка [Ok] окажется не QPushButton?

Кто-то может установить флаг QInputDialog::NoButtons и кнопки не будет вообще.
Я бы сделал свой диалог и установил валидатор на поле ввода, тогда отношения между диалогом и функцией validateName были бы более четкие, но это дело вкуса.
Re[3]: Безопасно ли применять run-time рефлексию, к стандартным диалоговым окнам
От: Igore Россия  
Дата: 13.12.22 10:32
Оценка:
Здравствуйте, SaZ, Вы писали:

C>>>Безопасно ли искать и менять свойства элементов управления на чужих диалоговых окнах, в том числе, на стандартных диалогах Qt?

I>>А что смущает? Не вижу никаких проблем.
SaZ>Исключение — диалоги которые вызываются системой, например открытие файла. Хотя и для него можно указать чтобы явно использовался кутэшный вариант.
Ну не будет там этот код работать и ладно , ничего же страшного от этого не случится. А по поводу безопасности, есть отдельные программы(за деньги) которые ui на Qt в другом процессе инспектируют и дополнительные данные рисуют.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.