Qt transparent window graphic card
-
Hello,
I have a transparent application window in Qt. This windows contains elements such as rectangles and buttons. On some computers, everything works fine (the main window is transparent and I see the items on the window). On other computers, instead of being transparent, the window is black.
Important: Transparency seems to work if the transparent object is a rectangle in the application window but not if its the ApplicationWindow.
-
I know these other computers can manage window transparency because I tried other commercial software with transparency and it works. I just don't know how to do it with Qt 5.
-
Worst case scenario: I guess it's related to the graphic card. In my software, could I ask if the graphic card has the required specs (I don't know what spec is required for transparency) ? How could I do that ?
Here is a simple code to reproduce the problem:
ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Hello World") color:"transparent" Rectangle { width: 150 height: 150 color:"red" } }
Thank you very much,
Alex
-
-
Hi,
What version of Qt are you using and what OS are you targeting ?
-
And on what Windows version do you have that problem ?
-
On Windows 8 and Windows 10 I don't have this problem. However it may be a coincidence.
Indeed, I don't have this problem on a Win7 desktop (NVIDIA graphic card) I have but I have the problem on another Win7 desktop (ATI RADEON).I have seen similar problem in other threads (transparent appears as black) but no solution seemed to work.
Thanks,
Alex
-
There seems to be a bug report here from 2013 but it's not my field of expertise and I don't see any solution.
https://bugreports.qt.io/browse/QTBUG-28214 -
I couldn't test right now but there are reports it works if the aero theme is set:
http://stackoverflow.com/questions/42059468/qt-quick2-window-cant-be-transparent-without-aeroHowever, I can't ask people to set an aero theme. Is it possible to force something similar in my Qt code ?
Also, there is some software that use transparency (and works) on all these computers without the aero theme. But I don't think they were designed with Qt. One of them was designed with Qt (I see the file QtCore4.dll) but it was Qt4. I think the bug is for Qt5.
Thanks !
-
Can you try forcing your application to use the desktop OpenGL ?
-
@SGaist Thank you for your answer.
From this link (http://doc.qt.io/qt-5/configure-options.html), they say to do "configure.bat -opengl desktop". I didn't do that, since I don't know how to do that but I found another way to include OpenGL, see the following.
And from here (http://doc.qt.io/qt-5/qtopengl-index.html), they say for opengl : "Warning: This module should not be used anymore for new code. Please use the corresponding OpenGL classes in Qt GUI."
From this same page, I include "#include <QtOpenGL>" and "QT += opengl" but it didn't change anything. I think it's normal since as I understand I should create a QWindow instead of my Application Window. However, I did not find how to mix QWindow and QML.Thank you very much,
Alex
-
No need for compilation, just set the
Qt::AA_UseDesktopOpenGL
application attribute.. -
@SGaist Thank you for your answer.
I tried setting Qt::AA_UseDesktopOpenGL in my QML with flags but it did not work.
I the documentation it says: "This attribute must be set before Q(Gui)Application is constructed."
So I tried the following but the window is still black instead of being transparent. I guess it was the right way to set this attribute but I'm not sure.Thank you again,
Alex
int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL, true); QApplication app(argc, argv); QQmlApplicationEngine engine; ...
-
Do you know what graphic card is used when your application fails ?
-
Ok, then you should take a look at the bug report system to see if it's something known.
Note that Vista has reached EOL on April 11 this year.