2016-06-21 5 views
0

QtDesigner(4.8.7)を使用して、作成しているQGISプラグインのメインの対話ポイントとなるQDialogを作成しています。ユーザ入力のほとんどは、様々なQLineEditフィールドを介して入力され、そのいくつかはplaceholderTextに設定されています。残念ながら、QDialogが開かれるたびに、QLineEditフィールドが直ちに選択され(すなわち、フォーカスを受け取る)、プレースホルダテキストが消えてユーザがテキストを入力できるようになる。したがって、どのフィールドにも自動的にフォーカスしないQDialogを作成できるかどうかは疑問です。 これは、プラグインのエンドユーザーが値を入力する前にプレースホルダーのテキストを検査できるようにします。QDialogフィールドを自動フォーカスしない

次のように私は現在、QDialogを初期化しています:

import PyQt4.QtGui as QTG 
import PyQt4.QtCore as QTC 

from dialog_ui import Ui_dialog 

class UI (object): 
    def __init__(self, iface): 
     # iface is just a way to interact with QGIS 
     self.iface  = iface 

     self.container = QTG.QDialog() 
     self.ui  = Ui_dialog() 

     self.setup() 

    def setup(self): 
     self.ui.setupUi(self.container) 
     # Custom ui setup code follows after this... 

    # Called by an external function 
    def show(self): 
     self.container.exec_() 

答えて

3

はQtのデザイナーでTab Order Editing Modeを使用してください。

プレースホルダテキストを持たないウィジェットでタブオーダーを開始します。そのウィジェットは初期のフォーカスを得るでしょう。

また、ダイアログを表示する前に、適切なウィジェットでsetFocus()を呼び出してください。

+0

これは最初は機能しますが、ユーザーがいずれかのフィールドを選択すると再び問題が発生します。 – mathsaey

+2

@mathsaey。はい、私は 'setFocus()'を呼び出す代わりのソリューションを提供しました;-) – ekhumoro

0

最終的に私はエコモロの答えと解決策の組み合わせに行きましたhere。解決策の要点は、QLineEditでclearFocus()を使用してフォーカスを失わせることです。

QLineEditは、ユーザーが重要なQDialogの別の場所をクリックしたときにフォーカスを失わせることにしました。コードは次のようになります。

import PyQt4.QtGui as QTG 
import PyQt4.QtCore as QTC 

from dialog_ui import Ui_dialog 

class CustomDialog (QTG.QDialog): 

    def mousePressEvent(self, event): 
     focusWidget = QTG.QApplication.focusWidget() 
     if focusWidget: 
      focusWidget.clearFocus() 

class UI (object): 
    def __init__(self, iface): 
     # iface is just a way to interact with QGIS 
     self.iface  = iface 

     self.container = CustomDialog() 
     self.ui  = Ui_dialog() 

     # Rest of the code remains unchanged 
+0

'mousePressEvent'に束縛するのではなく、フォーカスが変更される唯一の方法だと仮定して、' QApplication :: focusChanged'あなたのダイアログの子どもたちからフォーカスを削除します。 –

関連する問題