2013-08-30 30 views
6

私はアプリケーションのQQuickWindowでQQmlApplicationEngineを使用していますが、私は トランスペアレントメインウィンドウできません。私のmain.cppにはQQuickWindow transparent

int main(int argc, char *argv[]) 
{ 
Application app(argc, argv); 

QShookaClient shooka_client; 
QQmlApplicationEngine engine; 
engine.rootContext()->setContextProperty("shooka", &shooka_client); 
engine.load(QUrl("qrc:///shooka/shooka.qml")); 

QObject *topLevel = engine.rootObjects().value(0); 
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel); 

window->show(); 
window->setFlags(Qt::FramelessWindowHint); 
window->setColor(Qt::transparent); 

return app.exec(); 
} 

ですが、setColorをはwin7のでは動作しません、私は、アプリケーションがポップアップ表示する前にスプラッシュを設定したいと私はそれのためにWindowコンポーネントを使用し、それは透明でなければならないが、そうではありません。私はQDeclarativeViewのための方法があることを知っているか、QQuickviewのための解決策を見つけても、QQuickWindowのためにはちょっとうまくいくはずですが、誰も助けてください。

+0

QWindowはQWidgetと同じではありません。 ... ViewクラスはすべてQWidgetから派生しています。 –

答えて

0

フレームなし透明ウィンドウ効果を得るために、

setWindowFlags(
     #ifdef Q_OS_MAC 
      Qt::SubWindow | 
     #else 
      Qt::Tool | 
     #endif 
      Qt::FramelessWindowHint | 
      Qt::WindowSystemMenuHint | 
      Qt::WindowStaysOnTopHint 
     ); 

setAttribute(Qt::WA_NoSystemBackground, true); 
// set the parent widget's background to translucent 
setAttribute(Qt::WA_TranslucentBackground, true); 

setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
// create a display widget for displaying child widgets 
QWidget* displayWidget = new QWidget; 
displayWidget->setStyleSheet(".QWidget { background-color: rgba(0, 0, 0, 75%); border-width: 1px; border-style: solid; border-radius: 10px; border-color: #555555; } .QWidget:hover { background-color: rgba(68, 68, 68, 75%); border-width: 2px; border-style: solid; border-radius: 10px; border-color: #ffffff; }"); 

あなたの親ウィンドウまたはウィンドウを含むウィンドウに枠がなく、背景が半透明であるという考えがあります。その後、親QWidget内に子QWidgetをネストし、透過のためにQSSを使用してスタイルを適用します。

+2

tanx Cameronしかし、問題はQWindowはQWidgetと同じではありません。私はQtの専門家ではないと私は彼らがsomhow関連する必要があります知っている...しかし、本当にどのように??? QQuickWindowには、QWidgetやQQuickViewからの何らかのドライブのように設定される属性もありません。 – ali

4

Window QtQuickタイプがQQuickWindow C++クラスにマップされ、QWindowから派生していることを理解しておく必要があります。キャメロンの答えごとにウィンドウフラグを設定することができます。しかし、opacityを半透明にするために0.75に設定する必要もあります。このすべてはQMLで行うことができ、C++からフラグを設定する必要はありません。

import QtQuick 2.1 
import QtQuick.Controls 1.0 
import QtQuick.Window 2.0 

ApplicationWindow { 
    title: qsTr("Hello World") 
    width: 640 
    height: 480 
    flags: Qt.SubWindow | Qt.Tool | Qt.FramelessWindowHint | Qt.WindowSystemMenuHint | Qt.WindowStaysOnTopHint 
    opacity: 0.75 
    visible: true 
    menuBar: MenuBar { 
     Menu { 
      title: qsTr("File") 
      MenuItem { 
       text: qsTr("Exit") 
       onTriggered: Qt.quit(); 
      } 
     } 
    } 
    Button { 
     text: "Hello World" 
     anchors.centerIn: parent 
    } 
} 
+0

あなたは知っています。私はあなたに言ったことをしましたが、それはうまくいきませんでした:私はちょっと間違っていましたか?しかし私はちょうど私のコードをコピーして貼り付けて、プログラムは実行されていて、タスクはタスクマネージャーになっていましたが、私の画面上には何もありませんでした。 – ali

+0

私はWindows 7でそれをテストしていません。Win7の下で、Qtのangleまたはopenglビルドを使用していますか? –

4

screenshot

私はこれが古い質問ですけど、それがマークされていないとして解くと、ここに私のアプローチです:

import QtQuick 2.4 
import QtQuick.Controls 1.3 

ApplicationWindow { 
    title: qsTr("Hello World") 
    width: 640 
    height: 480 
    flags: Qt.FramelessWindowHint 
    color: "transparent" 
    visible: true 
    Rectangle 
    { 
     color:"red" 
     width: parent.width/2 
     height: parent.height/2;anchors.centerIn: parent 
    } 
} 

その結果、あなたは透明な背景を取得します真ん中に赤い矩形があります。その画像の長方形を簡単に変更することができます。

希望は助けてくれました。