Getting QStringList text to line edit based on a string inserted on another line edit



  • In my qt c++ application I have 2 QLine edits! In one Line edit I enter a word which is stored in QStringList! In the other line edit I want to display the Index of that word in the QStringList(with out any button click).

    following is my code

    MainWindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include "QFile"

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    QString name;
    QStringList names;

    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    

    private slots:

    void getNameIndex();
    

    private:
    Ui::MainWindow *ui;
    };

    MainWindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    getNameIndex();
    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::getNameIndex(){
    names<<"John"<<"Smith"<<"Mary"<<"Anne";
    QString Name;
    QString index;
    Name=ui->name->text();
    for(int i=0;i<names.size();i++)
    {
    if(names[i]==Name){
    index=i;
    }

        }
        ui->Index->setText(index);
    
    }
    

    Here name and Index are the 2 line edits where the Index of the String given in the name line edit should be displayed after the word is typed by the user(with out any button click)!
    Though I called getNameIndex() method in the constructor it did not work! How can I correct this?


  • Qt Champions 2017

    Hi
    Hook up the QLine(1) textChanged() to a slot and in that slot
    call getNameIndex()



  • @mrjj
    void MainWindow::on_name_textChanged(const QString &arg1)
    {
    getNameIndex();
    }

    I did this now but still no change :(


  • Qt Champions 2017

    @Lasith
    did you use connect and checked the return code ?
    ahh, its via designer
    Set break point and see what happens.



  • How to use connect and check return code?



  • This post is deleted!

  • Qt Champions 2017

    @Lasith
    Forget about that. You use Designer so its pr auto.

    Your error is that you dont set name to compare with from LineEdit1
    sorry. you do.



  • @Lasith

    #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
    
    


  • @mrjj No I already set the Name :(


  • Qt Champions 2017

    @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



  • @mrjj Thanx but what was the problem in my code?


  • Qt Champions 2017

    @Lasith
    Only thing wrong was you assigned an int to a QString

    index=i; // this wont work

    have to be
    index=QString::number(i);

    I also added it would say "not found" just for testing.



  • @mrjj Oh a silly mistake :(


  • Qt Champions 2017

    @Lasith
    Well its not that silly as i do it sometimes also - as my old string class would
    make the int a string but QString think something else of it.



  • @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.



Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.