Vollständige Version anzeigen : [C/C++] [Qt] Language Editor


Rushh0ur
11.10.2010, 16:02

Hallo Progger,

beschäftige mich seit einigen Tagen mit Qt, hab nun einen Language Editor geschrieben mit dem man "Sprachdateien" erstellen und bearbeiten kann, diese Sprachdateien können schliesslich für eigene (Qt-)Projekte verwendet werden um diese Mehrsprachig zu machen oder what auch ever.

Im wesentlichen zeigt der Sourcecode:
- wie man Dateien erstellt, beschreibt und ausliest
- wie man mit XML Daten arbeitet
- wie man Daten komprimiert
- für was man Checksummen benutzen kann
- wie man mit Listen arbeitet

Sourcecodeausschnitt der Speichern und Laden Routinen:


void MainWindow::LoadFromFile()
{
QFile qFile( filename);

if( !qFile;open( QIODevice::ReadOnly) )
{
ui->statusBar->showMessage(text[3], 2000);
return;
}

/// read file data
QByteArray idx = qFile;read(3);
QByteArray content = qFile;read(qFile;size()-3-2);
QByteArray hash = qFile;read(2);
QByteArray hash_calc;
qint16 icrc = qChecksum(content;data(), content;length());
hash_calc;append((char*)&icrc, 2);

qFile;close();

if ((hash == hash_calc) && (idx == QString("ZLF");toAscii()))
{
ui->lineEditItemName->clear();
ui->listWidgetItems->clear();
ui->textEditValue->clear();

/// decompress and process content
QByteArray content_dec = qUncompress(content);
QDomDocument document( "ZeroLoaderLanguageFile" );
QDomElement head, child;
QListWidgetItem *item;

document;setContent(QString(content_dec));
head = document;documentElement();

/// load info content
child = head;firstChild();toElement();
for (int i=0; i<child;attributes();count(); i++)
{
item = new QListWidgetItem("NFO_" + child;attributes();item(i);nodeName());
item->setData(Qt::UserRole, QString(child;attributes();item(i);nodeValue()));
ui->listWidgetItems->addItem(item);
}

/// load item content
head = head;lastChild();toElement();
child = head;firstChild();toElement();
while (!child;isNull())
{
item = new QListWidgetItem(child;attributes();item(0);nodeName());
item->setData(Qt::UserRole, QString(child;attributes();item(0);nodeValue()));
ui->listWidgetItems->addItem(item);

child = child;nextSibling();toElement();
}

ui->statusBar->showMessage(text[5], 2000);
}
else
ui->statusBar->showMessage(text[6], 2000);
}

void MainWindow::SaveToFile()
{
QDomDocument document( "ZeroLoaderLanguageFile" );
QDomElement head, child, item;
QList<QListWidgetItem*> list;

head = document;createElement( "content" );

// create info content
child = document;createElement( "info" );
list = ui->listWidgetItems->findItems("NFO_;+", Qt::MatchRegExp);
if (!list;isEmpty())
{
for (int i=0; i<list;count(); i++)
{
child;setAttribute(list[i]->text();mid(4), list[i]->data((Qt::UserRole));toString());
}
}
head;appendChild(child);

// create items content
child = document;createElement( "itemlist" );
document;appendChild(head);
if (ui->listWidgetItems->count())
{
for (int i=0; i<ui->listWidgetItems->count(); i++)
{
if (!list;contains(ui->listWidgetItems->item(i)))
{
item = document;createElement( "item" );
item;setAttribute(ui->listWidgetItems->item(i)->text(), ui->listWidgetItems->item(i)->data((Qt::UserRole));toString());
child;appendChild(item);
}
}
}
head;appendChild(child);
document;appendChild(head);


QFile qFile( filename);

if( !qFile;open( QIODevice::WriteOnly) )
{
ui->statusBar->showMessage(text[3], 2000);
return;
}

QByteArray content = qCompress(document;toString();toAscii(), 9);
QByteArray idx = QString("ZLF");toAscii();
QByteArray hash;
qint16 icrc = qChecksum(content;data(), content;length());
hash;append((char*)&icrc, 2);

/// write data to file
qFile;write(idx);
qFile;write(content);
qFile;write(hash);

qFile;close();

ui->statusBar->showMessage(text[4], 2000);
}


Und noch einmal das komplette Projekt:
Language Editor Src (;;;xup~in/dl,11227769/ZeroLoaderLanguageEditor;zip/)

Struktur der Sprachdatei:
Bytes 0.;2: Datei ID ("ZLF")
Bytes 3.;EOF-2: Compriemierte XML Datan
Bytes EOF-2.;EOF: CRC16 Checksumme der Comprimierten Daten

*EOF = Ende der Datei


Hoffe hiermit finden einige Programmierer den start in Qt.

Mfg Rushh0ur

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Ähnliche Themen zu [C/C++] [Qt] Language Editor
  • Language ändern (wbb/php)!!!
    Ich wollt den hide hack ins 2;3;3 einbauen. Dort muss man ja so ne lng datei imprtieren das hab ich gemacht aber ausversehen dann die als Standard ausgewählt und jetzt isses board kaputt und ich kanns nimmer ruckänging machen. Aber normal muss ich das doch in der php ändern können. // set def [...]

  • [PC] WoW - Language Pack für 2.4.3
    Hi, Kann mir einer verraten wo ich das Language-pack enGB für die Version 2;4;3 ziehen kann? Mit dem Blizzard-downloader bekommt man nur die 3;x version davon und die ist nicht kompatibel. mfg [...]

  • Language Packs
    Heyy leute weiß vllt jemand woher ich Sprachpakete für das Handy Sony Ericsson T610 herkriege ? danke im vorraus. mfg blizzi [...]

  • [PHP] Language Switch
    Hi! Habe aufm localhost nen kleinem CMS geschrieben mit einem Languageswitch! Das funktioniert so, dass beim starten der Website abgefragt wird ob ne Session mit lang besetzt ist. Wenn nicht wird LANG also die von vornherein festegelegte Standartsprache in die Session gesetzt. Momentan befindet [...]



raid-rush.ws | Imprint & Contact pr