1.方法
原理其实很简单,和在窗口上动态(代码的形式)添加控件的方法一样,但需要设置一下子窗口的属性:
在子窗口构造函数中添加代码:
setWindowFlags(Qt::FramelessWindowHint);
作用:隐藏子窗口的标题栏和边框,如果不隐藏的话,子窗口无法嵌套到其它控件上面!
2.举例
在项目中添加一个子窗口(sub1)
子窗口界面设计:
然后代码如下:
2.1.主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "sub1.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
//virtual bool event(QEvent *e) override;
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
Sub1 *s1;
};
#endif // MAINWINDOW_H
2.2.主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "sub1.h"
#include "ui_sub1.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
s1 = new Sub1(ui->pushButton_3);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
s1->show();
}
void MainWindow::on_pushButton_2_clicked()
{
s1->hide();
}
2.3.子窗口.h
#include "sub1.h"
#include "ui_sub1.h"
Sub1::Sub1(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Sub1)
{
setWindowFlags(Qt::FramelessWindowHint);//Qt::CustomizeWindowHint|
ui->setupUi(this);
}
Sub1::~Sub1()
{
delete ui;
}
2.4.子窗口.cpp
#include "sub1.h"
#include "ui_sub1.h"
Sub1::Sub1(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Sub1)
{
setWindowFlags(Qt::FramelessWindowHint);//Qt::CustomizeWindowHint|
ui->setupUi(this);
}
Sub1::~Sub1()
{
delete ui;
}
3.main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
4.运行效果
在pushbutton3(最右边控件)上面显示子窗口,也可以显示在其它控件上,方法几乎一样!
版权归原作者 avrdpy 所有, 如有侵权,请联系我们删除。