Çarşamba, 22 Mayıs 2013 00:00

QString, QLocale ve kendi yöntemimize karakter büyültme

Yazan 
Öğeyi Oyla
(0 oy)
#include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QTextCodec>
#include <QLocale>
#include <QFile>

QTextStream cin(stdin);
QTextStream cout(stdout);

int main(int argc, char *argv[])
{
    //QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey));
    //Qt5 versiyonunda aşağıdaki koda gereksinim kalmadı.
    //QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

    QCoreApplication a(argc, argv);
    QFile data("testOutput.txt");
    data.open( QIODevice::WriteOnly);

    QTextStream dataFile(&data);

    dataFile.setCodec("UTF-8");


    QString bir=QString("Bu Cümleyi Büyültmek İstiyorum.");
    QString turkce="ğüşiöçı";
    QString Bturkce="ĞÜŞİÖÇI";


    /* Aşağıda QString sınıfının fonksiyonlarını kullanarak
     * karakter büyültme yapıyoruz. Türkçe karakterlerdeki büyültme problemini
     * çözmek için bu karakterleri ayrı bir şekilde büyülttük. Diğer karakterler ise
     * QChar::toUpper() fonksiyonu ile büyültüldü.
     * NOT: BU TERCİH EDİLMESİ GEREKEN BİR YOL DEĞİLDİR.
     */

    bool found=false;
    for(int i=0;i<bir.length();i++)
    {
        QChar birK= bir.at(i);
        if(birK.isLetter())
        {
            for(int i=0;i<Bturkce.length();i++)
            {
                if(birK==turkce[i])
                {
                    dataFile << Bturkce[i];
                    found=true;
                    break;

                }
            }
            if(found==false)
            dataFile << birK.toUpper();
            found=false;
        }else{
        dataFile << birK;
        }

    }
    dataFile<<"\r\n\r\n";
    /*
     *QString::toUpper() fonksiyonu kullanılarak tüm karakterler büyültüldü.
     *Fakat bu çevrimi yaparken doğru lokasyonu algılayamadığı için "i" karakterini
     *yanlış bir şekilde "I" şeklinde büyültüyor.
     */
    dataFile<<bir.toUpper()<<endl;

    /*
     *Doğru yöntem aşağıdaki şekilde doğru lokasyon ayarlanarak büyütlme yapmaktır.
     */
    QLocale turkish=QLocale(QLocale::Turkish,QLocale::Turkey);

    //Windows 7 ortamında bu kod türkçeye öz harfleri büyültürken problem
    //yaşıyor neden? i harfini I olarak büyültüyor.

    dataFile<<"\r\n\r\n"<<turkish.toUpper(bir)<<endl;


    dataFile<<"\r\n"<<QString("Ayarlı Dil : ")<<turkish.nativeLanguageName();

    dataFile<<"\r\n"<<turkish.toUpper(QString("ğüşiçö"));


    data.close();

    cout<<"Program başarı ile sonlandı."<<endl;
    
    return a.exec();
}


Okunma 482 defa
Ufuk Yıldırım

Yazılım Geliştirme Uzmanı

Web site: www.ufuk.biz

Yorum Ekle

Gerekli olan (*) işaretli alanlara gerekli bilgileri girdiğinizden emin olun. HTML kod izni yoktur.