如何调试失败的信号/插槽连接?

时间:2012-05-07 08:24:25

标签: qt dialog connect signals-slots

我正在关注Jasmin Blanchettes书的第2章

C++-GUI-Programming-with-Qt-4-1st-ed.pdf

尝试使用带有Qt的MS VS 2008设置对话框GoToCellDialog。

示例编译,对话框出现,但无法在文本更改时输入处理程序方法on_lineEdit_textChanged()。 为了证明这一点,我将这一行添加到插槽方法中:

label->setText(tr("Changed :"));

强制标签中的视觉变化。

在.ui文件中的元素

<connections/>

是空的。我不知道为什么。

我决定将这一行添加到构造函数中:

connect(lineEdit, SIGNAL(textChanged(const QString &)),
this, SLOT(on_lineEdit_textChanged()));

但它没有改变任何东西。

我使用IDE生成代码,但首先它以小写形式生成了gotocelldialog。 现在每个名字都是camelCase并且代码编译。但也许我错过了一些东西。

1 个答案:

答案 0 :(得分:4)

我在程序中使用了一个函数来确保连接已经建立:

 inline void CHECKED_CONNECT( const QObject * sender, const char * signal,
             const QObject * receiver,  const char * method,
             Qt::ConnectionType type = Qt::AutoConnection )
{
  if(!QObject::connect(sender, signal, receiver, method, type))
   qt_assert_x(Q_FUNC_INFO, "CHECKED_CONNECT failed", __FILE__, __LINE__);
}

这是通常连接的包装器,它会抛出断言错误并在连接失败时立即停止程序。那么它只对您使用源代码建立的连接有用。