【问题标题】:How to set a hotkey for the 'Ok' button in QInputDialog?如何为 QInputDialog 中的“确定”按钮设置热键?
【发布时间】:2017-01-18 19:09:04
【问题描述】:

我通过QInputDialog.getMultilineText(...) 接收用户输入。它有OkCancel 按钮,我希望QInputDialog 在用户按下Ctrl+S 时关闭并返回输入的文本(AFAIU,done() 方法用于它)。如何实现?

【问题讨论】:

标签: qt pyqt qt5 pyqt5


【解决方案1】:

我认为使用QInputDialog提供的静态方法是不可能实现你想要的。您不能安装事件过滤器或类似的东西。此外,这些方法是基本的便利功能。

您应该继承QInputDialog,自己创建对话框并覆盖keyPressEvent(),以便在按下Ctrl+S 时调用done()

例如:

myinputdialog.h

#ifndef MYINPUTDIALOG_H
#define MYINPUTDIALOG_H

#include <QInputDialog>

class MyInputDialog : public QInputDialog
{
    Q_OBJECT

public:
    explicit MyInputDialog(QWidget *parent = 0);
    void keyPressEvent(QKeyEvent *e) override;

signals:

public slots:
};

#endif // MYINPUTDIALOG_H

myinputdialog.cpp

#include "myinputdialog.h"
#include <QKeyEvent>
#include <QDebug>

MyInputDialog::MyInputDialog(QWidget *parent) : QInputDialog(parent)
{
    setOptions(QInputDialog::UsePlainTextEditForTextInput);
}

void MyInputDialog::keyPressEvent(QKeyEvent *e)
{
    qDebug() << Q_FUNC_INFO;

    if ( e->key() == Qt::Key_S
         && e->modifiers() & Qt::ControlModifier )
    {
        qDebug() << Q_FUNC_INFO << "CTRL + S";
        done(1);
        e->accept();
        return;
    }

    e->ignore();
}

ma​​in.cpp

#include <QApplication>
#include "myinputdialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyInputDialog m;
    m.show();

    return a.exec();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多