我想将任何文件拖放到窗口,我想在App中获取该文件名(从QObject继承),并将TextField.text更改为文件名。我在写下一个代码。
// main.qml
import QtQuick 2.6
import QtQuick.Controls 1.4
ApplicationWindow {
TextField {
text: app.inputFilename
}
DropArea {
anchors.fill: parent
onDropped: {
app.inputFilename = drop.text
}
}
}
# main.py
class App(QObject):
def __init__(self):
super(App, self).__init__()
self.input_filename = ''
@pyqtProperty('QString')
def inputFilename(self):
return self.input_filename
@inputFilename.setter
def inputFilename(self, filename):
if filename.startswith('file:///'):
self.input_filename = filename[8:]
else:
self.input_filename = filename
app = App()
gui_app = QGuiApplication([])
engine = QQmlApplicationEngine()
root_context = engine.rootContext()
root_context.setContextProperty("app", app)
engine.load(QUrl.fromLocalFile('qml\MainWin.qml'))
engine.quit.connect(gui_app.quit)
sys.exit(gui_app.exec_())
结果是我将文件名输入到inputFilename,并且运行良好。但是我希望TextField.text也能更改,因为TextField.text:app.inputFilename(在qml代码中)。当app.inputFilename在python端更改时,我该怎么做才能更改TextField.text?我知道我可以在python端使用信号,并在调用inputFilename时发出它。但是也许存在其他方式吗?