我正在嘗試在基于瀏覽器的 Qt/QML 應用程式中創建一個彈出對話框,以便在我的作業站上選擇一個檔案以上傳到運行 Web 服務器的單元。我不確定通過在瀏覽器中單擊按鈕呼叫 FileDialog 時正在運行的“背景關系”是什么。它是運行服務器和托管頁面的單元本地還是運行瀏覽器的作業站本地?
我在 QML 中有以下代碼,取自FileDialog 檔案中的示例:
FileDialog {
id: fileDialog
title: "Please choose a file"
folder: shortcuts.home
onAccepted: {
console.log("You chose: " fileDialog.fileUrls)
//Do the data_client stuff and get the file moving
client.getUploadFile(fileUrls)
}
onRejected: {
console.log("Canceled")
}
}
此對話框顯示以下內容:
Button {
id: uploadButton
x: 224
y: 14
text: qsTr("Upload")
onClicked: {
fileDialog.open()
}
}
我目前看到的問題是,當打開時,對話框給了我一些我不知道的檔案系統“空間”。無論我是在 Windows 還是 Linux 機器上運行,我都會在“/home/web_user”目錄中看到以下對話框:

在我外行的大腦中,這似乎表明該對話框是托管服務器的單元的本地(基于 Linux,我的作業站通常基于 Windows),但我在該單元的任何地方都找不到該目錄結構。是 Web 服務器 (lighttpd) 中存在的一些特殊背景關系嗎?這是瀏覽器背景關系中的一些用戶空間嗎?我需要做些什么來將 FileDialog “指向”我要從中上傳檔案的作業站上的本地檔案系統嗎?
我不精通 Web 開發術語/工具,因此我嘗試使用 Qt/WebAssembly 創建基于 Web 的 GUI,所以請原諒我使用的術語在技術上可能不正確...
uj5u.com熱心網友回復:
我對自己沒有足夠仔細地閱讀檔案感到非常生氣。
為了使用小部件,我必須從 更改QGuiApplication為 a QApplication,將“widgets”添加到我的專案“QT =”行,更改 QML 以呼叫后端而不是嘗試FileDialog在 QML 中直接呼叫,然后呼叫適當的功能,如QFileDialog檔案中所述...
QML 現在是:
Button {
id: uploadButton
x: 224
y: 14
text: qsTr("Upload")
onClicked: {
client.getUploadFile();
}
}
在后端 C 中:
auto fileContentReady = [](const QString &fileName, const QByteArray &fileContent) {
if (fileName.isEmpty()) {
// No file was selected
} else {
qDebug() << "File name: " fileName;
}
};
void Data_Client::getUploadFile()
{
QFileDialog::getOpenFileContent("Images (*.png *.xpm *.jpg)", fileContentReady);
//...
}
getOpenFileContent() 的檔案中對這一切都進行了非常明確的定義,但是我必須對瀏覽器沙盒和 Web 的東西有很多了解emscripten,才能意識到我沒有看到什么......希望這有助于人們有類似的問題...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449623.html
上一篇:Qt自定義繪制事件進度條
