需求如下:
QMainWindow无边框,但是又要菜单栏、多窗口、dockwidget。
这时候无边框就很蛋疼,不好拉伸,没地方拖动。
那么变个思路,把QMainwindow嵌入到qwidget中,然后在qwidget中layout实现嵌套,这时候就灵活多了,截图:
代码:
Widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "mainwindow.h"
#include <QBoxLayout>
#include <QLabel>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QVBoxLayout *vl = new QVBoxLayout;
QLabel *lbl = new QLabel("this is label",this);
vl->addWidget(lbl);
pMwin = new MainWindow(this);
pMwin->show();
vl->addWidget(pMwin);
lbl = new QLabel("this is label bottom",this);
vl->addWidget(lbl);
setLayout(vl);
}
Widget::~Widget()
{
delete ui;
}
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() <<"flags:"<<windowFlags();
setWindowFlag(Qt::FramelessWindowHint);
qDebug() <<"flags+frameless:"<<windowFlags();
setWindowFlags(Qt::FramelessWindowHint |Qt::Widget);
qDebug() <<"only frameless:"<<windowFlags();
}
MainWindow::~MainWindow()
{
delete ui;
}
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}