Getting QStringList text to line edit based on a string inserted on another line edit
-
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QObject::connect(ui->lnName, &QLineEdit::textChanged, this, [=](QString arg){ ui->lnIndex->setText(QString::number(this->getIndex(arg))); }); } MainWindow::~MainWindow() { delete ui; } int MainWindow::getIndex(QString arg) { QStringList names; names << "John" << "Smith" << "Mary" <<"Anne"; for (int i = 0; i < names.size(); i++) { if (names[i] == arg) { return i; } } return -1; }
.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; int getIndex(QString arg); }; #endif // MAINWINDOW_H
-
@Lasith
Yeah, sorry saw that after.
Use @Taz742 solution (which uses lambda and is more smooth)
or try this test project (that does it with your code)
https://www.dropbox.com/s/pozxsv4sd1sa64p/editindex.zip?dl=0 -
@Lasith
Your problems:- You only once call the returning function of the index, and in the designer. (In fact, when ui->name text changes, the function should be called every time.)
@Lasith said in Getting QStringList text to line edit based on a string inserted on another line edit:
QString index;
Name=ui->name->text();
for(int i=0;i<names.size();i++)
{
if(names[i]==Name){
index=i;
}You want the string but in your cycle the 'i' of the integer. Why do not you pay attention to this(index = i)? Try compile the app? If yes, the compiler would inform you about it.
From your profile it seems that you are using Qt too several months. But it does not seem to be at all.
Do not try to conquer the peak, learn to walk first.