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. Encoding in the QTableView
Forum Update on Monday, May 27th 2025

Encoding in the QTableView

Scheduled Pinned Locked Moved Solved General and Desktop
47 Posts 3 Posters 14.8k 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by mrjj
    #32

    well for 40 lookups its more fun that tons of ifs
    if u make a text file with
    ID, NAME
    like
    1000, TOWN
    1001, TOWN2
    1002, TOWN3

    so u need to ( code handwritten fast, not tested. u need to add includes)

    QFile file("c:/mynames.txt");
    if(!file.open(QIODevice::ReadOnly)) {
    QMessageBox::information(0, "error", file.errorString());
    }

    QTextStream in(&file);
    while(!in.atEnd()) {
    QString line = in.readLine(); // get a line from file
    QStringList fields = line.split(","); <<< KEY point. we ask it to split the text at "," to a list
    /// now fields[0] is first part and fields[1] is rest
    // so
    hash[fields[0].toInt()] = fields[1] ; // store name under key
    }

    file.close();

    ro12man3R 1 Reply Last reply
    1
    • mrjjM mrjj

      well for 40 lookups its more fun that tons of ifs
      if u make a text file with
      ID, NAME
      like
      1000, TOWN
      1001, TOWN2
      1002, TOWN3

      so u need to ( code handwritten fast, not tested. u need to add includes)

      QFile file("c:/mynames.txt");
      if(!file.open(QIODevice::ReadOnly)) {
      QMessageBox::information(0, "error", file.errorString());
      }

      QTextStream in(&file);
      while(!in.atEnd()) {
      QString line = in.readLine(); // get a line from file
      QStringList fields = line.split(","); <<< KEY point. we ask it to split the text at "," to a list
      /// now fields[0] is first part and fields[1] is rest
      // so
      hash[fields[0].toInt()] = fields[1] ; // store name under key
      }

      file.close();

      ro12man3R Offline
      ro12man3R Offline
      ro12man3
      wrote on last edited by
      #33

      @mrjj thank you very much!! I will try that. If I wiil edit this, I will write here the correct code.
      Thank you for your helping!

      mrjjM 1 Reply Last reply
      0
      • ro12man3R ro12man3

        @mrjj thank you very much!! I will try that. If I wiil edit this, I will write here the correct code.
        Thank you for your helping!

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

        @ro12man3
        You are very welcome.
        One note is that if u read in text lines then
        it will be text so u need to convert to int for the key if you
        define the hash like that.
        QHash<int, QString> Hash;
        something like
        hash[ fields[0].toInt() ]=xxx
        If it gives u grief , let me know as im not 100% sure of syntax as its free writing :)

        ro12man3R 1 Reply Last reply
        0
        • mrjjM mrjj

          @ro12man3
          You are very welcome.
          One note is that if u read in text lines then
          it will be text so u need to convert to int for the key if you
          define the hash like that.
          QHash<int, QString> Hash;
          something like
          hash[ fields[0].toInt() ]=xxx
          If it gives u grief , let me know as im not 100% sure of syntax as its free writing :)

          ro12man3R Offline
          ro12man3R Offline
          ro12man3
          wrote on last edited by ro12man3
          #35

          @mrjj Well, I can extract the second field, but it will be all second fields.

          And I have edited the code:

          QString MyDelegate::displayText(const QVariant& value, const QLocale& locale) const {
                 QString line;
                  QFile file("C:/QT/Test text/1.txt");
                  if(!file.open(QIODevice::ReadOnly))
                         qDebug() << "Error opening file";
                  QTextStream in(&file);
          
                  QHash<int, QString> hash;
          
                   while(!in.atEnd()) {
                   QString line = in.readLine(); 
                   QStringList fields = line.split(","); 
                   hash[fields[0].toInt()] = fields[1] ; 
            if (value.toString().compare(fields[0]) == 0)
              return fields[1];
            else
              return value.toString(); 
          }
          }
          

          And it doesn't work. How to solve that?
          It was working when I wrote

           if (value.toString().compare("1000") == 0)
              return "Jackson";
          

          If I write

          QMessageBox::information(this, fields[0], fields[1] );
          

          it is working, but it shows ALL values.

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

            @ro12man3 said:

            And it doesn't work. How to solve that?

            • You really have to provide more info that that :)
              if you insert qDebug() << "f1=" << fields[0] << "f2=" << fields[1];
              does it read in the data correctly ? this is critical.

            • Also you build the hash
              hash[fields[0].toInt()] = fields[1] ;
              but don't use it. ? You dont use it to look up the text.
              QString CityName = hash[value.toInt()];
              return CityName;

            • Also you mix reading in the file with compare value. that is wrong.
              You should not read it in displayText as it will then read file each time
              it draw that column. that is not so good.
              Make Hash a member of the class. (in .h) and just use it
              in displayText. then u can read it once and use it over and over.

            • Read in the text file in the constructor of the delegate;

            ro12man3R 1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #37

              In addition to what @mrjj wrote: make the hash a member of your delegate.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • mrjjM mrjj

                @ro12man3 said:

                And it doesn't work. How to solve that?

                • You really have to provide more info that that :)
                  if you insert qDebug() << "f1=" << fields[0] << "f2=" << fields[1];
                  does it read in the data correctly ? this is critical.

                • Also you build the hash
                  hash[fields[0].toInt()] = fields[1] ;
                  but don't use it. ? You dont use it to look up the text.
                  QString CityName = hash[value.toInt()];
                  return CityName;

                • Also you mix reading in the file with compare value. that is wrong.
                  You should not read it in displayText as it will then read file each time
                  it draw that column. that is not so good.
                  Make Hash a member of the class. (in .h) and just use it
                  in displayText. then u can read it once and use it over and over.

                • Read in the text file in the constructor of the delegate;

                ro12man3R Offline
                ro12man3R Offline
                ro12man3
                wrote on last edited by
                #38

                @mrjj said:

                • You really have to provide more info that that :)
                  if you insert qDebug() << "f1=" << fields[0] << "f2=" << fields[1];
                  does it read in the data correctly ? this is critical.

                Yes, I can extract this values. I tested that in QMessageBox.
                More info... http://rghost.ru/7wFZPWC4v This is the project.
                Download link(http://rghost.ru/download/7wFZPWC4v/ccf2cf56d3bbd353e8db12f377907d858f261e23/ccf2cf56d3bbd353e8db12f377907d858f261e23/myfirstviewEDITED.rar)

                It's not very difficult code structure, I don't know why it's not working.

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by SGaist
                  #39

                  Hi,

                  Because it's not buildable as is.

                  MyDelegate::MyDelegate(QObject *parent)
                      : QStyledItemDelegate(parent)
                  {
                      QString line;
                      QFile file("1.txt");
                      if(file.open(QIODevice::ReadOnly)) {
                          QTextStream in(&file);
                          while(!in.atEnd()) {
                              QString line = in.readLine(); // get a line from file
                              QStringList fields = line.split(","); // KEY point. we ask it to split the text at "," to a list
                              hash[fields[0].toInt()] = fields[1] ; // store name under key
                          }
                      } else {
                          qDebug() << "Error opening file";
                      }
                  }
                  
                  // this is the key delegate function!
                  QString MyDelegate::displayText(const QVariant& value, const QLocale& locale) const {
                       return hash.value(value.toInt());
                  }
                  

                  [edit: code cleanup SGaist]

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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

                    oh a tad to late :)
                    https://www.dropbox.com/s/3ajogwsoc7n1zjg/myfirstviewEDITED_hash.zip?dl=0

                    ro12man3R 2 Replies Last reply
                    1
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #41

                      Note that the build problem isn't with the delegate but with the MainWindow missing slot implementation.

                      @mrjj :-D

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1
                      • mrjjM mrjj

                        oh a tad to late :)
                        https://www.dropbox.com/s/3ajogwsoc7n1zjg/myfirstviewEDITED_hash.zip?dl=0

                        ro12man3R Offline
                        ro12man3R Offline
                        ro12man3
                        wrote on last edited by ro12man3
                        #42

                        @mrjj @SGaist oooohhh guys, thank you!! You are amazing!!!

                        It's working. !!!

                        The problem is SOLVED! THANK YOU VERY MUCH!!

                        1 Reply Last reply
                        0
                        • mrjjM mrjj

                          oh a tad to late :)
                          https://www.dropbox.com/s/3ajogwsoc7n1zjg/myfirstviewEDITED_hash.zip?dl=0

                          ro12man3R Offline
                          ro12man3R Offline
                          ro12man3
                          wrote on last edited by
                          #43

                          @mrjj @SGaist
                          I started to work and I found one bag.
                          My table is:
                          Roberto
                          Jackson
                          1002
                          1

                          And that's my txt file:
                          1002,Hello
                          1,How are you

                          So the result in the table is
                          Roberto
                          Jackson
                          Hello
                          How are you

                          It's good. Correct work.
                          But if I change 1002 to 10--02 then all const values in the table will become like a second value for 10--02. The result will become:
                          Hello
                          Hello
                          Hello
                          How are you

                          You can see that, just edit in table Maria to 10--02 and add 10--02 to txt file. What is that?

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

                            @ro12man3 said:

                            10--02

                            hi
                            If you change the first field in file to 10--02
                            it it no longer a valid integer.
                            Our hash is Int, String
                            so that mean use int as key and get back string
                            when we read "10--02", and say toInt() we get 0 or something undefined.

                            If you need to use a key that is not really a integer. like 10--02, then
                            you must change the hash to be Qstring, QString and NOT use toInt() when inserting
                            into hash.
                            So make sure your text format fits the Hash or strange things will happen :)

                            ro12man3R 1 Reply Last reply
                            2
                            • mrjjM mrjj

                              @ro12man3 said:

                              10--02

                              hi
                              If you change the first field in file to 10--02
                              it it no longer a valid integer.
                              Our hash is Int, String
                              so that mean use int as key and get back string
                              when we read "10--02", and say toInt() we get 0 or something undefined.

                              If you need to use a key that is not really a integer. like 10--02, then
                              you must change the hash to be Qstring, QString and NOT use toInt() when inserting
                              into hash.
                              So make sure your text format fits the Hash or strange things will happen :)

                              ro12man3R Offline
                              ro12man3R Offline
                              ro12man3
                              wrote on last edited by
                              #45

                              @mrjj Ok. It was

                              // In .h file:
                              QHash<int, QString> hash;
                              ......
                                hash[fields[0].toInt()] = fields[1] ;
                              ......
                              // In .cpp file:
                              QString mapped = hash.value(value.toInt());
                              

                              After editing it's:

                              // In .h file:
                              QHash<QString, QString> hash;
                              ......
                                hash[fields[0]] = fields[1] ;
                              ......
                              // In .cpp file:
                              QString mapped = hash.value(value);
                              

                              Is it correct?

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

                                hi
                                yes, seems fine. good work.
                                i think you might need
                                QString mapped = hash.value(value.toString);
                                as value is variant and hash wants string.

                                ro12man3R 1 Reply Last reply
                                2
                                • mrjjM mrjj

                                  hi
                                  yes, seems fine. good work.
                                  i think you might need
                                  QString mapped = hash.value(value.toString);
                                  as value is variant and hash wants string.

                                  ro12man3R Offline
                                  ro12man3R Offline
                                  ro12man3
                                  wrote on last edited by
                                  #47

                                  @mrjj Wooow I'm so happy, really :D Thank you :) I will study and study and study :)

                                  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