【问题标题】:QFileDialog with virtual keyboard带有虚拟键盘的 QFileDialog
【发布时间】:2019-03-07 07:32:18
【问题描述】:

有没有办法检测文件名文本编辑何时获得焦点? 输入文本编辑时需要显示虚拟键盘

谢谢

【问题讨论】:

  • 安装事件过滤器?

标签: qt qfiledialog


【解决方案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);
    }
};

实际上,实现自定义文件对话框并不是很困难,这取决于假定的自定义量,但“焦点检测”也是可能的。

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2011-01-04
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多