2017-07-26 43 views

回答

2

更改此

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來保存對話框的內容,因爲某些 嵌入式系統不支持多個頂層窗口。當 對話框變得可見時,如果可能的話,它將自動被包裝在窗口 中,或者如果 只能是一個窗口,則主窗口頂部將被重新包裝。

+0

我需要最新的回退。 – Orient

+0

我不能直接使用'DefaultFileDialog'。 'QGuiApplication'什麼都不做。 – Orient

+0

「最新的回退」? – Mitch

相關問題