不要自动聚焦QDialog字段

时间:2016-06-21 18:17:30

标签: qt pyqt qt4 pyqt4 qt-designer

我正在使用QtDesigner(4.8.7)构建一个QDialog,它将作为我正在创建的QGIS插件的主要交互点。大多数用户输入是通过各种QLineEdit字段输入的,其中一些字段设置为placeholderText

不幸的是,每次打开QDialog时,都会立即选择QLineEdit字段(即它接收焦点),这会导致占位符文本消失,以便允许用户输入文本。因此,我想知道是否可以创建一个不会自动关注任何字段的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_()

2 个答案:

答案 0 :(得分:3)

在Qt Designer中使用Tab Order Editing Mode

在没有占位符文本的某个窗口小部件上启动选项卡排序。该小部件将获得最初的关注。

或者,在显示对话框之前,只需在适当的小部件上调用setFocus()

答案 1 :(得分:0)

我最终选择了ekhumoro的答案和我找到的解决方案here。解决方案的要点是在QLineEdit上使用clearFocus()来强制它失去焦点。

当用户点击总体QDialog的另一个位置时,我决定让QLineEdit失去焦点。代码最终看起来像这样:

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