我正在尝试移植一个简单的Qt Quick应用程序从Qt4.8到Qt5.0beta。我的初始(Qt4.8)代码类似于下面的代码:
main.cpp将在半透明背景的无边框窗口中播放QDeclarativeView
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include <QtDeclarative>
#include <QDeclarativeContext>
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/main.qml"));
viewer.setWindowFlags(Qt::FramelessWindowHint);
viewer.setAttribute(Qt::WA_TranslucentBackground);
viewer.setStyleSheet("background:transparent;");
viewer.setResizeMode(QDeclarativeView::SizeViewToRootObject);
viewer.showExpanded();
return app->exec();
}main.qml将只在另一个透明矩形内显示一个红色矩形。
import QtQuick 1.1
Rectangle {
width: 360
height: 360
color: "transparent"
Rectangle
{
x: 125
y: 122
width: 110
height: 116
anchors.centerIn: parent
color: "red"
radius: 27
}
Text {
color: "black"
text: qsTr("Press me!")
font.pointSize: 14
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}为了使其与Qt5兼容,几乎不需要做任何更改。(为了不错过什么,我关注了http://qt-project.org/doc/qt-5.0/portingqmlapp.html qt-project.org )
现在main.cpp类似于:
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QtWidgets/QtWidgets>
#include <QtWidgets/QLabel>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/main.qml"));
viewer.setWindowFlags(Qt::FramelessWindowHint);
viewer.showExpanded();
return app.exec();
}在main.qml中,只替换了一行。
import QtQuick 2.0但我找不到保持透明度的方法
setAttribute(Qt::WA_TranslucentBackground);
setStyleSheet("background:transparent;");setAttribute和setStyleSheet可用于QDeclarativeView ( QWidget),但不可用于QQuickView ( QWindow)
发布于 2012-12-28 21:47:04
试试我的QuickWidget,如果它对你有帮助的话:
http://code.google.com/p/quickwidget/
或者,更好的方法是使用来自Qt 5.3+的QQuickWidget。
https://stackoverflow.com/questions/13725644
复制相似问题