我正在子类QFileDialog,以尝试获得一些自定义行为。I希望连接到对话框的组件发出的信号,例如,在手动编辑文件名行时发出的信号。--我知道QFileDialog本身会发出一些信号,但这些信号不包括我想要响应的情况。
关于这一点,我有两种方法,但我不知道如何实现。一种是以某种方式获得对组件的引用,以连接到它的信号。另一个是带有事件过滤器的东西,但事件源是对话框本身,所以我不知道如何确定鼠标单击或按下键的位置。
这些方法中的任何一种可行吗?或者另一种方式?
发布于 2014-05-11 05:24:55
这里有一个选择(你的第一个建议):
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实例的小部件来使算法更加健壮,但是像这样的黑客方法总是有风险的!
https://stackoverflow.com/questions/23571768
复制相似问题