Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Getting QStringList text to line edit based on a string inserted on another line edit
QtWS25 Last Chance

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

Scheduled Pinned Locked Moved Solved General and Desktop
qtcreatorqstringlistline editindexof
15 Posts 3 Posters 4.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Lasith
    wrote on last edited by
    #1

    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?

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #2

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

      L 1 Reply Last reply
      0
      • mrjjM mrjj

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

        L Offline
        L Offline
        Lasith
        wrote on last edited by
        #3

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

        I did this now but still no change :(

        mrjjM 1 Reply Last reply
        0
        • L Lasith

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

          I did this now but still no change :(

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #4

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

          1 Reply Last reply
          0
          • L Offline
            L Offline
            Lasith
            wrote on last edited by
            #5

            How to use connect and check return code?

            Taz742T mrjjM 3 Replies Last reply
            0
            • L Lasith

              How to use connect and check return code?

              Taz742T Offline
              Taz742T Offline
              Taz742
              wrote on last edited by
              #6
              This post is deleted!
              1 Reply Last reply
              0
              • L Lasith

                How to use connect and check return code?

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by mrjj
                #7

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

                L 1 Reply Last reply
                0
                • L Lasith

                  How to use connect and check return code?

                  Taz742T Offline
                  Taz742T Offline
                  Taz742
                  wrote on last edited by
                  #8

                  @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
                  
                  
                  1 Reply Last reply
                  2
                  • mrjjM mrjj

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

                    L Offline
                    L Offline
                    Lasith
                    wrote on last edited by
                    #9

                    @mrjj No I already set the Name :(

                    mrjjM 1 Reply Last reply
                    0
                    • L Lasith

                      @mrjj No I already set the Name :(

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      @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

                      L 1 Reply Last reply
                      1
                      • mrjjM mrjj

                        @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

                        L Offline
                        L Offline
                        Lasith
                        wrote on last edited by
                        #11

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

                        mrjjM Taz742T 2 Replies Last reply
                        0
                        • L Lasith

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

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by mrjj
                          #12

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

                          L 1 Reply Last reply
                          1
                          • mrjjM mrjj

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

                            L Offline
                            L Offline
                            Lasith
                            wrote on last edited by
                            #13

                            @mrjj Oh a silly mistake :(

                            mrjjM 1 Reply Last reply
                            0
                            • L Lasith

                              @mrjj Oh a silly mistake :(

                              mrjjM Offline
                              mrjjM Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on last edited by
                              #14

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

                              1 Reply Last reply
                              0
                              • L Lasith

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

                                Taz742T Offline
                                Taz742T Offline
                                Taz742
                                wrote on last edited by Taz742
                                #15

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

                                1 Reply Last reply
                                1

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt Extensions
                                • Unsolved