• 5594阅读
  • 3回复

[讨论]关于 Qt Creator 2.2.1 中信号与槽的链接 [复制链接]

上一主题 下一主题
离线yinrenjieone
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-06
关键词: 编译没有
引子:
http://www.qtcn.org/bbs/read-htm-tid-44679.html
http://www.qtcn.org/bbs/read-htm-tid-44680.html

想起来,当我们在Qt Creator中点击Go to slot的时候,Qt Creator都做了什么呢:
1.添加private slots声明:
void on_pushButton_abc_clicked();
2.创建void MainWindow::on_pushButton_abc_clicked(){}函数
3.没有显式的connect()调用

可能Qt Creator在编译时会自动将void on_pushButton_abc_clicked();这种规范命名的槽函数与pushButton_abc对象的clicked()信号链接

结论:
如果定义了action_abc对象
并且槽函数也声明为on_action_abc_triggered()
那么就会自动在编译时将action_abc的triggered()信号与该槽链接
从而无需在代码中添加connnect(action_abc, SIGNAL(triggered()), this, SLOT(on_action_abc_triggered()));的调用
如果添加了则反而引起warning

以上个人意见,供大家讨论
离线dbzhang800

只看该作者 1楼 发表于: 2011-08-06
针对你的红色强调部分,

建议:阅读下manual

void QMetaObject::connectSlotsByName ( QObject * object ) [static]
离线ppdayz

只看该作者 2楼 发表于: 2011-08-06
回 楼主(yinrenjieone) 的帖子
楼主少说了关键的东西。
QMetaObject::connectSlotsByName(proScriptAndAction);
void QMetaObject::connectSlotsByName ( QObject * object ) [static]
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form
void on_<object name>_<signal name>(<signal parameters>);

在头文件里会有这个函数的调用的,不然的话是不会自己连接的
你可以自己去找下,ui_xxxxxx.h
离线yinrenjieone

只看该作者 3楼 发表于: 2011-08-06
Re:回 楼主(yinrenjieone) 的帖子
引用第2楼ppdayz于2011-08-06 15:25发表的 回 楼主(yinrenjieone) 的帖子 :
楼主少说了关键的东西。
QMetaObject::connectSlotsByName(proScriptAndAction);
void QMetaObject::connectSlotsByName ( QObject * object ) [static]
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form
void on_<object name>_<signal name>(<signal parameters>);
.......

哇哦~ 原来是这样……
快速回复
限100 字节
 
上一个 下一个