QT中的按键事件:
新建一个干净的工程
首先在mainwindow.cpp中加入QMessageBox.h
1.在MainWindow 类的头文件中添加事件处理函数的声明,这块要用slots宏声明这是一个信号槽的响应函数,到时候有信号发生就会在信号槽中找到这个信号
public slots:
void click_func();
2.在MainWindows类的构造函数中连接信号和信号处理函数
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(click_func()));
3.在MainWindow类中定义func函数的函数体
void MainWindow::click_func()
{
QMessageBox::information(NULL, "Tiltle", "Content", QMessageBox::Yes|QMessage::No, QMessageBox::Yes);
}
完毕
=====================================================================
1)ClickButton()了宏声明中我们加入 slots,此宏表示信号槽机制中响应函数,称之为槽。
注意这里如果不加slots宏,编译连接一点问题都没有,但是连接信号和槽就会失败,返回 false。
2)connect函数,把一个信号和槽连接起来。
bool connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender 发送者,本例中就是pushButton对象
signal 信号,本例中是指发送对象的clicked()信号
receiver接收者,本例中就是MainWindow对象
slot 槽,本例中就是我们写的click_func函数
关于信号和槽
A.一个信号可个以连接多槽,注意这种情况下,各个槽的调用顺序是不确定的。
B.多个信号也可以连接一个槽。
C.一个信号可以连接另一个信号 connect(edit, SIGNAL(textChanged(QString &)), this, SIGNAL(updateRecord(QString &)));
D.连接是可以被移除的 disconnect(lcd, SIGNAL(overflow()), this, SLOT(xxx())); 当删除对象的时候,qt会自动移除和这个对象所有的连接
E. 建立连接的时候,参数是直接传递到槽(或者另一个信号)的。
F.把信号连接到槽,他们的参数类型必须相同,但有个例外,信号参数比槽参数多,多余的参数会被忽略掉。注意这个参数不要带参数名,仅声明即可。
G.注意connect()函数其实是在QObject中实现的,并不局限于GUI,因此,只要我们继承QObject类,就可以使用信号槽机制了
H.一定要注意不要产生递归,否则程序马上会栈溢出崩溃!
ps. 发射信号用 emit func(param); func函数的声明类似这样:signals: void func(int param); 注意他没有函数体。