My problem:
I want to customize the way the title bar
works and looks for my application.
My idea:
I created a new QWidget
form in Qt Designer
and added a QWidget
to it. I added the following code in constructor:
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(20);
effect->setXOffset(0);
effect->setYOffset(0);
setGraphicsEffect(effect);
which makes the outer widget transparent and adds shadow to my inner widget. From this on I can create a custom title bar widget which I can implement however I want.
This is the result:
My issue
I want to make this usable from the designer as a main window and the QWidget
doesn't allow me to add FROM THE DESIGNER tool bars
, menu bar
and status bar
.
What I thought about was adding a QMainWindow widget as a child widget for the outer QWidget(which is transparent and acts as support for my shadow(the shadow is drawn on it)). I did this successfully but only from code:
QMainWindow *centralwidget = new QMainWindow();
centralwidget->setStyleSheet("background-color: lightgray;");
centralwidget->setGeometry(0, 0, 50, 20);
centralwidget->setWindowFlags(Qt::Widget);
this->layout()->addWidget(centralwidget);
QMenuBar *menuBar = new QMenuBar(centralwidget);
menuBar->addAction("Action");
QStatusBar *statusBar = new QStatusBar;
statusBar->showMessage("Status bar here");
centralwidget->addToolBar("tool bar");
centralwidget->setMenuBar(menuBar);
centralwidget->setStatusBar(statusBar);
This is the result:
My question:
How can I achieve this result from Qt Designer
? Is it possible to promote a QWidget
to QMainWindow
? I cannot think to another way of doing it... It is really important for me to make it usable from Qt Designer
because I intend to make it a template widget and be able to create e.g. a new QCustomMainWindow
form Qt Creator
just like you can create a QWidget
or a QMainWindow
.
Please help!
QMainWindow
, and then apply the appropriate flags to it. QMainWindow is a subclass ofQWidget
. If it can't be done easily in the designer, it is pretty painless to do in code. Do it in your constructor right after theui->setup()
call. – Dispenseapply the appropriate flags
part? As you can see, in order to have the shadow I need to paint theQMainWindow
on top of aQWidget
while still keeping theQt Designer
features in place. This is what I don't know. – Drandell