实现一个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##单例模式#
全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
Twilight_m...:还是不够贴近现实,中关村那块60平房子200万怎么可能拿的下来,交个首付还差不多
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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