我是QFileDialog
的子类,试图获得一些自定义行为。 我想连接到对话框组件发出的信号,例如手动编辑文件名行编辑时的textEdited
信号。我知道QFileDialog
本身会发出一些信号,但这些信号不包括我想回复的情况。
我有两种可以想到的方法,但不知道如何实施。一种是以某种方式获得对组件的引用以连接到它的信号。另一个是事件过滤器,但事件源是对话本身,所以我不知道如何确定鼠标点击或按键发生的位置。
这些方法中的任何一种都可行吗?或者另一种方式?
答案 0 :(得分:1)
这是一个选项(您的第一个建议):
dialog = QFileDialog()
layout = dialog.layout()
# for i in range(layout.rowCount()):
# for j in range(layout.columnCount()):
# try:
# print i,j
# print layout.itemAtPosition(i,j).widget()
# except:
# pass
line_edit = layout.itemAtPosition(2,1).widget()
line_edit.setText('Hello Stack Overflow')
dialog.exec_()
这使您可以在对话框中访问QLineEdit,该对话框包含一系列可以连接的信号。
我还包含了用于查找此小部件的代码。我只是在对话框的布局中迭代了小部件,找到了我所追求的那个的索引。因此,如果您需要访问对话框中的任何其他内容,您应该能够轻松找到它!
此方法的缺点:如果布局在Qt的未来版本中发生更改,则会中断。我想你可以通过查找QLineEdit
实例的小部件来使算法更加健壮,但是像这样的hacky方法总是存在风险!