关于qt:QFileDialog组件信号

QFileDialog component signals

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

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

这些方法是否可行?还是别的办法?


以下是一个选项(您的第一个建议):

1
2
3
4
5
6
7
8
9
10
11
12
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实例的小部件来提高算法的健壮性,但是这样的黑客方法总是有风险的!