Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Combo boxes - dynamic font color change



  • Hello,
    I'm new to Qt, but I know C++ pretty well. I was searching about my problem and know that there is a couple ways of doing that (custom model, custom delegate, stylesheets).

    Details about my goal:

    • several combo boxes (up to 4) with the same items (serial ports names)
    • no filtering (any port can be set on any combo box)
    • only indication that we chose the same ports in 2 or more boxes
    • indication as red, bolded ports names in combo boxes (both selected and on expanded list)
    • slot that checks current indexes and sets desired formatting

    I need the simplest way of doing that. I'm trying but as I said I'm new and got mixed up a lot now. Can't manage to write working code using methods mentioned above. I really don't care if it's single items or model/view I just need to achieve my goal.

    P.S. Sorry for my english, it's not my native language.


  • Moderators

    You could use a delegate to control this but it can be even easier if you have a custom combo box you can just set the foreground role to the color/boldness you want. Here is a quick color example:

    @
    #include <QComboBox>
    #include <QApplication>
    #include <QBrush>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

        QComboBox box;
        box.addItems(QStringList() << "Red Text" << "Blue Text" << "Green Text");
        box.setItemData(0, QBrush(QColor(Qt::red)), Qt::ForegroundRole);
        box.setItemData(1, QBrush(QColor(Qt::blue)), Qt::ForegroundRole);
        box.setItemData(2, QBrush(QColor(Qt::green)), Qt::ForegroundRole);
        box.show();
    
        return app.exec();
    

    }
    @

    You can set all kinds of roles to whatever you want, check the Qt docs for role information.


Log in to reply