I'm quite new to qt and c++ and I've encountered a problem that I can't seem to figure out. I'm wanting to open a frameless and transparent window when I click a button on the main ui. I've got the code working to open a new window when I press a button on the main ui but I can't seem to get the frameless and transparent part working.
Here is the source codes for the small program that I wrote to learn this
main.cpp
#include "learnwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); LearnWindow w; w.show(); return a.exec(); }
Here is the LearnWindow.h
#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
Here is learnwindow.cpp
#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(); }
Here is the transwindow.h
#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
And here is transwindow.cpp
#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; }
In the different source codes you'll see commented out lines which is the different things that I've tried. For the most part the problem is, if I un-comment out any of the lines that try to set the "Qt::FramlessWindowHint" the program runs normally but never opens a new window when I click the button on the main ui.
If I un-comment out any of the lines where I set the "Qt::WA_TranslucentBackground" the new window will open up when when the button is pressed in the main ui but the background of the new window is black, not transparent.
Other info that may be pertinent: linux: ubunto 12.04 qt 5.0.2 (64-bit) qt creator 2.7.1
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With