Есть ли способ определить, когда редактирование текста имени файла получает фокус? Мне нужно отображать виртуальную клавиатуру при вводе текстового редактирования
Спасибо
Есть ли способ определить, когда редактирование текста имени файла получает фокус? Мне нужно отображать виртуальную клавиатуру при вводе текстового редактирования
Спасибо
Это не точное решение, но вот довольно хакерский путь, ведущий к нему, должен работать -- QFileDialog
тоже виджет с дочерними элементами, поэтому вы можете получить доступ к этому имени файла QLineEdit
и делать с ним все, что нужно.
Что-то вроде... QLineEdit* lineEdit = dlg->findChild<QLineEdit*>();
Фильтр сообщений был бы лучше, потому что он не требовал бы дополнительных манипуляций или изменения поведения диалога.
QLineEdit* lineEdit = dlg->findChild<QLineEdit*>();
FocusEater* filter = new FocusEater(this);
lineEdit->installEventFilter(filter);
connect(filter, &FocusEater::gotFocus, [](){
QMessageBox::information(nullptr, "FUU", "BAR");
});
Тем не менее вам придется немного повозиться с правильной обработкой событий, попробовал себя на самой простой демонстрации, это сработало:
class FocusEater : public QObject
{
Q_OBJECT
public:
explicit FocusEater(QObject* parent)
: QObject(parent)
{}
signals:
void gotFocus();
protected:
bool eventFilter(QObject *obj, QEvent *event) override
{
if (event->type() == QEvent::FocusIn)
{
emit gotFocus();
return true;
}
else
return QObject::eventFilter(obj, event);
}
};
На самом деле не очень сложно реализовать настраиваемый файловый диалог, в зависимости от объема предполагаемых настроек, но вполне возможно и "определение фокуса".