How to connect the signal valueChanged from QLineEdit to a custom slot in Qt
Asked Answered
L

2

13

I need to connect the valueChanged signal from QLineEdit to a custom slot programatically. I know how to do the connection by using Qt Designer and doing the connection with graphical interface but I would like to do it programmatically so I can learn more about the Signals and Slots.

This is what I have that doesn't work.

.cpp file

// constructor
connect(myLineEdit, SIGNAL(valueChanged(static QString)), this, SLOT(customSlot()));

void MainWindow::customSlot()
{
    qDebug()<< "Calling Slot";
}

.h file

private slots:
    void customSlot();

What am I missing here?

Thanks

Lanfranc answered 14/12, 2013 at 16:52 Comment(0)
D
27

QLineEdit does not seem to have valueChanged signal, but textChanged (refer to the Qt documentation for complete list of supported signals). You need to change your connect() function call too. It should be:

connect(myLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(customSlot()));

If you need the handle the new text value in your slot, you can define it as customSlot(const QString &newValue) instead, so your connection will look like:

connect(myLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(customSlot(const QString &)));
Doretheadoretta answered 14/12, 2013 at 16:59 Comment(2)
Changed valueChanged to textChanged and static QString to const QString & and worked. I don't know how I missed that, specially static QString (wow), thanks a lot. Also thanks a lot for the second example since I was also wondering about the usage of the parameter. Thanks a LOTLanfranc
Here's Qt 5's new way to connect, connect(myLineEdit, &QLineEdit::textChanged, this, &MainWindow::customSlot);Finalize
R
0

Here also with lambda if interested:

connect(myLineEdit, &QLineEdit::textChanged, [=](QString obj) { customSlot(obj); });
Row answered 28/9, 2022 at 14:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.