0

基本上,我在 qml 中有一个组合框,我使用 QStringList 填充。但是,我无法刷新组合框(重新加载)以显示列表已更改。我考虑过使用 Loader 来做到这一点,但我无法弄清楚。有人可以指导我如何做到这一点。

网络.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: {
                            //..
                            }
                        }
                    }
                }
            }
        }
    }
}

网络.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();
};

网络.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();

}

如何重新加载 row2 的组合框以刷新列表?它只在开始时获取列表,但我想在发出信号 updateNetworks() 时更新下拉列表(组合框)。我尝试使用 Loader 并将它的 source.Component 设置为 row2 的 id,但我不断收到错误“错误:无法将 QObject* 分配给 QQmlComponent”。有什么帮助吗?

4

1 回答 1

1

我不是专业人士,但也许可以帮助你这篇文章。您可以在您的应用程序上使用计时器并设置 1 来刷新它并创建一个变量,并在调用信号时调用此变量示例:

// 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
        }
    }
于 2019-09-11T20:13:43.417 回答