自定义信号和槽

自定义槽

槽可以是任何成员函数、普通全局函数、静态函数

槽函数和信号的参数和返回值要一致

由于信号是没有返回值的, 槽函数也一定没有返回值

示例:在点击按钮的时候执行自定义的槽函数,自定义的槽函数为弹出一个弹框

 .h文件:

#pragma once 
#include <QtWidgets/QWidget>
#include "ui_qtwidgetsapplication1.h"
#include <QPushButton>
#include <QFile>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
#include <QString>
#include <QMessageBox> 

class QtWidgetsApplication1 : public QWidget
{
    Q_OBJECT


public:
    QtWidgetsApplication1(QWidget* parent = nullptr);
    ~QtWidgetsApplication1();
    QString ReadQssFile(const QString& filePath);


private:
    Ui::QtWidgetsApplication1Class* ui; 

public slots:
      void messagebox();// 自定义槽函数 
};

 

 .cpp文件:

#include "qtwidgetsapplication1.h"


QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent)
    : QWidget(parent)
{
    ui->setupUi(this);


    // 设置窗口标题
    setWindowTitle("测试窗口");
    // 重设大小
    resize(400, 500);

    // x轴向右移动500,y轴向下移动200 
    move(500, 200);

    // 设置背景色
    setStyleSheet("QWidget{background-color:beige}");

    QPushButton* closeButton = new QPushButton(tr("测试"), this); // 创建指定父对象的QPushButton对象,使用this作为父对象
    closeButton->setFixedSize(100, 30); // 大小设置
    closeButton->move(220, 0); // 右上角
    // 样式设置
    closeButton->setStyleSheet(ReadQssFile(":/QtWidgetsApplication1/QPushButton.qss"));
    // 点击时关闭
    /*  connect(closeButton,
        &QPushButton::clicked,
        this,
        &QtWidgetsApplication1::close);*/
    connect(closeButton, &QPushButton::clicked,
        this, &QtWidgetsApplication1::messagebox);

}

/// <summary>
/// 自定义槽函数,当按钮发送点击信号的时候触发
/// </summary>
void QtWidgetsApplication1::messagebox()
{
    //提问对话框 利用返回值判断用户按键类型
    if (QMessageBox::Save == QMessageBox::question(this, "提问", "要保存吗?", QMessageBox::Save | QMessageBox::No, QMessageBox::No)) {
        //信息对话框
        QMessageBox::information(this, "提示", "保存成功");
    }
    else {
        //警告对话框
        QMessageBox::warning(this, "警告", "未保存");
 
    }
}
QtWidgetsApplication1::~QtWidgetsApplication1()
{
    delete ui;
    ui = nullptr;
}


QString QtWidgetsApplication1::ReadQssFile(const QString& filePath)
{
    QString strStyleSheet = "";
    QFile file(filePath);
    file.open(QFile::ReadOnly);
    if (file.isOpen())
    {
        strStyleSheet = QLatin1String(file.readAll());
    }
    return  strStyleSheet;
}

 

 效果:

 自定义槽和信号

 下面的例子是通过点击按钮来调用自定义槽函数和信号

 .h文件:

#pragma once 
#include <QtWidgets/QWidget>
#include "ui_qtwidgetsapplication1.h"
#include <QPushButton>
#include <QFile>
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
#include <QString>
#include <QMessageBox> 

class QtWidgetsApplication1 : public QWidget
{
    Q_OBJECT


public:
    QtWidgetsApplication1(QWidget* parent = nullptr);
    ~QtWidgetsApplication1();
    QString ReadQssFile(const QString& filePath);


private:
    Ui::QtWidgetsApplication1Class* ui; 

public slots:
      void messagebox();// 自定义槽函数
      void custom_signal(const QString& message);// 自定义个带参数的槽函数,对应的信号也应该是带同类型的参数
signals:
 
    void custom_clicked(const QString& num);

};

 

.cpp文件 

 

#include "qtwidgetsapplication1.h"


QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent)
    : QWidget(parent)
{
    ui->setupUi(this);


    // 设置窗口标题
    setWindowTitle("测试窗口");
    // 重设大小
    resize(400, 500);

    // x轴向右移动500,y轴向下移动200 
    move(500, 200);

    // 设置背景色
    setStyleSheet("QWidget{background-color:beige}");

    QPushButton* closeButton = new QPushButton(tr("测试"), this); // 创建指定父对象的QPushButton对象,使用this作为父对象
    closeButton->setFixedSize(100, 30); // 大小设置
    closeButton->move(220, 0); // 右上角
    // 样式设置
    closeButton->setStyleSheet(ReadQssFile(":/QtWidgetsApplication1/QPushButton.qss"));
    // 点击时关闭
    /*  connect(closeButton,
        &QPushButton::clicked,
        this,
        &QtWidgetsApplication1::close);*/
    connect(closeButton, &QPushButton::clicked,
        this, &QtWidgetsApplication1::messagebox);

    // 接收到点击信号时做出反应
    connect(this,
        SIGNAL(custom_clicked(const QString&)),
        this,
        SLOT(custom_signal(const QString&)));

}

/// <summary>
/// 自定义槽函数,当按钮发送点击信号的时候触发
/// </summary>
void QtWidgetsApplication1::messagebox()
{
    // 在点击按钮的时候触发自定义的信号,
    emit custom_clicked("触发自定义的信号"); 
}

/// <summary>
/// 自定义的槽函数,主要是接受来自自定义的信号:custom_clicked
/// </summary>
/// <param name="message"></param>
void QtWidgetsApplication1::custom_signal(const QString& message)
{
    QMessageBox::information(this, "提示", message);
}

QtWidgetsApplication1::~QtWidgetsApplication1()
{
    delete ui;
    ui = nullptr;
}


QString QtWidgetsApplication1::ReadQssFile(const QString& filePath)
{
    QString strStyleSheet = "";
    QFile file(filePath);
    file.open(QFile::ReadOnly);
    if (file.isOpen())
    {
        strStyleSheet = QLatin1String(file.readAll());
    }
    return  strStyleSheet;
}

 

效果:

  

posted @ 2023-05-13 16:05  安静点--  阅读(108)  评论(0编辑  收藏  举报