我想将textChanged信号连接到QLineEdit,但它永远不会被调用:
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
}
我做错了什么?
答案 0 :(得分:4)
如果连接出现问题,旧样式通常会在控制台/终端中写入调试消息。由于您没有控制台,我强烈建议您立即停止使用旧样式的信号和插槽,并使用使用现代功能绑定的新表单:
GoogleMap map;
// ... get a map.
map.addPolyline(new PolylineOptions()
.add(new LatLng(51.5, -0.1), new LatLng(40.7, -74.0))
.width(5)
.color(Color.RED));
map.addPolyline(new PolylineOptions()
.add(new LatLng(75.5, -1.1), new LatLng(60.7, -84.0))
.width(5)
.color(Color.BLUE));
试试这个,看它是否编译。如果没有,则意味着其中一个信号/插槽过载,在这种情况下,您需要静态转换为要连接的过载。编译错误的另一个原因是您的连接不兼容。
优点:
connect(nameEdit, &QLineEdit::textChanged, this, &Dialog::nameChanged);
作为公共插槽(检查他的编辑),并将其更改为信号......不知道那里发生了什么。
答案 1 :(得分:1)
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 &);
};