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为什么会失败呢?

移动开发 SenchaTouch 程序开发

wshrww 15 years ago

connect语句的执行必须在RegexpReplace实例化之后

呀啦哪一卡 answered 15 years ago

我使用了 类似于楼主的方法,两种方法均能触发正确的信号,也会响应相应的槽

但是有两点需要说明,我直接使用了一个 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 的名字。


一切正常。


可能是你的代码其他地方有问题吧。

逍遥行如风 answered 15 years ago

Your Answer