Qt信号传递有关问题
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为什么会失败呢?
Answers
我使用了 类似于楼主的方法,两种方法均能触发正确的信号,也会响应相应的槽
但是有两点需要说明,我直接使用了一个 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()));
还有 一点 在你的程序里,可能会有编译器提示 因为 槽 onregexpreivew() 符合 connectSlotsByName 规则。
所以在我的例子里 我使用了 onRegExPreview 的名字。
一切正常。
可能是你的代码其他地方有问题吧。