2017-05-02 34 views
1

私はC++アプリケーションとQMLアプリケーションを切り替えることができるアプリケーションをQtに持っています(中央ウィジェットを1つまたは他のものに設定する)。QMLポップアップがC++アプリケーションで正しく動作しない

問題を解決するには、main.qmlをApplicationWindowからPageに変更して、ダイアログとQMLアプリケーションのすべてのポップアップが正しく機能しない(モダリティとフォーカスがまったく動作しない) 。

私のコードは以下のようになります。

QQuickWidget *view = new QQuickWidget(this); 
view->setSource(QUrl(QStringLiteral("qrc:/main.qml"))); //Page 

MyCppApp *myCppApp = new MyCppApp (this); //QWidget 

QStackedWidget *stackedWidget = new QStackedWidget; 
stackedWidget->addWidget(view); 
stackedWidget->addWidget(myCppApp); 
stackedWidget->setCurrentIndex(1); 

setCentralWidget(stackedWidget); 

私がいることがあるポップアップのマニュアルに知っている「これは、WindowまたはApplicationWindowで使用することができます。」私のQMLのポップアップを正しく動作させる方法はありますか?

私はQtの5.8を使用していますし、Qtのクイックはあなたがメインウィンドウの中央ウィジェットのダイアログウィンドウの一部を行うべきではありませんモダリティ2.

答えて

0

を制御します(それ以外の場合は、何にモーダル相対的です?)。メインウィンドウから呼び出します。 Qt::MSWindowsFixedSizeDialogHintだけもちろんWindows上で適用可能であること

// this view is not a part of the app main window 
view->setFlags(Qt::Dialog | Qt::WindowTitleHint | 
        Qt::WindowStaysOnTopHint | Qt::MSWindowsFixedSizeDialogHint); 

マインド:そして、それをモーダルダイアログルックスと動作を与えるために、あなたはそのようにウィンドウのフラグを適用することができます。フォーカスを設定するには

// to set the edit focus such trick needed 
QTimer::singleShot(0, view, SLOT(setFocus())); 

私はこれをQMLウィジェットコンテナで使用します。実装の詳細は異なる場合があります。 QML部分は表示されません。あなたはFocusScopeの世話をする必要があります。

関連する問題