QFileDialog分量信号

时间:2014-05-09 18:38:32

标签: qt qt4 pyqt

我是QFileDialog的子类,试图获得一些自定义行为。 我想连接到对话框组件发出的信号,例如手动编辑文件名行编辑时的textEdited信号。我知道QFileDialog本身会发出一些信号,但这些信号不包括我想回复的情况。

我有两种可以想到的方法,但不知道如何实施。一种是以某种方式获得对组件的引用以连接到它的信号。另一个是事件过滤器,但事件源是对话本身,所以我不知道如何确定鼠标点击或按键发生的位置。

这些方法中的任何一种都可行吗?或者另一种方式?

1 个答案:

答案 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方法总是存在风险!