2017-01-10 57 views
0

我想爲QtWidget(QPlainTextEdit)構建一個自動完成器。我想要使​​用的關鍵詞存儲在一個XML文件中。有沒有簡單的方法將XML文件導入QCompleter?可以使用QAbstractItemModel或QStringList調用QCompleter。所以我希望有一個函數可以將我的XML文件轉換成這兩種東西之一。這是可能的還是我必須逐行讀取我的XML文件並填寫模型或列表?將XML文件轉換爲QAbstractItemModel

感謝您的任何提示。

回答

1

XML沒有自動轉換爲列表,主要是因爲XML可以具有任意結構。有QXmlStreamReader類可用於解析XML並填充模型。

假設XML看起來像

<keywords> 
    <keyword>Foo</keyword> 
    <keyword>Bar</keyword> 
</keywords> 

然後你只需要幾行代碼的解析它:如果

QXmlStreamReader reader(xmlFileName); 
QStringList keywords; 
while (!reader.atEnd()) { 
    // parse next token 
    reader.readNext(); 
    // is this an opening "keyword" tag? 
    if (reader.isStartElement() && reader.name() == QLatin1String("keyword")) { 
     // add its value to the list 
     keywords.append(reader.text().toString()); 
    } 
} 

auto completer = new QCompleter(keywords, lineEdit); 
... 

您可能需要使用該模型構造函數(與QStringListModel如)您希望使用來自不同XML文件的數據(例如基於某種配置)填充完成程序,因爲您可以輕鬆地再次填充模型clear()。您也可以在多個QCompleter實例之間共享相同的模型。

+0

感謝您的提示!我會嘗試這樣。 – Sikarjan