2017-01-18 11 views
2

Я получаю ввод пользователя с QInputDialog.getMultilineText(...). Он имеет кнопки Ok и Cancel, и я хочу, чтобы QInputDialog закрывал и возвращал введенный текст, когда пользователь нажимает Ctrl+S (для него используется метод AFAIU, done()). Как его реализовать?Как установить горячую клавишу для кнопки «ОК» в QInputDialog?

+0

'QShortcut (QKeySequence (Qt.CTRL + Qt.Key_S), dlg, dlg.done)', см. Http://nullege.com/codes/show/[email protected]@[email protected]_qt-2.3.27 @ etmQt @ etmView.py/84/PyQt5.QtWidgets.QShortcut –

+0

@VladimirBershov QInputDialog - это статический метод, вы не можете получить виджет. – eyllanesc

+0

Использовать собственный виджет? Я не думаю, что QInputDialog * * полезен ... – peppe

ответ

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(); 
}