2017-01-07 30 views
2

open()を実行すると、QtQuick2のPopup QMLコンポーネントに奇妙な問題があります。透明な背景で表示され、不透明にする必要があります。ポップアップアイテムが不明になる

これは私がmain.qmlファイルからPopupコンポーネントを呼び出す方法です:これは、コンポーネントのソースである

NewUser { 
    id: new_user_form 
} 

// File: NewUser.qml 
Popup { 
    id: new_user_popup 
    modal: true 
    focus: true 
    x: 10 
    y: 10 
    width: 300 
    height: 200 


    Rectangle { 
     anchors.fill: parent 
     color: "transparent" 
     border.color: "red" 
    } 
} 

そして、これが出力されます:

Transparent Popup

今、私はmain.qml、すべてにNewUser.qmlのソースを移動することで、このエラーは今も元気になります。

Popup { 
    id: new_user_form 
    modal: true 
    focus: true 
    x: 10 
    y: 10 
    width: 300 
    height: 200 
} 

を参照してください、ポップアップが完全にOPAQUEです:

これは今main.qml「固定」であります

なぜ、コンポーネントのソースコードをmain.qmlから別のファイルに移動するとopaquness?私のmain.qmlには他にもたくさんのものがありますが、ポップアップに関連していないと思います。また、IDは一意です。私はこれがQT 5.8 RC(私が開発に使用している)の問題ではないことを願っています。それはまだ公式ではありませんが、間もなくそうなります。

EDIT:

私はバグを発見したと信じています。

メインファイル:バグは、再現以下のファイルを使用してプロジェクトを作成するにはQt 5.8とQt 5.7

と再現性のある

//main.qml 
import QtQuick 2.7 
import QtQuick.Controls 2.0 
import QtQuick.Layouts 1.0 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    NewUser { 
     id: new_user_form 
    } 
    Button { 
     text: "open popup" 
     onClicked: { 
      new_user_form.open() 
     } 
    } 
} 

コンポーネントファイルを(NewUser.qml)

//File: NewUser.qml 
import QtQuick 2.7 
import QtQuick.Controls 2.0 
import QtQuick.Controls.Material 2.0 
import QtQuick.Dialogs 1.2 
import QtQuick.Layouts 1.3 
import Qt.labs.settings 1.0 
import QtQuick.Templates 2.0 

Popup { 
    id: new_user_popup 
    modal: true 
    focus: true 
    x: 10; y:10; 
    height: 200; width: 300; 

    Button { 
     text: "Test button" 
    } 
} 


//File: qtquickcontrols2.conf 
; This file can be edited to change the style of the application 
; See Styling Qt Quick Controls 2 in the documentation for details: 
; http://doc.qt.io/qt-5/qtquickcontrols2-styles.html 

[Controls] 
Style=Material 

[Universal] 
Theme=Light 
;Accent=Steel 

[Material] 
Theme=Light 
;Accent=BlueGrey 
;Primary=BlueGray 



//File: main.cpp 
#include <QGuiApplication> 
#include <QQmlApplicationEngine> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 
    QGuiApplication app(argc, argv); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QLatin1String("qrc:/main.qml"))); 

    return app.exec(); 
} 

これはバグですか? 「開くポップアップ」ボタンをクリックすると、淡色の画面が表示されますが、ポップアップは表示されません。

+1

私はmainの例も作った。最小限のApplicationWindowコンポーネントのみを含み、Popupコンポーネント(別の.qmlファイルに格納される)を開くコードと背景(Popup)を含むqmlは、実際は不透明である必要があります。だから、すべてを混乱させる_my_ main.qmlですが、私はそこに何のエラーもありません。そして、他のものは完全に無関係なので、私はなぜこれが起こっているのかについての手がかりはありません。 – Nulik

+0

私が見つけたもう一つの問題は、_bad_(透明)ポップアップコンポーネントに 'Button {}'を追加すると表示されないということです。しかし、main.qmlにコードをコピーすると、ボタンは完全にうまく表示されます。 – Nulik

+0

あなたが言ったように、問題はあなたの 'main.qml'にあるはずです。私は例を書いてもうまくいきます。ポップアップで 'opacity:1.0'を試しましたか? – Tarod

答えて

5

これはバグではありません。テンプレートのインポートに名前空間を使用していないことを確認してください。明確にするために

import QtQuick.Templates 2.0 as T 

QtQuick.TemplatesQtQuick.Controls輸入によって提供されるタイプとの間の1対1のマッピングがあります。 QtQuick.Controlsのインポートで使用できるすべてのタイプについては、同じ名前の非ビジュアルテンプレートタイプがQtQuick.Templatesインポートに存在します。インポートのためにネームスペースを使用して、QtQuick.Controlsインポートによって提供されるタイプとの重複を避けることをお勧めします。

+0

ありがとう!それはそれだった。なぜ、Qtの(例えば)ButtonGroupコンポーネントのQtドキュメントは、それがテンプレートであるとは何も言わないのだろうかと思います。 ButtonGroupは 'ButtonGroup'自体ではなく、私の.qml文書で' T.ButtonGroup'としてのみ使用できます。それ以外の場合、QtCreatorは "コンポーネントが認識されません" – Nulik

関連する問題