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()
槽函数