QT信号槽机制

QT信号槽机制

例如将按钮点击信号连接到文本框的更新槽函数上 点击时按钮发出点击信号 文本框接收信号执行更新操作

下面通过一个简单的计算球体体积的例子来介绍信号槽机制:

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

#include <qlabel.h>
#include <qpushbutton.h>
#include <qlineedit.h>

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    QLabel *lab1, *lab2; // 标签
    QLineEdit *lEdit; // 输入框
    QPushButton *pbt; // 按钮

private slots:
    void CalcBallVolume(); // 槽函数
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

#include  <QGridLayout> // 用于表格布局

const static double PI = 3.1415;

Dialog::Dialog(QWidget *parent)
    : QDialog(parent) {

    // 创建一个标签 提示用户输入圆球半径
    lab1 = new QLabel(this);
    lab1->setText(tr("请输入圆球半径:"));

    lab2 = new QLabel(this);
    lab2->setText(tr("计算结果为:"));

    lEdit = new QLineEdit(this);

    pbt = new QPushButton(this);
    pbt->setText(tr("开始计算"));

    QGridLayout *mlay = new QGridLayout(this);
    mlay->addWidget(lab1, 0, 0);
    mlay->addWidget(lEdit, 0, 1);
    mlay->addWidget(lab2, 1, 0);
    mlay->addWidget(pbt, 1, 1);

    connect(lEdit, SIGNAL(textChanged(QString)), this, SLOT(CalcBallVolume()));
}

Dialog::~Dialog() {

}

void Dialog::CalcBallVolume() {
    bool isLoop;
    QString tempstr;
    QString valueStr = lEdit->text();
    int valueInt = valueStr.toInt(&isLoop);
    double sum = 4.0 / 3.0 * PI * valueInt * valueInt * valueInt;
    lab2->setText(tempstr.setNum(sum));
}

lEdit 中的文本发生变化时,会触发 CalcBallVolume() 槽函数

posted @   acbh  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示