2017-07-26 14 views
1

import QtQuick.Dialogsから非ネイティブ、非QDialog -derived(QFileDialogなど)のダイアログを作成する方法?Qtクイック2アプリケーションの非ネイティブダイアログ

QFileDialogを非ネイティブ(QFileDialog::Option::DontUseNativeDialog)にすることは可能です。しかし、のQMLでダイアログを作成する方法は、QPAのxcb QPAと同じ方法でeglfs QPAに表示されますか?この

QGuiApplication app(argc, argv); 

にこの

QApplication app(argc, argv); 

を変更

答えて

2

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が含まれています。 ダイアログが表示されると、可能であれば自動的にウィンドウ にラップされます。または、 が1つのウィンドウになることができる場合は、メインウィンドウの上に表示されます。

+0

最新のフォールバックが必要です。 – Orient

+0

私は 'DefaultFileDialog'を直接使うことはできません。 'QGuiApplication'は何もしません。 – Orient

+0

「最新のフォールバック」ですか? – Mitch

関連する問題