QT5 学习笔记一

本文深入讲解了Qt框架的三大核心概念:信号与槽机制、正则表达式和布局管理。详细解析了信号与槽如何实现对象间的通信,正则表达式在字符串处理中的应用,以及不同布局类的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、信号和槽机制(Signal&Slot)
Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制。信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数。
※信号与槽机制的连接方式
(1)一个信号可以与另一个信号相连;
(2)同一个信号可以与多个槽相连;
(3)同一个槽可以响应多个信号;
※常用的连接方式

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

signal为对象sender的信号,slot为对象receiver的槽。
eg.圆的半径求面积

private:
    QLabel *label1,*label2;
    QLineEdit *lineEdit;
    QPushButton *button;
private slots:
    /*自定义槽函数*/
    void showArea();
    label1=new QLabel(this);
    label1->setText(tr("请输入圆的半径:"));
    lineEdit=new QLineEdit(this);
    label2=new QLabel(this);
    button=new QPushButton(this);
    button->setText(tr("显示对应圆的面积"));
    QGridLayout *mainLayout=new QGridLayout(this);
    mainLayout->addWidget(label1,0,0);
    mainLayout->addWidget(lineEdit,0,1);
    mainLayout->addWidget(label2,1,0);
    mainLayout->addWidget(button,1,1);
    /*连接按钮和槽函数*/
    connect(button,SIGNAL(clicked()),this,SLOT(showArea()));
void CircleArea::showArea()
{
    bool ok;
    QString tempStr;
    QString valueStr=lineEdit->text();
    int valueInt=valueStr.toInt(&ok);
    double area=valueInt*valueInt*PI;
    label2->setText(tempStr.setNum(area));
}

二、正则表达式
使用使用正则表达式可以方便地完成处理字符串的一些操作,如验证、查找、替换、分割等。
Qt的QRegExp类是正则表达式的表示类。
正则表达式由表达式(expressions)、量词(quantifiers)、断言(assertions)组成。
eg.登录(用户名、密码)

    //用户名、密码输入满足条件
    QRegExp reg1("[a-zA-Z0-9]{3,8}");//用户名输入条件需要满足的正则表达式
    lineEdit1->setValidator(new QRegExpValidator(reg1,this));
    QRegExp reg2("[a-zA-Z0-9]{6,15}");//密码输入条件需要满足的正则表达式
    lineEdit2->setValidator(new QRegExpValidator(reg2,this));
    /*QRegExp类是正则表达式的表示类*/
    if((QRegExp(reg1).exactMatch(lineEdit1->text()))&&(QRegExp(reg2).exactMatch(lineEdit2->text())))
    {
        QMessageBox::information(this, "登录", "登录成功!");
    }
    else
    {
        QMessageBox::warning(this, tr("警告!"),tr("用户名或密码错误!"),QMessageBox::Yes);
        //清空用户名、密码
        lineEdit1->clear();
        lineEdit2->clear();
    }

三、布局管理
Qt提供了QHBoxLayout类、QVBoxLayout类及QGridLayout类等的基本布局管理,分别是水平排列布局、垂直排列布局和网格排列布局。
在这里插入图片描述
※QHBoxLayout

QWidget *window= new QWidget;
QPushButton *button1= new QPushButton("One");
QPushButton *button2= new QPushButton("Two");
QPushButton *button3= new QPushButton("Three");
QPushButton *button4= new QPushButton("Four");
QPushButton *button5= new QPushButton("Five");
QHBoxLayout *layout= new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);
window->show();

※QGridLayout

QWidget *window = new QWidget;
    QPushButton *button1 = new QPushButton("One");
    QPushButton *button2 = new QPushButton("Two");
    QPushButton *button3 = new QPushButton("Three");
    QPushButton *button4 = new QPushButton("Four");
    QPushButton *button5 = new QPushButton("Five");
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(button1, 0, 0);
    layout->addWidget(button2, 0, 1);
    layout->addWidget(button3, 1, 0, 1, 2);
    layout->addWidget(button4, 2, 0);
    layout->addWidget(button5, 2, 1);
    window->setLayout(layout);
    window->show();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值