blessedone
blessedone

Reputation: 170

How to refresh a combo-box in qml after sending a signal

Basically, I have a combo-box in qml that I populate using a QStringList. However, I'm not able to refresh the combo-box (reload) to show the list has changed. I looked into doing that using the Loader but I couldn't figure it out. Can someone guide me in how to do it.

network.qml

Popup{
    contentItem: Rectangle{

        LabelValueList {
            id: list1

            row1: LabelValue {
                id: row1

            row2: LabelValue {
                id: row2

                value: ComboBox {
                    id: combobox

                    model: ListModel {
                        id: comboModel

                        Component.onCompleted: {
                            //..
                            }
                        }
                    }
                }
            }
        }
    }
}

network.h

class Network : public QObject{
    Q_OBJECT
    Q_PROPERTY(QStringList listOfNetworks READ m_listOfNetworks NOTIFY updateNetworks)

    private:
        QStringList m_listOfNetworks;

    public:
        explicit Network(QObject *parent = 0);
        QStringList listOfNetworks() const;

    public slots:
        void slot_scanNetworks();

    signals:
        void updateNetworks();
};

network.cpp

Network::Network(QObject *parent) : QObject (parent){
}

void Network::slot_scanNetworks(){

    QFile SSIDsFile("/home/root/networking/listOfWifiNetworks.txt");

    m_listOfNetworks.clear();
    if (!SSIDsFile.open(QIODevice::ReadOnly | QIODevice::Text)){
    //
    }
    else{
        QTextStream scanNetworkStream(&SSIDsFile);

        while (!scanNetworkStream.atEnd()){
            QString line = scanNetworkStream.readLine();

            if (line.size() != 0){
                QStringList lineSplit = line.split(' ');
                m_listOfNetworks.append(lineSplit[1]);
            }
        }
    }
    SSIDsFile.close();
    emit updateNetworks();

}

How do I reload the combo-box of row2 to refresh the list? It only get's the list at the beginning but i want to update the drop-down (combo-box) when I emit the signal updateNetworks(). I tried using the Loader and setting the source.Component of it to the id of row2 but I kept getting the error "Error: Cannot assign QObject* to QQmlComponent". Any help?

Upvotes: 0

Views: 974

Answers (1)

user12055122
user12055122

Reputation: 11

I am not pro but maybe help u this post . you can use a timer on ur application and set 1s to refresh this and make a variable and when call signal call this variable example :

// make a variable type of bool by value = false
property bool refreshMyBoxNow : false 


//add this timer to ur project 
    Timer
    {
        id: timeToRefreshBox 
        //interval = time to tick . (1000) = 1sec 
        interval: 1; running: true; repeat: true
        onTriggered:
        {
             //your code here for refresh box
        }
    }

Upvotes: 1

Related Questions