2
QInputDialog.getMultilineText(...)
でユーザー入力を受け取りました。 Ok
とCancel
ボタンがあり、ユーザがCtrl+S
(AFAIU、done()
メソッドを使用)を押すと、QInputDialogを閉じて入力したテキストを返すようにします。どのように実装するのですか?QInputDialogの「OK」ボタンのホットキーを設定するには?
QInputDialog.getMultilineText(...)
でユーザー入力を受け取りました。 Ok
とCancel
ボタンがあり、ユーザがCtrl+S
(AFAIU、done()
メソッドを使用)を押すと、QInputDialogを閉じて入力したテキストを返すようにします。どのように実装するのですか?QInputDialogの「OK」ボタンのホットキーを設定するには?
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();
}
'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 –
@VladimirBershov QInputDialogは静的メソッドです。ウィジェットを取得することはできません。 – eyllanesc
カスタムウィジェットを使用しますか?私はQInputDialogが*有用であるとは思わない* ... – peppe