Qt のイベントについて少し読んでください。イベント フィルタリングに関するセクションがあります (ただし、すぐにジャンプしないでください:P)。
簡潔な答え :
void Qwidget::setEnabled (ブール値);
欠点は、マウスイベントも無効にし、ウィジェットのスタイルを変更することです。これは残念なことです。
長い回答: イベントをフィルタする
1 つの可能性は、Qt アプリケーションですべてのイベントをフィルタリングすることです。Qtコードを起動する関数は次のようになると思います(ここに別の投稿がある場合):
int main(int argc, char* argv[]){
QApplication app(argc, argv);
QWidget toplevelwidget1;
toplevelwidget1.show()
//stufff
return app.exec();
}
//doesnt have to exactly like this.
変数にイベント フィルタを設定できます。app
これはより洗練されたソリューションですが、ネイティブ イベントをフィルタリングし、いくつかの作業が必要になるため、複雑すぎます...
代わりにできることは、最上位のウィジェットまたはウィンドウ(親のないもの) のみをフィルタリングすることです。QObject
次のようなイベント フィルタ ( ) を定義します。
class KeyboardFilter: public QObject
{
Q_OBJECT
...
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
bool KeyboardFilter::eventFilter(QObject *obj, QEvent *event)
{
//for all events from keyboard, do nothing
if (event->type() == QEvent::KeyPress ||
event->type() == QEvent::KeyRelease ||
event->type() == QEvent::ShortcutOverride ||
) {
return true;
} else {
// for other, do as usual (standard event processing)
return QObject::eventFilter(obj, event);
}
}
次に、以下を使用して目的のウィジェットにフィルターを設定します。
myDesiredWidgetorObject->installEventFilter(new KeyboardFilter(parent));
以上です!