您现在的位置是:首页 > 技术文章网站首页技术文章

[Qt]信号与槽Demo

  • WangYe
  • 2020-09-26 23:19:25
  • 201 次阅读
简述 QT中 信号与槽 实例

效果:

Dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "frame.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

    void ShowWinget();  //显示处理(槽)
/*自定义信号 signals*/
signals:
    void Test001(); //信号

private slots:
    void on_pushButton_clicked();   //信号 与 槽处理

    void on_pushButton_2_clicked(); //单纯显示操作

private:
    Ui::Dialog *ui;
    Frame *framet = nullptr;    //分配Frame 空间指针并赋值为空
};
#endif // DIALOG_H

Dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    ui->widget->setStyleSheet("background: yellow");    //设置Widget控件背景颜色
    ui->widget->setVisible(true);   //默认可见显示
}

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

void Dialog::ShowWinget()   //显示操作(槽)
{
    ui->widget->setVisible(true);   //设置可见 为 true
}

void Dialog::on_pushButton_clicked()    //处理信号与槽
{
    ui->widget->setVisible(false);
    if(framet == nullptr)
    {
        framet = new Frame(this); //new Frame空间 加上 This 表示显示在主窗口内
        framet->show(); //点击关闭弹出窗口2
        framet->move(60,60);    //显示坐标
        connect(framet, &Frame::clicked, this, &Dialog::ShowWinget);    //信号 与 槽
    }else{
        framet->show();
    }
}


void Dialog::on_pushButton_2_clicked()  //显示操作
{
    ui->widget->setVisible(true);   //设置可见 为 true
    framet->hide(); //关闭窗口2
}

Frame.h

#ifndef FRAME_H
#define FRAME_H

#include <QFrame>

namespace Ui {
class Frame;
}

class Frame : public QFrame
{
    Q_OBJECT

public:
    explicit Frame(QWidget *parent = nullptr);
    ~Frame();

signals:
    void clicked(); //发送信号

private slots:
    void on_pushButton_clicked();

private:
    Ui::Frame *ui;
};

#endif // FRAME_H

Frame.cpp

#include "frame.h"
#include "ui_frame.h"

#include "dialog.h"

Frame::Frame(QWidget *parent) :
    QFrame(parent),
    ui(new Ui::Frame)
{
    ui->setupUi(this);
}

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

void Frame::on_pushButton_clicked()
{
    emit clicked(); //声明发送信号
    close();    //执行发送信号后关闭窗口
}

main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

Dialog.ui

image.pngimage.png

Frame.ui

image.pngimage.png


上一篇:[Qt]自定义窗体

下一篇:[Qt]按钮状态

文章评论 (0)



Top