QFileDialog с виртуальной клавиатурой

Есть ли способ определить, когда редактирование текста имени файла получает фокус? Мне нужно отображать виртуальную клавиатуру при вводе текстового редактирования

Спасибо


person GrahamSim    schedule 06.03.2019    source источник
comment
Установить фильтр событий?   -  person vahancho    schedule 06.03.2019


Ответы (1)


Это не точное решение, но вот довольно хакерский путь, ведущий к нему, должен работать -- 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);
    }
};

На самом деле не очень сложно реализовать настраиваемый файловый диалог, в зависимости от объема предполагаемых настроек, но вполне возможно и "определение фокуса".

person MasterAler    schedule 06.03.2019