質問

私はQT GUIプログラミングが初めてで、QT Creatorを使用しています。私が見ている問題は、ユーザーがenterキーを押したときの押しボタンと行の編集です。私のプログラムはグループボックスを開き、ユーザーがパスワードを入力して[ok]または[キャンセル]を押すことができます。

行の編集にフォーカスがあるときにユーザーがenterキーを押すと、プログラムはQAbstractButtonの2番目の信号を発しているようです animateClick(); そのため、次のグループボックスが開き、ユーザーに[ok]または[キャンセル]を押すように促すと、ユーザーが[ok]ボタンを押したかのようにプログラムが続行されます。

ユーザーがtabキーを押してenterキーを押すことができるようにプッシュボタンを設定しました。この機能を得るために、私はokbutton->を設定しましたsetAutodefault(true); とcancelButton->setAutodefault(true);

また、ユーザーがパスワードを入力してenterキーを押すためのlineEditもあります。これを設定するには、return pressed信号を以下に示すokボタンに接続します。

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

また、return pressed信号をスロットに直接接続しようとしましたが、問題はまだ発生します。

connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));

ユーザーがマウスでokButtonをクリックした場合、またはokButton->を設定した場合setAutoDefault(false); プログラムは必要に応じて機能します。ライン編集にフォーカスがあるときに発生するanimateClick信号を無効にすることが可能かどうかを知りたいです。

これに関する助けがあれば大歓迎です。

役に立ちましたか?

解決

接続しないようにしてください lineEdit と一緒に okButton, 、すなわちコード内でこの行をコメントアウトします:

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

そして、プログラムがあなたが望むように動作するかどうかを確認してください。


また、次のように呼び出すこともできます

okButton->setDefault(true);

あなたのに加えて setAutoDefault() ユーザーが押したときに正確に何をしたいかに応じて、両方のボタンを呼び出します 入る いろいろなことに焦点を当てています。見る この答え この主題のより多くの情報のため。


私はあなたがそれを言及しないので、あなたが呼び出さないと仮定します setDefault() あなたのボタンのいずれかのために。このようにして, okButton あなたの最初のボタンです autoDefault に設定されたプロパティ true.これは、次のことを意味し okButton ダイアログが処理する必要があるときはいつでも、ダイアログの"選択したボタン"になります 入る 他のいくつかでは起こらなかったkeypress autoDefault ボタン( cancelButton あなたの場合)。

あなたのダイアログ内の任意のウィジェットが受信するたびに 入る キーを押してイベント自体を消費しないと、イベントはダイアログのdefault-button処理ロジックによって処理され、前述の"button of choice"をクリックします。

QLineEdit 複数行の編集には使用されないため、おそらくキープレスイベントを消費しないでしょう 入る (まだそれを処理している間、それはアウトを送信するという点で returnPressed() 信号)。このように、あなたの接続の returnPressed() それがやっていることは何でもやってしまう、と, 追加, 、default-buttonロジックは、あなたのボタンをもう一度クリックしてしまいます。

また、チェックアウト Qtプロジェクトフォーラムのこのスレッド これは同じ問題を異なる方法で解決するようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top