一、信号和槽机制(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();