首页 > 其他分享 >QT信号槽机制

QT信号槽机制

时间:2024-04-23 23:11:06浏览次数:32  
标签:QT 信号 lab2 Dialog new 机制 include mlay lEdit

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

标签:QT,信号,lab2,Dialog,new,机制,include,mlay,lEdit
From: https://www.cnblogs.com/acbh/p/18154061

相关文章

  • 编译用于Qt的opencv问题解决
    CMakewasunabletofindabuildprogramcorrespondingto"MinGWMakefiles"解释:这个错误表明CMake无法找到用于生成Makefiles的构建程序。在使用CMake生成项目文件时,如果指定了"MinGWMakefiles",CMake需要一个Make工具来构建项目,而这个工具通常是由MinGW提供的。如......
  • QT 程序使用 Framebuffer 显示 UI
    桌面版本的Linux都会带有类似xorg这样的图形服务,桌面程序和应用程序的UI都是通过图形服务渲染的。但是有些系统为了减少系统体积、提升性能,会把图像服务和没有用到的模块裁剪掉,如:嵌入式系统。没有图形服务程序就不能直接渲染显示UI,这时候我们可以使用Framebuffer进行渲......
  • .pro文件管理qt项目,快捷设置软件名称和版本号
    效果: .cpp文件代码:{ui->setupUi(this);//设置软件名称和版本号QStringversion=QCoreApplication::applicationVersion();QStringname=QCoreApplication::applicationName();QStringverInfo="快捷设置软件名称和版本号-版本:V"+vers......
  • 用Python程序如何捕获Ctrl+C终止信号?
    对于一些连续运行或者长时间运行的Python程序而言,如服务器的后端,或者是长时间运行的科学计算程序。当我们涉及到一些中途退出的操作时,比如使用Ctrl+C来退出正在运行的程序。这种场景的出现一般有两个可能性:一是程序出现了问题,需要终止程序来对其进行调整。另一种是程序本身是正......
  • 异常机制(Exception)-(未完待续)
    什么是异常认识异常实际生活中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求,你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据集库的数据,数据可能是空的等等。我们的程序在跑着,内存或硬盘可能满了等等……软件程序在运......
  • Qt short int 数组大小端转换(qbswap)
    在以下情形中,展示了如何将 shortint 数组从大端序转换为小端序,或者从小端序转换为大端序。1#include<iostream>2#include<cstdint>3intmain()4{5constexprintsize=4;6std::uint16_tarr[size]={0x1234,0x5678,0x9abc,0xdef0};7/......
  • [qt]画网格,过分简单了
    源码:#include<QImage>#include<QPainter>voiddrawLines(QImage&image){QPainterpainter(&image);QPenpen(Qt::black);pen.setWidth(2);  //设置线宽2dotpainter.setPen(pen);//绘制水平线,分8份for(inty=89;y<ima......
  • Linux下切换qt程序的字母库
    问题: 在程序切换俄语时字符串都显示空白,说明系统中未有俄语字体库,先下载一个带有俄语的字体库,直接放在/usr/lib/fonts/目录下.  俄语可以正常切换显示之后,却改变了其他语言的字体格式解决:     需要在切换语言时也动态切换原始字体库和俄语字体库......
  • Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分析
    QTransform用于图形绘制,它定义了如何平移(translate)、缩放(scale)、切变(shear)、旋转(rotate)或投射(project)坐标系。注意:QTransform是作用于坐标系,不是直接作用于图形。实际运用中我们可以通过QPainter、QGraphicsView、QGraphicsItem实现图形的平移、缩放、旋转等操作,但是需要从......
  • Qt 使用Snap7
    1稳定版本snap7源码下载https://sourceforge.net/projects/snap7/2整合到QT项目中2.1解压下载的文件得到snap7-full-1.4.2,放到qt项目文件目录下2.2从snap7-full-1.4.2目录下找到snap7.cpp、snap7.dll、snap7.h、snap7.lib四个文件并放到qt项目目录下snap7.cp......