当前位置: 代码迷 >> QT开发 >> Qt信号传递有关问题
  详细解决方案

Qt信号传递有关问题

热度:84   发布时间:2016-04-25 03:31:30.0
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为什么会失败呢?
qt?connect?信号?槽 qt ?connect ?信号

------解决方案--------------------
本帖最后由 dext 于 2013-10-30 22:43:37 编辑
我使用了 类似于楼主的方法,两种方法均能触发正确的信号,也会响应相应的槽
但是有两点需要说明,我直接使用了一个 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实例化之后
  相关解决方案