实现一个widget只能被打开一个(单例模式)

开发环境:qt5,mingw

功能:点击按钮打开一个widget窗口,但widget只能打开一个

知识点:单例模式,信号槽

#ifndef FORM_H
#define FORM_H
#include <QWidget>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();
    static Form* getInstance();
private:
    Ui::Form *ui;
    static Form* myInstance;
};

#endif // FORM_H
#include "Form.h"
#include "ui_Form.h"
Form *Form::myInstance=NULL;
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}

Form::~Form()
{
    delete ui;
}

Form *Form::getInstance()
{
    if(myInstance==NULL){
        myInstance=new Form();
    }
    return myInstance;
}

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"Form.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void onBtnClick();
private:
    Ui::MainWindow *ui;
    Form *fm;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //让onBtnClick 接受 bnt2的点击信号
    connect(ui->btn2,&QPushButton::clicked,this,&MainWindow::onBtnClick);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onBtnClick()
{
    fm=Form::getInstance();
    fm->show();
}

#QT##C##单例模式#
全部评论

相关推荐

Vincent777...:实习经历可以考虑放上去,对于软件使用方面可以细化一些,比如调整为:熟悉基于LSDYNA的瞬态动力学仿真分析,熟悉基于WORKBENCH的结构拓扑优化
我的简历长这样
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
昨天 12:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务