4 ответов:
Вот простой пример:
Главное.cpp :
#include <QtGui/QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }Главное окно.h :
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QDeclarativeView> class MainWindow : public QDeclarativeView { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_HГлавное окно.cpp :
#include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QDeclarativeView(parent) { // transparent background setAttribute(Qt::WA_TranslucentBackground); setStyleSheet("background:transparent;"); // no window decorations setWindowFlags(Qt::FramelessWindowHint); // set QML file setSource(QUrl("main.qml")); } MainWindow::~MainWindow() { }Главное.qml
import QtQuick 1.0 Rectangle { id: root width: 250 height: 250 // completely transparent background color: "#00FFFFFF" border.color: "#F00" border.width: 2 Rectangle { id: ball height: 50; width: 50 x: 100 color: "#990000FF" radius: height / 2 } SequentialAnimation { running: true; loops: Animation.Infinite NumberAnimation { target: ball; property: "y"; to: root.height - ball.height; duration: 1000; easing.type: Easing.OutBounce } PauseAnimation { duration: 1000 } NumberAnimation { target: ball; property: "y"; to: 0; duration: 700 } PauseAnimation { duration: 1000 } } }Transp-qml.pro
QT += core gui declarative TARGET = transp-qml TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h OTHER_FILES += main.qmlСкриншот результата:
По крайней мере в Qt 5.3 вам не нужно ничего такого сложного, как в предыдущих ответах:
Window { flags: Qt.ToolTip | Qt.FramelessWindowHint | Qt.WA_TranslucentBackground color: "#00000000"Дело сделано. (Возможно, вы захотите изменить
ToolTip. Я использую его, потому что делаю подсказки.)
Я наконец нашел простой способ нарисовать пару красных / синих прямоугольников, оставляя окно прозрачным.
Draw_rectangles.qml
import Qt 4.7 Item { Rectangle { opacity: 0.5 color: "red" width: 100; height: 100 Rectangle { color: "blue" x: 50; y: 50; width: 100; height: 100 } } }Победа.cpp :
#include <QApplication> #include <QDeclarativeView> #include <QMainWindow> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow window; QDeclarativeView* v = new QDeclarativeView; window.setCentralWidget(v); v->setSource(QUrl::fromLocalFile(("draw_rectangles.qml"))); window.setStyleSheet("background:transparent;"); window.setAttribute(Qt::WA_TranslucentBackground); window.setWindowFlags(Qt::FramelessWindowHint); window.show(); return app.exec(); }Win.pro :
TEMPLATE += app QT += gui declarative SOURCES += win.cppСохраните эти файлы в том же каталоге и выполните
qmake, а затемmakeдля компиляции приложения.
Я использую Qt 5.3 как с C++, так и с QML и обнаружил, что мне нужно вызвать QQuickWindow::setDefaultAlphaBuffer. Это должно быть сделано до создания первого
QQuickWindow, поэтому в C++, а не QML. Окноcolorиflags, вероятно, можно было бы установить в QML, но я решил поместить весь код для прозрачности winow в одно место следующим образом:QQuickView view; QQuickWindow::setDefaultAlphaBuffer(true); view.setColor(Qt::transparent); view.setFlags(m_View.flags() | static_cast<Qt::WindowFlags>(Qt::WA_TranslucentBackground));


Comments