未调用 QLineEdit textChanged 信号

Lau*_*llo 2 c++ qt qt-signals

我想将 textChanged 信号连接到 QLineEdit,但它永远不会被调用:

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog();
    virtual ~Dialog();
    QLineEdit *nameEdit;

public slot:
    void nameChanged(const QString &);
};
Run Code Online (Sandbox Code Playgroud)

.c 文件:

Dialog::Dialog()
{

    nameEdit=new QLineEdit;
    connect(nameEdit, SIGNAL(textChanged(const QString &)), this, SLOT(nameChanged(const QString &)));
    ...
}

void Dialog::nameChanged(const QString & txt)
{
// NEVER CALLED
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

The*_*ist 7

如果连接出现问题,旧样式通常会在控制台/终端中写入调试消息。由于您没有控制台,我强烈建议您立即停止使用样式的信号和插槽,并使用使用现代函数绑定的新形式:

connect(nameEdit, &QLineEdit::textChanged, this, &Dialog::nameChanged);
Run Code Online (Sandbox Code Playgroud)

试试这个,看看它是否编译。如果不是,则意味着其中一个信号/插槽过载,在这种情况下,您需要静态转换为要连接的过载。编译错误的另一个原因是您的连接不兼容。

好处:

  1. 一旦编译,它就可以工作
  2. 它是在编译时解决的,而不是运行时,所以它更快
  3. 它不使用字符串来解析函数名称

PS:为了完全披露,这家伙将其nameChanged()作为公共插槽(检查他的编辑),然后将其更改为信号......不知道那里发生了什么。