C++ 未调用QLineEdit textChanged信号
我想将textChanged信号连接到QLineEdit,但它从未被调用:C++ 未调用QLineEdit textChanged信号,c++,qt,qt-signals,C++,Qt,Qt Signals,我想将textChanged信号连接到QLineEdit,但它从未被调用: class Dialog : public QDialog { Q_OBJECT public: Dialog(); virtual ~Dialog(); QLineEdit *nameEdit; public slot: void nameChanged(const QString &); }; .c文件: Dialog::Dialog() { nameE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
virtual ~Dialog();
QLineEdit *nameEdit;
public slot:
void nameChanged(const QString &);
};
.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
}
我做错了什么?如果连接出现问题,旧样式通常会在控制台/终端中写入调试消息。由于您没有控制台,我强烈建议您立即停止使用老式的信号和插槽,并使用使用现代函数绑定的新形式:
connect(nameEdit, &QLineEdit::textChanged, this, &Dialog::nameChanged);
试试这个,看看它是否编译。如果没有,则意味着其中一个信号/插槽过载,在这种情况下,您需要静态地强制转换到要连接的重载。编译错误的另一个原因是您的连接不兼容
优点:
nameChanged()
作为一个公共槽(检查他的编辑),他把它改成了一个信号。。。不知道那里发生了什么
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
virtual ~Dialog();
QLineEdit *nameEdit;
signals:
void nameChanged(const QString &);
};
您希望将nameChanged()用作插槽,而不是信号
因此,正确的方法是:
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
virtual ~Dialog();
QLineEdit *nameEdit;
public slots:
void nameChanged(const QString &);
};
当它启动信号/插槽不可用时,是否给出调试消息?查看您的控制台/终端。它实际上是我正在编写的maya插件的一部分,因此无法访问Qt控制台。您的nameChanged()函数是否标记为插槽?为什么在信号下
nameChanged
?它应该是一个插槽。顺便说一句,nameEdit=new QLineEdit(--->此插槽名称更改可能会过载,因此您需要强制转换插槽,您可以跳过公共插槽中的“public”,因为它位于“public”块下。