Например:
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?