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. Why i can't change color of QString?
Qt 6.11 is out! See what's new in the release blog

Why i can't change color of QString?

Scheduled Pinned Locked Moved Unsolved General and Desktop
46 Posts 7 Posters 23.6k Views 2 Watching
  • 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.
  • EngelardE Engelard

    @mrjj I did'nt quite understand your question, here is how whole code looks like:

    QComboBox *tempBx = ui->comboBox1;
    
    tempBx->setModel(new QStringListModel(someList));
    tempBx->setCurrentIndex(indx);
    tempBx->setItemData(indx, QColor(Qt::red), Qt::TextColorRole);
    

    Everything is working as it should, but not that part which should change colors..

    @mrjj said in Why i can't change color of QString?:

    model->setData( model->index(4, 0), QColor(255, 0, 0), Qt::TextColorRole );

    Ah it is setData, not item data. But also, no effect....

    raven-worxR Offline
    raven-worxR Offline
    raven-worx
    Moderators
    wrote on last edited by raven-worx
    #14

    @Engelard
    QStringListModel only supports DisplayRole and EditRole.

    You can however quickly implement a simple QAbstractListModel and add support for multiple other roles (btw you should use Qt::ForegroundRole)

    --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
    If you have a question please use the forum so others can benefit from the solution in the future

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

      Hi
      As @raven-worx says, a QAbstractListModel would be the cleanest solution.

      You could also cheat and do.

        QStringList StrList{"test" , "test2" , "test3" };
      
          QStandardItemModel *model = new QStandardItemModel (StrList.size(), 1);
          for (int row = 0; row < StrList.size(); ++row) {
              QStandardItem *item = new QStandardItem(QString("row %0").arg(row));
              model->setItem(row, 0, item);
          }
      
          ui->comboBox->setModel(model);
      
          model->setData( model->index(0, 0), QColor(255, 0, 0), Qt::TextColorRole );
          model->setData( model->index(1, 0), QColor(0, 255, 0), Qt::TextColorRole );
      
      

      alt text

      1 Reply Last reply
      6
      • EngelardE Offline
        EngelardE Offline
        Engelard
        wrote on last edited by Engelard
        #16

        Thanks @raven-worx && @mrjj for help. It is like 8-times more code now, i can't rly understand why it don't work with simple QStringListModel, but it is at least some success today.

        It change color in list of ComboBox, but not in actual CB, in @mrjj screenshot such thing also present:
        0_1553813858135_qttttt.jpg

        P.S. in my initial priority was to display colored in mainWidget of ComboBox rather then in opened list.

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

          Hi

          • i can't rly understand why it don't work with simple QStringListModel

          Well @raven-worx was kind enough to show the source
          so we can see how QStringListModel works

          QVariant QStringListModel::data(const QModelIndex &index, int role) const
          {
              if (index.row() < 0 || index.row() >= lst.size())
                  return QVariant();
          
              if (role == Qt::DisplayRole || role == Qt::EditRole)
                  return lst.at(index.row());
          
              return QVariant();
          }
          
          

          The data function of a model IS the place where it returns the data for the roles so we can see
          it only really uses (role == Qt::DisplayRole || role == Qt::EditRole) and
          we want it to also use Qt::ForegroundRole.

          1 Reply Last reply
          2
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by VRonin
            #18

            I made a proxy model to support roles in models that don't https://github.com/VSRonin/QtModelUtilities the class is called RoleMaskProxyModel. Here is an example that uses it to colour QStringListModel: https://github.com/VSRonin/QtModelUtilities/blob/1.0.0/examples/exam_RoleMaskProxyModel/exam_rolemaskhighlight.cpp

            Hopefully I'll eventually find the time to complete adding that class to Qt: https://codereview.qt-project.org/#/c/245572/

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            EngelardE 1 Reply Last reply
            2
            • VRoninV VRonin

              I made a proxy model to support roles in models that don't https://github.com/VSRonin/QtModelUtilities the class is called RoleMaskProxyModel. Here is an example that uses it to colour QStringListModel: https://github.com/VSRonin/QtModelUtilities/blob/1.0.0/examples/exam_RoleMaskProxyModel/exam_rolemaskhighlight.cpp

              Hopefully I'll eventually find the time to complete adding that class to Qt: https://codereview.qt-project.org/#/c/245572/

              EngelardE Offline
              EngelardE Offline
              Engelard
              wrote on last edited by Engelard
              #19

              @VRonin Looks very interesting.
              I downloaded your rolemaskproxymodel and classes related to it(whole src directory), but when i tried to Run i got such strange stuff:

              0_1553856387649_sdfsdf.jpg
              Oh and don't look at first two errors, they unrelated completelly, it appears when i swap compiler to Release mode, did'nt figure out what it is yet.

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by VRonin
                #20

                If you just copy-paste the code you have to add DEFINES += MODELUTILITIES_STATIC to your .pro file

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                EngelardE 1 Reply Last reply
                1
                • VRoninV VRonin

                  If you just copy-paste the code you have to add DEFINES += MODELUTILITIES_STATIC to your .pro file

                  EngelardE Offline
                  EngelardE Offline
                  Engelard
                  wrote on last edited by
                  #21

                  @VRonin ye, first time tried to use someone elses code :D
                  Now i downloaded whole stuff like a normal person. Look at my post with screenshot above.

                  1 Reply Last reply
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by VRonin
                    #22

                    Exact same answer.
                    There's a section in the readme that explains how to use the library: https://vsronin.github.io/QtModelUtilities/md__i_n_s_t_a_l_l.html

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    EngelardE 1 Reply Last reply
                    1
                    • VRoninV VRonin

                      Exact same answer.
                      There's a section in the readme that explains how to use the library: https://vsronin.github.io/QtModelUtilities/md__i_n_s_t_a_l_l.html

                      EngelardE Offline
                      EngelardE Offline
                      Engelard
                      wrote on last edited by
                      #23

                      @VRonin I added that macro to .pro file and nothing changed, same 4 errors.

                      1 Reply Last reply
                      0
                      • VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on last edited by
                        #24

                        You have to manually click on build-> rerun qmake every time you change something in the .pro file

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        EngelardE 1 Reply Last reply
                        1
                        • VRoninV VRonin

                          You have to manually click on build-> rerun qmake every time you change something in the .pro file

                          EngelardE Offline
                          EngelardE Offline
                          Engelard
                          wrote on last edited by
                          #25

                          @VRonin of course i did that. Still same 4 errors

                          1 Reply Last reply
                          0
                          • VRoninV Offline
                            VRoninV Offline
                            VRonin
                            wrote on last edited by
                            #26

                            let's do it manually then: remove all the MODELUTILITIES_EXPORT

                            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                            ~Napoleon Bonaparte

                            On a crusade to banish setIndexWidget() from the holy land of Qt

                            EngelardE 1 Reply Last reply
                            0
                            • VRoninV VRonin

                              let's do it manually then: remove all the MODELUTILITIES_EXPORT

                              EngelardE Offline
                              EngelardE Offline
                              Engelard
                              wrote on last edited by
                              #27

                              @VRonin said in Why i can't change color of QString?:

                              MODELUTILITIES_EXPORT

                              How? you mean edit your src files?

                              1 Reply Last reply
                              0
                              • VRoninV Offline
                                VRoninV Offline
                                VRonin
                                wrote on last edited by
                                #28

                                yep!
                                All DEFINES += MODELUTILITIES_STATIC does is transforming MODELUTILITIES_EXPORT into an empty string. if that doesn't work then just manually do a find and replace

                                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                                ~Napoleon Bonaparte

                                On a crusade to banish setIndexWidget() from the holy land of Qt

                                EngelardE 1 Reply Last reply
                                0
                                • VRoninV VRonin

                                  yep!
                                  All DEFINES += MODELUTILITIES_STATIC does is transforming MODELUTILITIES_EXPORT into an empty string. if that doesn't work then just manually do a find and replace

                                  EngelardE Offline
                                  EngelardE Offline
                                  Engelard
                                  wrote on last edited by
                                  #29

                                  @VRonin oKay. In what files that stuff which i should to replace? I only can assume that such stuff MODELUTILITIES_EXPORT is macro, so it must be in some .h files, right?

                                  1 Reply Last reply
                                  0
                                  • VRoninV Offline
                                    VRoninV Offline
                                    VRonin
                                    wrote on last edited by VRonin
                                    #30

                                    Actually, it probably just easier to replace the entire modelutilities_global.h with

                                    #ifndef modelutilities_global_h__
                                    #define modelutilities_global_h__
                                    #define MODELUTILITIES_EXPORT
                                    #endif // modelutilities_global_h__
                                    

                                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                                    ~Napoleon Bonaparte

                                    On a crusade to banish setIndexWidget() from the holy land of Qt

                                    EngelardE 1 Reply Last reply
                                    0
                                    • VRoninV VRonin

                                      Actually, it probably just easier to replace the entire modelutilities_global.h with

                                      #ifndef modelutilities_global_h__
                                      #define modelutilities_global_h__
                                      #define MODELUTILITIES_EXPORT
                                      #endif // modelutilities_global_h__
                                      
                                      EngelardE Offline
                                      EngelardE Offline
                                      Engelard
                                      wrote on last edited by
                                      #31

                                      @VRonin Done. But still that four errors(

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

                                        Hi,

                                        Do you mean the symbol missing error ?

                                        Did you build @VRonin library statically ?

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

                                        EngelardE 1 Reply Last reply
                                        0
                                        • SGaistS SGaist

                                          Hi,

                                          Do you mean the symbol missing error ?

                                          Did you build @VRonin library statically ?

                                          EngelardE Offline
                                          EngelardE Offline
                                          Engelard
                                          wrote on last edited by
                                          #33

                                          @SGaist said in Why i can't change color of QString?:

                                          Did you build @VRonin library statically ?

                                          0_1553942357112_statt.jpg

                                          @SGaist said in Why i can't change color of QString?:

                                          Do you mean the symbol missing error ?

                                          0_1553942408999_errr.jpg

                                          I tried multiple times: Build>Clean all>Run qmake>Rebuild all.

                                          1 Reply Last reply
                                          0

                                          • Login

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