QPointerEvent throws error
-
@JonB
Ialready checked by planting a breakpoint in onCurrentTextChanged . on running and entering the text in the place holder i was expecting to hit the breakpoint, but it didnt hit.
this is my connect statementconnect(echoComboBox,&QComboBox::editTextChanged, this, &Window::onCurrentTextChanged);
void onCurrentTextChanged(const QString &text) { qDebug() << QString(" entered text is ")<< text;
//nothing is printed here in the application tab in qtcreator. it is not even hitting this breakpoint
passwordLineEdit->setPlaceholderText("Password entered is : ");
passwordLineEdit->setText(text);
passwordLineEdit->show();
passwordLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);}
@curiosity said in QPointerEvent throws error:
void onCurrentTextChanged(const QString &text)...
This is a free function... How does this even compile?
Please provide your full relevant code which actually compiles.
-
@curiosity said in QPointerEvent throws error:
void onCurrentTextChanged(const QString &text)...
This is a free function... How does this even compile?
Please provide your full relevant code which actually compiles.
@Christian-Ehrlicher
but i am using this as a slot. Please check the connect statement -
@Christian-Ehrlicher
but i am using this as a slot. Please check the connect statementvoid MainWindow::onCurrentTextChanged() and void onCurrentTextChanged() are two different functions. Provide your full code including the header.
-
void MainWindow::onCurrentTextChanged() and void onCurrentTextChanged() are two different functions. Provide your full code including the header.
-
And now please format your code with the code (</>) tags so it is readable for others.
Your header does not match the source - this does not compile. And then you have a local variable echoLabel but connect the member later on... -
And now please format your code with the code (</>) tags so it is readable for others.
Your header does not match the source - this does not compile. And then you have a local variable echoLabel but connect the member later on...@Christian-Ehrlicher
//NewWidget.cpp#include "NewWidget.h" #include <iostream> using namespace std; #include <QComboBox> #include <QGridLayout> #include <QGroupBox> #include <QLabel> #include <QLineEdit> #include <QtWidgets> Window::Window(QWidget *parent) QWidget(parent) { QGroupBox *echoGroup = new QGroupBox(tr("Echo"));
QLabel *echoLabel = new QLabel(tr("Mode:")); QComboBox *echoComboBox = new QComboBox; echoComboBox->addItem(tr("Normal")); echoComboBox->addItem(tr("Password")); echoComboBox->addItem(tr("PasswordEchoOnEdit")); echoComboBox->addItem(tr("No Echo")); echoLineEdit = new QLineEdit; echoLineEdit->setPlaceholderText("Placeholder Text"); QLabel *passwordLabel = new QLabel(tr("Password entered is :")); passwordLineEdit = new QLineEdit; QGroupBox *validatorGroup = new QGroupBox(tr("Validator")); QLabel *validatorLabel = new QLabel(tr("Type:")); QComboBox *validatorComboBox = new QComboBox; validatorComboBox->addItem(tr("No validator")); validatorComboBox->addItem(tr("Integer validator")); validatorComboBox->addItem(tr("Double validator")); validatorLineEdit = new QLineEdit; validatorLineEdit->setPlaceholderText("Placeholder Text"); QGroupBox *alignmentGroup = new QGroupBox(tr("Alignment")); QLabel *alignmentLabel = new QLabel(tr("Type:")); QComboBox *alignmentComboBox = new QComboBox; alignmentComboBox->addItem(tr("Left")); alignmentComboBox->addItem(tr("Centered")); alignmentComboBox->addItem(tr("Right")); alignmentLineEdit = new QLineEdit; alignmentLineEdit->setPlaceholderText("Placeholder Text");/>
connect(echoComboBox,&QComboBox::editTextChanged, this, &Window::onCurrentTextChanged);
connect(validatorComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated),this, &Window::validatorChanged); connect(alignmentComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &Window::alignmentChanged); QGridLayout *echoLayout = new QGridLayout; echoLayout->addWidget(echoLabel, 0, 0); echoLayout->addWidget(echoComboBox, 0, 1, Qt::AlignLeft); echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2); echoLayout->addWidget(passwordLabel, 2, 0); echoLayout->addWidget(passwordLineEdit, 2, 2, 1, 2 ); echoLayout->setRowStretch(0, 5); echoGroup->setLayout(echoLayout); QGridLayout *validatorLayout = new QGridLayout; validatorLayout->addWidget(validatorLabel, 0, 0); validatorLayout->addWidget(validatorComboBox, 0, 1); validatorLayout->addWidget(validatorLineEdit, 1, 0, 1, 2); validatorGroup->setLayout(validatorLayout); QGridLayout *alignmentLayout = new QGridLayout; alignmentLayout->addWidget(alignmentLabel, 0, 0); alignmentLayout->addWidget(alignmentComboBox, 0, 1); alignmentLayout->addWidget(alignmentLineEdit, 1, 0, 1, 2); alignmentGroup-> setLayout(alignmentLayout); QGridLayout *grid = new QGridLayout; grid->addWidget(createFirstGroup(), 0, 1); grid->heightForWidth(10); grid->setRowStretch(0,50); //setWindowTitle(tr("Radio Buttons")); QGridLayout *layout = new QGridLayout; layout->addWidget(echoGroup, 0, 0); layout->addWidget(validatorGroup, 1, 0); layout->addWidget(alignmentGroup, 2, 0); layout->addWidget(createFirstGroup(), 0, 1); //layout->addWidget(accessGroup, 1, 1); setLayout(layout); setWindowTitle(tr("Line Edits"));
}
QGroupBox *Window::createFirstGroup() { QGroupBox *groupBox = new QGroupBox(tr("Radio Buttons group")); QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1")); QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2")); QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3")); radio1->setChecked(true); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); vbox->addWidget(radio3); vbox->addStretch(1); groupBox->setLayout(vbox); resize(100, 200); return groupBox; } void Window::echoChanged(int index) { switch (index) { case 0: echoLineEdit->setEchoMode(QLineEdit::Normal); break; case 1: echoLineEdit->setEchoMode(QLineEdit::Password); break; case 2: echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); break; case 3: echoLineEdit->setEchoMode(QLineEdit::NoEcho); break; } } void Window::validatorChanged(int index) { switch (index) { case 0: validatorLineEdit->setValidator(nullptr); break; case 1: validatorLineEdit->setValidator(new QIntValidator( validatorLineEdit)); break; case 2: validatorLineEdit->setValidator(new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit)); break; } validatorLineEdit->clear(); } void Window::alignmentChanged(int index) { switch (index) { case 0: alignmentLineEdit->setAlignment(Qt::AlignLeft); break; case 1: alignmentLineEdit->setAlignment(Qt::AlignCenter); break; case 2: alignmentLineEdit->setAlignment(Qt::AlignRight); break; } }
void Window::onCurrentTextChanged(const QString &text)
{
qDebug() << QString(" entered text is ")<< text;
passwordLineEdit->setPlaceholderText("Password entered is : ");
passwordLineEdit->setText(text);
passwordLineEdit->show();
passwordLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
} -
@Christian-Ehrlicher
//NewWidget.cpp#include "NewWidget.h" #include <iostream> using namespace std; #include <QComboBox> #include <QGridLayout> #include <QGroupBox> #include <QLabel> #include <QLineEdit> #include <QtWidgets> Window::Window(QWidget *parent) QWidget(parent) { QGroupBox *echoGroup = new QGroupBox(tr("Echo"));
QLabel *echoLabel = new QLabel(tr("Mode:")); QComboBox *echoComboBox = new QComboBox; echoComboBox->addItem(tr("Normal")); echoComboBox->addItem(tr("Password")); echoComboBox->addItem(tr("PasswordEchoOnEdit")); echoComboBox->addItem(tr("No Echo")); echoLineEdit = new QLineEdit; echoLineEdit->setPlaceholderText("Placeholder Text"); QLabel *passwordLabel = new QLabel(tr("Password entered is :")); passwordLineEdit = new QLineEdit; QGroupBox *validatorGroup = new QGroupBox(tr("Validator")); QLabel *validatorLabel = new QLabel(tr("Type:")); QComboBox *validatorComboBox = new QComboBox; validatorComboBox->addItem(tr("No validator")); validatorComboBox->addItem(tr("Integer validator")); validatorComboBox->addItem(tr("Double validator")); validatorLineEdit = new QLineEdit; validatorLineEdit->setPlaceholderText("Placeholder Text"); QGroupBox *alignmentGroup = new QGroupBox(tr("Alignment")); QLabel *alignmentLabel = new QLabel(tr("Type:")); QComboBox *alignmentComboBox = new QComboBox; alignmentComboBox->addItem(tr("Left")); alignmentComboBox->addItem(tr("Centered")); alignmentComboBox->addItem(tr("Right")); alignmentLineEdit = new QLineEdit; alignmentLineEdit->setPlaceholderText("Placeholder Text");/>
connect(echoComboBox,&QComboBox::editTextChanged, this, &Window::onCurrentTextChanged);
connect(validatorComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated),this, &Window::validatorChanged); connect(alignmentComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &Window::alignmentChanged); QGridLayout *echoLayout = new QGridLayout; echoLayout->addWidget(echoLabel, 0, 0); echoLayout->addWidget(echoComboBox, 0, 1, Qt::AlignLeft); echoLayout->addWidget(echoLineEdit, 1, 0, 1, 2); echoLayout->addWidget(passwordLabel, 2, 0); echoLayout->addWidget(passwordLineEdit, 2, 2, 1, 2 ); echoLayout->setRowStretch(0, 5); echoGroup->setLayout(echoLayout); QGridLayout *validatorLayout = new QGridLayout; validatorLayout->addWidget(validatorLabel, 0, 0); validatorLayout->addWidget(validatorComboBox, 0, 1); validatorLayout->addWidget(validatorLineEdit, 1, 0, 1, 2); validatorGroup->setLayout(validatorLayout); QGridLayout *alignmentLayout = new QGridLayout; alignmentLayout->addWidget(alignmentLabel, 0, 0); alignmentLayout->addWidget(alignmentComboBox, 0, 1); alignmentLayout->addWidget(alignmentLineEdit, 1, 0, 1, 2); alignmentGroup-> setLayout(alignmentLayout); QGridLayout *grid = new QGridLayout; grid->addWidget(createFirstGroup(), 0, 1); grid->heightForWidth(10); grid->setRowStretch(0,50); //setWindowTitle(tr("Radio Buttons")); QGridLayout *layout = new QGridLayout; layout->addWidget(echoGroup, 0, 0); layout->addWidget(validatorGroup, 1, 0); layout->addWidget(alignmentGroup, 2, 0); layout->addWidget(createFirstGroup(), 0, 1); //layout->addWidget(accessGroup, 1, 1); setLayout(layout); setWindowTitle(tr("Line Edits"));
}
QGroupBox *Window::createFirstGroup() { QGroupBox *groupBox = new QGroupBox(tr("Radio Buttons group")); QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1")); QRadioButton *radio2 = new QRadioButton(tr("R&adio button 2")); QRadioButton *radio3 = new QRadioButton(tr("Ra&dio button 3")); radio1->setChecked(true); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); vbox->addWidget(radio3); vbox->addStretch(1); groupBox->setLayout(vbox); resize(100, 200); return groupBox; } void Window::echoChanged(int index) { switch (index) { case 0: echoLineEdit->setEchoMode(QLineEdit::Normal); break; case 1: echoLineEdit->setEchoMode(QLineEdit::Password); break; case 2: echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit); break; case 3: echoLineEdit->setEchoMode(QLineEdit::NoEcho); break; } } void Window::validatorChanged(int index) { switch (index) { case 0: validatorLineEdit->setValidator(nullptr); break; case 1: validatorLineEdit->setValidator(new QIntValidator( validatorLineEdit)); break; case 2: validatorLineEdit->setValidator(new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit)); break; } validatorLineEdit->clear(); } void Window::alignmentChanged(int index) { switch (index) { case 0: alignmentLineEdit->setAlignment(Qt::AlignLeft); break; case 1: alignmentLineEdit->setAlignment(Qt::AlignCenter); break; case 2: alignmentLineEdit->setAlignment(Qt::AlignRight); break; } }
void Window::onCurrentTextChanged(const QString &text)
{
qDebug() << QString(" entered text is ")<< text;
passwordLineEdit->setPlaceholderText("Password entered is : ");
passwordLineEdit->setText(text);
passwordLineEdit->show();
passwordLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
}I tried formatting it. but this was how it shoed up after posting NewWidget.cpp
#ifndef WINDOW_H #define WINDOW_H #include <QWidget> #include <QLineEdit> #include <QDebug> QT_BEGIN_NAMESPACE class QLineEdit; class QGroupBox; QT_END_NAMESPACE class Window : public QWidget { Q_OBJECT public: QLineEdit *passwordLineEdit; Window(QWidget *parent = nullptr); private: QLineEdit *echoLineEdit; QLineEdit *validatorLineEdit; QLineEdit *alignmentLineEdit; public slots: void echoChanged(int); void validatorChanged(int); void alignmentChanged(int); QGroupBox *createFirstGroup(); }; #endif
#include <QApplication> #include "NewWidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
code is compiling and running.. except that it is not echoing the text entered
-
I tried formatting it. but this was how it shoed up after posting NewWidget.cpp
#ifndef WINDOW_H #define WINDOW_H #include <QWidget> #include <QLineEdit> #include <QDebug> QT_BEGIN_NAMESPACE class QLineEdit; class QGroupBox; QT_END_NAMESPACE class Window : public QWidget { Q_OBJECT public: QLineEdit *passwordLineEdit; Window(QWidget *parent = nullptr); private: QLineEdit *echoLineEdit; QLineEdit *validatorLineEdit; QLineEdit *alignmentLineEdit; public slots: void echoChanged(int); void validatorChanged(int); void alignmentChanged(int); QGroupBox *createFirstGroup(); }; #endif
#include <QApplication> #include "NewWidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
code is compiling and running.. except that it is not echoing the text entered
Please read my post carefully and fix the errors in your code.
-
I tried formatting it. but this was how it shoed up after posting NewWidget.cpp
#ifndef WINDOW_H #define WINDOW_H #include <QWidget> #include <QLineEdit> #include <QDebug> QT_BEGIN_NAMESPACE class QLineEdit; class QGroupBox; QT_END_NAMESPACE class Window : public QWidget { Q_OBJECT public: QLineEdit *passwordLineEdit; Window(QWidget *parent = nullptr); private: QLineEdit *echoLineEdit; QLineEdit *validatorLineEdit; QLineEdit *alignmentLineEdit; public slots: void echoChanged(int); void validatorChanged(int); void alignmentChanged(int); QGroupBox *createFirstGroup(); }; #endif
#include <QApplication> #include "NewWidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
code is compiling and running.. except that it is not echoing the text entered
This post is deleted! -
I tried formatting it. but this was how it shoed up after posting NewWidget.cpp
#ifndef WINDOW_H #define WINDOW_H #include <QWidget> #include <QLineEdit> #include <QDebug> QT_BEGIN_NAMESPACE class QLineEdit; class QGroupBox; QT_END_NAMESPACE class Window : public QWidget { Q_OBJECT public: QLineEdit *passwordLineEdit; Window(QWidget *parent = nullptr); private: QLineEdit *echoLineEdit; QLineEdit *validatorLineEdit; QLineEdit *alignmentLineEdit; public slots: void echoChanged(int); void validatorChanged(int); void alignmentChanged(int); QGroupBox *createFirstGroup(); }; #endif
#include <QApplication> #include "NewWidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
code is compiling and running.. except that it is not echoing the text entered
@curiosity
There is an awful lot of code (and discussion) here, I am lost as to where you are at. In the following order:-
connect(echoComboBox,&QComboBox::editTextChanged, this, [](const QString &text) { qDebug() << "text:" << text; } );
Does this work? -
connect(echoComboBox,&QComboBox::editTextChanged, this, &Window::onCurrentTextChanged);
WhereWindow::onCurrentTextChanged(const QString &text)
slot hasqDebug() << "text:" << text;
as its first statement.
Does this work? -
Once those are working. If text does not show from
passwordLineEdit->setText(text);
where you have gonepasswordLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
try withoutPasswordEchoOnEdit
, I don't know if that interferes with what you can do or see when you mark a line edit as being for password entry.
-
-
@curiosity
There is an awful lot of code (and discussion) here, I am lost as to where you are at. In the following order:-
connect(echoComboBox,&QComboBox::editTextChanged, this, [](const QString &text) { qDebug() << "text:" << text; } );
Does this work? -
connect(echoComboBox,&QComboBox::editTextChanged, this, &Window::onCurrentTextChanged);
WhereWindow::onCurrentTextChanged(const QString &text)
slot hasqDebug() << "text:" << text;
as its first statement.
Does this work? -
Once those are working. If text does not show from
passwordLineEdit->setText(text);
where you have gonepasswordLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
try withoutPasswordEchoOnEdit
, I don't know if that interferes with what you can do or see when you mark a line edit as being for password entry.
@JonB It can not work. See my comment about local and member variable. C++ basic stuff.
-
-
@JonB It can not work. See my comment about local and member variable. C++ basic stuff.
@Christian-Ehrlicher
Hi Christian. Per your comment I did try searching this page forechoLabel
(got a bit confused in the formatting), I thought I saw it was a localnew
ed variable. But that's not to do with connecting?Did you mean
echoCombobox
? But that is alsonew
ed and in scope whenconnect()
ed, and I did not come across a member variable of that name instead? Maybe I mis-searched....Maybe I should leave you to it, you have perhaps copied the code and played with it.
-
@Christian-Ehrlicher
Hi Christian. Per your comment I did try searching this page forechoLabel
(got a bit confused in the formatting), I thought I saw it was a localnew
ed variable. But that's not to do with connecting?Did you mean
echoCombobox
? But that is alsonew
ed and in scope whenconnect()
ed, and I did not come across a member variable of that name instead? Maybe I mis-searched....Maybe I should leave you to it, you have perhaps copied the code and played with it.
@JonB You might be right. The code formatting (and useless reposting instead editing the former post) and the difference between the source and the header which makes the whole stuff uncompilable as the header is missing the slot definition for onCurrentTextChanged() confused me. Wonder (every time again) what's so hard writing a minimal and compileable example.
-
@JonB You might be right. The code formatting (and useless reposting instead editing the former post) and the difference between the source and the header which makes the whole stuff uncompilable as the header is missing the slot definition for onCurrentTextChanged() confused me. Wonder (every time again) what's so hard writing a minimal and compileable example.
@Christian-Ehrlicher
If you are correct OP will not even get past my point #1. That is why I suggest they follow those in order and we will know where they do/do not get to :) -
I tried formatting it. but this was how it shoed up after posting NewWidget.cpp
#ifndef WINDOW_H #define WINDOW_H #include <QWidget> #include <QLineEdit> #include <QDebug> QT_BEGIN_NAMESPACE class QLineEdit; class QGroupBox; QT_END_NAMESPACE class Window : public QWidget { Q_OBJECT public: QLineEdit *passwordLineEdit; Window(QWidget *parent = nullptr); private: QLineEdit *echoLineEdit; QLineEdit *validatorLineEdit; QLineEdit *alignmentLineEdit; public slots: void echoChanged(int); void validatorChanged(int); void alignmentChanged(int); QGroupBox *createFirstGroup(); }; #endif
#include <QApplication> #include "NewWidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }
code is compiling and running.. except that it is not echoing the text entered
-
@Christian-Ehrlicher @JonB
sorry for the typos.. please read as the " this was how it showed*** up after posting NewWidget.cpp@curiosity I don't know where you are at now, but if you answer where you get to in the 3 steps I suggested earlier we may know where whatever issue lies.
-
@curiosity I don't know where you are at now, but if you answer where you get to in the 3 steps I suggested earlier we may know where whatever issue lies.
your point 1 isnt working.. i have a break point inside my connect statement and i tried debugging.
i have following error
"mincore\com\oleaut32\dispatch\ups.cpp(2122)\OLEAUT32.dll!00007FFCE48BA726: (caller: 00007FFCE48B9B39) ReturnHr(1) tid(3250) 8002801D Library not registered."
QObject::connect(echoComboBox, &QComboBox::currentTextChanged, this, [&](const QString &text) { qDebug() << "text:" << text;/* i have a breakpoint here which is not getting hit also text is not printed to console*/ Window::onCurrentTextChanged(text); echoLineEdit->show(); });
-
your point 1 isnt working.. i have a break point inside my connect statement and i tried debugging.
i have following error
"mincore\com\oleaut32\dispatch\ups.cpp(2122)\OLEAUT32.dll!00007FFCE48BA726: (caller: 00007FFCE48B9B39) ReturnHr(1) tid(3250) 8002801D Library not registered."
QObject::connect(echoComboBox, &QComboBox::currentTextChanged, this, [&](const QString &text) { qDebug() << "text:" << text;/* i have a breakpoint here which is not getting hit also text is not printed to console*/ Window::onCurrentTextChanged(text); echoLineEdit->show(); });
@JonB
Its working now.. the signal was emitted from QCombobox.but it should have beenQObject::connect(echoLineEdit, &QLineEdit::textChanged, this, [&](const QString &text) { Window::onCurrentTextChanged(text); echoLineEdit->show(); });
Now it is working as expected
-
@JonB
Its working now.. the signal was emitted from QCombobox.but it should have beenQObject::connect(echoLineEdit, &QLineEdit::textChanged, this, [&](const QString &text) { Window::onCurrentTextChanged(text); echoLineEdit->show(); });
Now it is working as expected
@curiosity said in QPointerEvent throws error:
Now it is working as expected
Great, then mark the topic as solved.
Beside the discussion about syntax and other stuff and I believe it was mentioned here before....
your lambda is not needed and the content does not make too much sense.Window::onCurrentTextChanged(text);
In what scope this is called? If you are in
Window
and you passthis
to your labda, you don't need the fully qualified function name.echoLineEdit->show();
Calling
show()
after the text has changed is not needed unless you never insert text manully but always set text programmatically withsetText(...)
.
But even then, connecting to slotonCurrentTextChanged(text)
inWindow
would be way easier. -
@curiosity said in QPointerEvent throws error:
Now it is working as expected
Great, then mark the topic as solved.
Beside the discussion about syntax and other stuff and I believe it was mentioned here before....
your lambda is not needed and the content does not make too much sense.Window::onCurrentTextChanged(text);
In what scope this is called? If you are in
Window
and you passthis
to your labda, you don't need the fully qualified function name.echoLineEdit->show();
Calling
show()
after the text has changed is not needed unless you never insert text manully but always set text programmatically withsetText(...)
.
But even then, connecting to slotonCurrentTextChanged(text)
inWindow
would be way easier.