質問
長方形/画面の透明性を設定する方法。
次のコードがあります:
// main.cpp
void main(int argc, char*[] argv)
{
QApplication::setGraphicsSystem("raster");
QApplication app(argc, argv);
QDeclerativeView view;
view.setSource(QUrl::fromLocalFile("loaderTest.qml"));
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
view.showFullScreen();
//QRegion mask(10, 10, 100, 100);
//view.setMask();
view.show();
app.exec();
}
QMLファイルは次のとおりです。
//loaderTest.qml
Rectangle
{
id: mainRectangle
width: 1000
height: 700
color: "transparent"
//color: "#00000000"
Image
{
id: image1;
width: 348;
height: 155;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.verticalCenter: parent.verticalCenter;
source: "test.png"
}
Loader
{
id: mainLoader
anchors.fill: parent;
source: "";
focus: true;
}
}
この画面には1つのローダーと1つの画像があり、背景色は透明です。このアプリケーションを実行すると、中央に画像が付いた透明な背景を表示する必要があります(ローダーソースを設定していないため)。
しかし、私が得ているのは、画面に白い背景が入った中央の画像です。透明な色を背景として言及したように、この白い背景の色を誰が埋めているのかわかりません。
Qt.4.7.0とLinuxを使用しています。
ターゲットシステムには2つの平面があり、1つはビデオプレーンで、もう1つはグラフィックプレーンです。透明な背景を持つGUIを実行すると(ビデオプレイスで透明性が設定されています)、上記の例でビデオの場所にビデオを表示する必要があります。ビデオプレーンでビデオを再生することを表示する必要があります。
解決
デフォルトでは、QDeclarativeViewは背景をペイントします。たぶんそれがあなたの場合の問題です。
から http://doc.qt.nokia.com/4.7/qdeclarativeperformance.html
また、QMLを使用してアプリケーションの背景を提供する場合、QDeclarativeViewがウィンドウの背景をペイントするのを防ぐこともできます。
QDeclarativeView window;
window.setAttribute(Qt::WA_OpaquePaintEvent);
window.setAttribute(Qt::WA_NoSystemBackground);
window.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
window.viewport()->setAttribute(Qt::WA_NoSystemBackground);
他のヒント
私の最初の推測では、背景は白で、長方形は実際には完全に透明であるということです。
ローダースクリーンとは、ある種のQDecalarativeViewのようなものだと思います。技術的なミスがQT/QMLをほぼ1年間コーディングしていないことを許してください。私が覚えているように、ビューのデフォルトの背景は白で、とにかくどのような透明性を透明にしたいと思っていますか?
qpushbuttonに背景色を設定する場合、境界プロパティを何らかの価値に設定しない限り、背景は表示されない場合があります。これは、デフォルトでは、Qpushbuttonが背景色と完全に重複するネイティブの境界線を描くためです。これは、Qpushbuttonの周りに黒い長方形の箱を示すかもしれません。特にLinuxマシンでこの問題に直面します。これを避けるために、あなたは国境の財産を誰にも設定することができます
widget-> setstylesheet( "border:none");