如何在 QInputDialog 中为'Ok'按钮设置热键?



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

我认为使用 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

我的输入对话框.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();
}

主.cpp

#include <QApplication>
#include "myinputdialog.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyInputDialog m;
    m.show();
    return a.exec();
}

相关内容

  • 没有找到相关文章

最新更新