首先先了解一下什么是信号和槽函数机制?
信号和槽函数是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其他工具包的重要地方。信号和槽是 QT 自行定义的一种通信机制,它独立于标准的 C/C++ 语言,因此要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler)的 QT 工具,该工具是一个 C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
现在简单讲解一下比较常用的三种方式去体现。
①connect使用指针(c++98标准)
首先定义一个按钮控件pushbutton,并定义槽函数去实现myslot();
QPushButton *m_pPushButton = nullptr;
m_pPushButton = new QPushButton("click",this);
connect(m_pPushButton ,&QPushButton::released,this,&MainWidget::soltClicked);
void MainWindow::slotClicked()
{
qDebug()<<"clicked pushbutton";
}
② lambda表达式 (C++11标准)
connect(m_pPushButton,&QPushButton::released,[this](){
qDebug()<<"clicked pushbutton";
})
//[ ]lambda标识符,代表把外部变量传进来,如果不传是不能被使用的
//[var]表示值传递方式捕捉变量var;
//[&var]表示引用传递捕捉变量var;
//[=]表示值传递方式捕捉所以父作用域的变量(包括this);
//[this]表示值传递方式捕捉当前的this指针;
//[&]表示引用值传递方式捕捉所有父作用域的变量(包括this);
//()参数列表
③使用宏 (C++ 98标准)
connect(m_pPushButton,SIGNAL(Clicked(bool)),this,SLOT(soltClicked()));
建议:由于使用宏并不会做错误检查,所以不建议使用
结果显示都能达到一样的效果:
:Clicked pushbutton
最后,希望能有效的帮助你理解信号与槽函数机制。