我正在使用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_()
答案 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