QT中如何在主窗口中添加子窗口

1.方法

        原理其实很简单,和在窗口上动态(代码的形式)添加控件的方法一样,但需要设置一下子窗口的属性:

在子窗口构造函数中添加代码:

setWindowFlags(Qt::FramelessWindowHint);

作用:隐藏子窗口的标题栏和边框,如果不隐藏的话,子窗口无法嵌套到其它控件上面!

2.举例

在项目中添加一个子窗口(sub1)

QT中如何在主窗口中添加子窗口_第1张图片

QT中如何在主窗口中添加子窗口_第2张图片

 QT中如何在主窗口中添加子窗口_第3张图片

 QT中如何在主窗口中添加子窗口_第4张图片

子窗口界面设计:

QT中如何在主窗口中添加子窗口_第5张图片​​​​​​​ 

然后代码如下:

2.1.主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#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 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

 4.运行效果

QT中如何在主窗口中添加子窗口_第6张图片

 在pushbutton3(最右边控件)上面显示子窗口,也可以显示在其它控件上,方法几乎一样!

你可能感兴趣的:(qt,qt,ui,开发语言)