我收到了QInputDialog.getMultilineText(...)
的用户输入。它有Ok
和Cancel
按钮,当用户按下Ctrl+S
时,我希望QInputDialog关闭并返回输入的文本(AFAIU,使用done()
方法)。我该如何实现它?
答案 0 :(得分:0)
我认为使用QInputDialog
提供的静态方法无法实现您想要的效果。您无法安装事件过滤器或类似的东西。而且,这些方法是基本的便利功能。
您应该继承QInputDialog
,自己创建对话框,并在按下keyPressEvent()
时覆盖done()
以致电Ctrl+S
。
例如:
<强> 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();
}
<强>的main.cpp 强>
#include <QApplication>
#include "myinputdialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyInputDialog m;
m.show();
return a.exec();
}