如何使import QtQuick.Dialogs
中的對話框成爲非本機,非QDialog
衍生(QFileDialog
等)?Qt Quick 2應用程序中的非本地對話框
有可能使QFileDialog
成爲非本地的(QFileDialog::Option::DontUseNativeDialog
)。但是如何使QML中的對話框以類似的方式在QPA和eglfs
QPA上呈現在xcb
QPA上?
如何使import QtQuick.Dialogs
中的對話框成爲非本機,非QDialog
衍生(QFileDialog
等)?Qt Quick 2應用程序中的非本地對話框
有可能使QFileDialog
成爲非本地的(QFileDialog::Option::DontUseNativeDialog
)。但是如何使QML中的對話框以類似的方式在QPA和eglfs
QPA上呈現在xcb
QPA上?
更改此
QApplication app(argc, argv);
這個
QGuiApplication app(argc, argv);
的伎倆爲Dialog
,但不FileDialog
。它基本上告訴QtQuick.Dialogs
你沒有使用小部件,但它也會影響使用的樣式。
,檢查該代碼的應用程序正在使用中是here:
static QString defaultStyleName()
{
//Only enable QStyle support when we are using QApplication
#if defined(QT_WIDGETS_LIB) && !defined(Q_OS_IOS) && !defined(Q_OS_ANDROID) && !defined(Q_OS_BLACKBERRY) && !defined(Q_OS_QNX) && !defined(Q_OS_WINRT)
if (QCoreApplication::instance()->inherits("QApplication"))
return QLatin1String("Desktop");
#elif defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
if (QtAndroidPrivate::androidSdkVersion() >= 11)
return QLatin1String("Android");
#elif defined(Q_OS_IOS)
return QLatin1String("iOS");
#elif defined(Q_OS_WINRT) && 0 // Enable once style is ready
return QLatin1String("WinRT");
#endif
return QLatin1String("Base");
}
void QQuickAbstractDialog::setVisible(bool)
)似乎控制哪個對話的類型被示出。我不知道是否有一種方法使用公共QML API迫使非本地對話框,但你總是可以修補的Qt:
diff --git a/src/dialogs/qquickabstractdialog.cpp b/src/dialogs/qquickabstractdialog.cpp
index ce87d56..416f796 100644
--- a/src/dialogs/qquickabstractdialog.cpp
+++ b/src/dialogs/qquickabstractdialog.cpp
@@ -81,7 +81,7 @@ void QQuickAbstractDialog::setVisible(bool v)
if (m_visible == v) return;
m_visible = v;
- if (m_dialogHelperInUse || v) {
+ if (0 /*m_dialogHelperInUse || v*/) {
// To show the dialog, we first check if there is a dialog helper that can be used
// and that show succeeds given the current configuration. Otherwise we fall back
// to use the pure QML version.
僅此補丁是足以迫使使用的QML對話框實現。
對於FileDialog
,有this paragraph解釋的過程:
的FileDialog的實施將是一個平臺的文件對話框,如果 可能。如果這是不可能的,那麼它會嘗試實例化一個QFileDialog。如果這也是不可能的,那麼它將回退到QML實現 ,DefaultFileDialog.qml。在這種情況下,你可以通過編輯這個文件來自定義外觀 。 DefaultFileDialog.qml 包含一個Rectangle來保存對話框的內容,因爲某些 嵌入式系統不支持多個頂層窗口。當 對話框變得可見時,如果可能的話,它將自動被包裝在窗口 中,或者如果 只能是一個窗口,則主窗口頂部將被重新包裝。
我需要最新的回退。 – Orient
我不能直接使用'DefaultFileDialog'。 'QGuiApplication'什麼都不做。 – Orient
「最新的回退」? – Mitch