Frameless and transparent window

c++, qt, qtwidgets, transparency

Solution

Try this:

setWindowFlags(Qt::Widget | Qt::FramelessWindowHint);
setParent(0); // Create TopLevel-Widget
setAttribute(Qt::WA_NoSystemBackground, true);
setAttribute(Qt::WA_TranslucentBackground, true);  
setAttribute(Qt::WA_PaintOnScreen); // not needed in Qt 5.2 and up

Problem

I want to open a frameless and transparent window when I click a button. I've got a new window to open up when I press a button, but I can't seem to get the frameless and transparent part working. main.cpp: ``` #include "learnwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); LearnWindow w; w.show(); return a.exec(); } ``` Main window header file: ``` #ifndef LEARNWINDOW_H #define LEARNWINDOW_H #include <QMainWindow> #include <transwindow.h> namespace Ui { class LearnWindow; } class LearnWindow : public QMainWindow { Q_OBJECT public: explicit LearnWindow(QWidget *parent = 0); ~LearnWindow(); private slots: void on_pushButton_clicked(); private: Ui::LearnWindow *ui; TransWindow *winTrans; public slots: void openTrans(); }; #endif // LEARNWINDOW_H ``` Main window source file: ``` #include "learnwindow.h" #include "ui_learnwindow.h" LearnWindow::LearnWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::LearnWindow) { ui->setupUi(this); } LearnWindow::~LearnWindow() { delete ui; } void LearnWindow::openTrans() { winTrans = new TransWindow (this); //winTrans->setWindowTitle("NewWin"); // winTrans->setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint); //winTrans->setAttribute(Qt::WA_TranslucentBackground,true); //winTrans->setAutoFillBackground(false); //winTrans->setStyleSheet("background:transparent;"); winTrans->show(); } void LearnWindow::on_pushButton_clicked() { openTrans(); } ``` Transparent window header file: ``` #ifndef TRANSWINDOW_H #define TRANSWINDOW_H #include <QDialog> namespace Ui { class TransWindow; } class TransWindow : public QDialog { Q_OBJECT public: explicit TransWindow(QWidget *parent = 0); //setWindowFlags(windowFlags()| Qt::FramelessWindowHint); ~TransWindow(); private: Ui::TransWindow *ui; }; #endif // TRANSWINDOW_H ``` Transparent window source file: ``` #include "transwindow.h" #include "ui_transwindow.h" TransWindow::TransWindow(QWidget *parent) : QDialog(parent), ui(new Ui::TransWindow) { //setWindowTitle("NewWin"); //setWindowFlags(Qt::FramelessWindowHint); //setAttribute(Qt::WA_TranslucentBackground,true); ui->setupUi(this); } TransWindow::~TransWindow() { delete ui; } ``` The commented out lines are the different things I tried. If set `Qt::FramlessWindowHint`, the program runs normally, but never opens a new window when I click the button. If I set `Qt::WA_TranslucentBackground`, the new window will open up when the button is pressed, but the background of the new window is black, not transparent. I am using: - Ubuntu 12.04 - Qt 5.0.2 (64-bit) - Qt creator 2.7.1

Original source