Предположим, что у меня есть QString:
[General]
APPLICATION_NAME=skype
Pickup_key=222
Hangup_shift=55
Hangup_key=223
Reject_key=556
Pickup_ctrl=1
Как бы я захватил что-то вроде ТОЛЬКО 222 в Pickup_key и сохранил его в int? Целочисленные значения будут динамически меняться каждый раз, когда я запускаю программу, поэтому мне нужно прочитать номер, следующий за "Pickup_key =". Я читаю QFile
в QString
, кстати, почему он так QFile
.
Вы можете написать следующий класс для чтения и обработки вашей строки (на самом деле это выглядит как ini-формат):
class IniReader
{
public:
IniReader(const QString &input)
{
// Split by \n first.
QStringList lines = input.split('\n');
foreach (const QString &line, lines) {
// Split line by '='.
QStringList tokens = line.split('=', QString::SkipEmptyParts);
if (tokens.size() == 2) {
m_data.insert(tokens.at(0), tokens.at(1));
}
}
}
QVariant data(const QString &key) const {
return m_data.value(key);
}
private:
QMap<QString, QVariant> m_data;
};
И вот как его использовать:
IniReader reader("[General]\n" \
"APPLICATION_NAME=skype\n" \
"Pickup_key=222\n" \
"Hangup_shift=55\n" \
"Hangup_key=223\n" \
"Reject_key=556\n" \
"Pickup_ctrl=1");
int Pickup_key = reader.data("Pickup_key").toInt();
И, как уже было предложено другими ребятами, вы можете использовать QSettings
для чтения и обработки ваших файлов. Вот пример:
QSettings settings("test.ini", QSettings::IniFormat);
int Pickup_key2 = settings.value("Pickup_key").toInt();
Где файл test.ini содержит вашу строку образца.
QTextStream
для чтения строки (или файла) построчно. Существует такжеQSettings
который уже может читать файл в этом формате (INI).