2017-01-18 4 views
2

QInputDialog.getMultilineText(...)でユーザー入力を受け取りました。 OkCancelボタンがあり、ユーザがCtrl+S(AFAIU、done()メソッドを使用)を押すと、QInputDialogを閉じて入力したテキストを返すようにします。どのように実装するのですか?QInputDialogの「OK」ボタンのホットキーを設定するには?

+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から継承ダイアログを自分で作成し、Ctrl+Sが押されたときにdone()を呼び出すためにkeyPressEvent()を上書きする必要があります。例えば

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(); 
} 
関連する問題