欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

qt信号传递有关问题

更新时间: 2014-01-05 02:43:28 责任编辑: Author_N1

 

Qt信号传递问题

如图,点击“预览”按钮,给箭头所指的控件发信号show_preivew。
按钮是在RegexpReplace 的Widget中,箭头所指的控件在主程序窗口中。

我在RegexpReplace类中按钮的clicked()的槽函数里面发射信号 emit show_preivew(),在主窗口中调用槽函数接收
connect(m_pRegDlg, SIGNAL(show_preivew()), this, SLOT(on_preivew()))

返回值总是false

但是如果我在RegexpReplace类中将按钮的clicked()信号与show_preivew()信号连接起来
connect(ui.pushButton, SIGNAL(clicked()), this, SIGNAL(show_preivew()));

这样在主程序中connect就是OK的,槽函数on_preview也可以响应,请问下这是为什么?第一种做法connect为什么会失败呢? 我使用了 类似于楼主的方法,两种方法均能触发正确的信号,也会响应相应的槽
但是有两点需要说明,我直接使用了一个 Dialog 嵌套了 一个 Widget。然后 把这个Widget 特化 成了 我的 Widget。这个步骤 全都是用鼠标完成的。

我真正写的 就是三行代码:
在 自己的Widget构造函数 最后一行
connect(ui->pushButton_2, SIGNAL(clicked()), this, SIGNAL(show_preivew()));


响应pushputton的click
void Form::on_pushButton_clicked() {
    emit show_preivew();
}


和 在 Dialog的 构造函数 最后一行 
connect(ui->widget, SIGNAL(show_preivew()), this, SLOT(onRegExPreview()));



还有 一点 在你的程序里,可能会有编译器提示 因为 槽 on_regex_preivew() 符合 connectSlotsByName 规则。
所以在我的例子里 我使用了 onRegExPreview 的名字。

一切正常。

可能是你的代码其他地方有问题吧。
--参考方法--
connect语句的执行必须在RegexpReplace实例化之后
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:43:28
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/13537/
本文WWW.DOC100.NET DOC100.NET版权所有。