Category:GlobalTanimlamalar

From Qt Wiki
Revision as of 12:33, 15 September 2016 by EdwardWelbourne (talk | contribs) (Apparently Turkish page ...)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Türkçe

<QtGlobal> Global Tanımlamalar

Bu döküman temel C bilginiz var olduğu düşünelerek hazırlanmıştır. Orijinal ingilizce versiyona bağlı kalınmaya çalışılmış, konuların değinildiği yerlerin bir olması hedeflenmiştir.

Global tanımlar <QtGlobal> header dosyasında bulunmaktadır. Global tanım listesine bu dökümanın ingilizce versiyonundan ulaşabilirsiniz.

Tipler (Types)

Qt tiplerinin amacı tüm platformlarda karşılığı olan tiplerle çalışmayı sağlamaktır.

Bu header dosyasında tanımlanan tipler daha çok tüm platformlarda ortak kullanılabilecek şekilde ortak bit boyutlarında değişkenleri içermektedir. Buna bir örnek verecek olursak qint8 ile 8 bit signed char garantiye alınmış olur. Bu değişken tüm platformlarda C tipinde karşılığı olan bir değişkenle Qt tarafından eşleşebilir.

Bunun dışında önemli bir husus olan QtMsgType ile bir çoğu platformda Qt tarafından mesaj handlerlerine mesajlar ulaştırılarak uyumluluk sağlanmaktadır.

Fonksiyonlar (Functions)

<QtGlobal> başlık dosyası çeşitli fonksiyonlar taşımaktadır. Bu fonksiyonlar daha çok template amaçlıdır, yani bir çoğu platformda aynı işi gören C fonksiyonlarına kalıp olurlar. Bunlardan göze çarpan, qAbs() fonksiyonu mutlak değer döndürmektedir. qMin() ve qMax() fonksiyonları ise iki değerden en düşüğünü ve en yükseğini döndürmektedir.

Örnek:

int valueA = 10;
int valueB = 5;

int valueMin = qMin(valueA, valueB);
// valueMin == 5

<QtGlobal> içerisinde dört önemli fonksiyon bulunmaktadır. Bu fonksiyonlar string mesajlar üretmektedir, qCritical(), qDebug(), qFatal() ve qWarning() dir.

Örnek:

if (!driver()->isOpen() || dirver()->isOpenError()) {
qWarning("Sql Hatası: Database açılamıyor");
}

Örnekte görüldüğü gibi varsayım bir veritabanına bağlantı kurulduğunda hata olma ihtimali sonucu bir uyarı mesajı üretmiş olduk.

Makrolar (Macros)

<QtGlobal> dosyası içerisinde ki makrolardan Q_CC_ ile başlayanlar özel bir platformda compile edilmek için kullanılır. Örneğin Q_CC_SUN makrosu ile tanımlama sonucu Sun Studio C++ ile compile edilebilir. Ancak makro Q_OS_ ile başlıyor ise tanımlama belirtilen platform içindir. Örneğin Q_OS_WIN32 ile Windows sistemleri için tanımlama yapılabilir. Makrolar sayesinde derlemeye veya platforma özel kodlar geliştirilebilir.

Bunun dışında çeşitli bilgiler de verilmek için bazı makrolar bulunmaktadır. Buna bir örnek olarak QT_VERSION_STR ile Qt versiyonu string olarak alınabilmektedir.

Tip Dökümantasyonu

typedef QtMsgHandler

Bu tanımlama ile handler fonksiyonuna bir pointer oluşturulur. Bu fonksiyona parametre olarak QtMsgType ve char tipli mesaj gönderilir.

 void aMsgHandler(QtMsgType, const char '''); <code>

==== enum QtMsgType ====
p. Bu enum sayesinde mesaj handlerine gönderilen mesajın tipi belirlenir. Bu sayede mesajın üretildiği kaynakta bilinmiş olur. Constant tablosu dökümanın ingilizce versiyonunda detaylıca verilmiştir. Bunlar, QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg dir.

==== typedef qint8 ====
p. Bu tanımlama signed char içindir. Bu sayede 8-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.

==== typedef qint16 ====
p. Bu tanımlama signed short içindir. Bu sayede 16-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.

==== typedef qint32 ====
p. Bu tanımlama signed int içindir. Bu sayede 32-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.

==== typedef qint64 ====
p. Bu tanımlama long long int (_''int64 on Windows). Bu sayede 64-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur. Ancak bunun için Q_INT64_C() makrosu kullanılmalıdır.
qint64 data = Q_INT64_C(932838457459459);</code>

typedef qlonglogn

p. Bu qint64 ile aynı yapıya sahiptir.

typedef qptrdiff

p. Bu değişken tipi pointer farklılıkları için kullanılmaktadır. Bu sayede herhangi bir boyutta ki pointer tüm platformlarda desteklenebilmektedir. Burada qptrdiff signed dir, signed olmayan değerler için quintptr kullanmanız gerekir.

typedef qreal

p. Bu değişken tipi double içindir. Ancak ARM işlemcilerde bu değişken float olarak karşılık alır. Bunun sebebi performans kazanmak içindir.

typedef quint8

p. Bu değişken unsigned char içindir.

typedef quint16

p. Bu değişken unsigned short içindir.

typedef quint32

p. Bu değişken unsigned int içindir.

typedef quint64

p. Bu değişken unsigned long long int (unsigned_int64 Windows'da) içindir. Bu değişkeni kullanmak için Q_UINT64_C() makrosu kullanılmalıdır.

typedef quintptr

p. Bu değişken unsigned pointer farklılığı içindir. Bu sayede herhangi bir boyuttaki unsigned pointerlar Qt tarafından farklı platformlarda desteklenmektedir.

typedef qulonglong

p. Bu değişken quintptr ile aynıdır.

typedef uchar

p. unsigned char için en kolay uyuşumlu tiptir.

typedef uint

p. unsigned int için en kolay uyuşumlu tiptir.

typedef ulong

p. unsigned long için en kolay uyuşumlu tiptir.

typedef ushort

p. unsigned short için en kolay uyuşumlu tiptir.

Fonkisyon Dökümantasyonu

T qAbs(const T & value)

p. qAbs fonksiyonu T tipi ile verilen değeri 0 dan uzaklaştırarak mutlak değerini alır.

p. Örnek:

int mutlakDeger;
int orijinalDeger = 14;

mutlakDeger = qAbs(orijinalDeger);
// mutlakDeger == 14

const T & qBound( const T & min, const T & value, const T & max )

p. Bir değeri en düşük ve en yüksek sınırlarda ki bir aralıkta tutacak şekilde zorlar. Bu qMax(min, qMin(value, max)) ile aynıdır.

p. Örnek:

int xValue = 0;
int minValue = 2;
int maxValue = 8;

int boundedValue = qBound(minValue, xValue, maxValue);
// boundedValue == 2

void qCritical ( const char msg, … )

Mesaj handlerini critical mesajla çağırır. Eğer mesaj handleri tanımlanmamışsa stderr hatayı yazdırır. Windows altında mesaj debuggere gönderilir. Bu fonksiyon C printf() fonksiyonundaki gibi string argümanlarını kabul etmektedir.

Örnek:

void load(const QString &fileName)
{
QFile file(fileName);
if (!file.exists())
 qCritical("%s dosyası bulunamadı!", qPrintable(fileName));
}

void qDebug ( const char * msg, … )

Mesaj handlerini debug mesajla çağırır. Eğer mesaj handleri tanımlanmamışsa stderr hatayı yazdırır. Windows altında console uygulaması geliştirildiğinde mesaj debuggere gönderilir. Eğer QT_NO_DEBUG_OUTPUT tanımlaması yapılmış ise mesaj esgeçilir. Bu fonksiyon C printf() fonksiyonundaki gibi string argümanlarını kabul etmektedir.

void qFatal ( const char * msg, … )

Mesaj handlerini fatal mesajla çağırır. Eğer mesaj handleri tanımlanmamışsa stderr hatayı yazdırır. Windows altında mesaj debuggere gönderilir.

bool qFuzzyCompare ( double p1, double p2 ) [static]

Floating point p1 ve p2 değerlerini eşitliğini kontrol ederek eşit olma durumunda true yanlış olma durumunda false döndürmektedir. Burada dikkat edilmesi gereken bir bug bulunduğu bildirilmiştir. Bu kontrol eğer 0.0 değerleri üzerinde yapılacak ise çalışmayacaktır. Bunun için yapılablecek bir çözüm olarak compare edilecek her iki değere 1 eklenerek sorun giderilmiş olur.

bool qFuzzyCompare ( float p1, float p2 ) [static]

qFuzzyCompare nin double parametrelisi ile aynıdır.

QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler )

Daha onceden tanimlanmis olan bir mesaj handleri install ederek pointerini geri dondurur. Mesaj handleri qFatal, qDebug gibi mesajlari yakalayarak mesaj ciktilarinnin olusturulmasini saglar. Eger QT_NO_WARNING_OUTPUT ve/veya QT_NO_DEBUG_OUTPUT tanimlanmamissa bu mesajlar in ciktilarini almak mumkun olur

Mesaj handleri mesajlari X11 altinda standart outputtan verirken Windows altinda ise debugtan vermektedir. Fatal mesajlarinin onemli bir hususuda uygulamayi durdurmasidir.

int qMacVersion()

Bunun yerine QSysInfo::MacintoshVersion kullanmanız tavsiye edilir.

const T & qMax ( const T & value1, const T & value2 )

value1 ve value2 değerlerinden en büyüğünü getirir.

Örnek:

int benimVeri = 10;
int seninVeri = 5;

int enBuyukKim = qMax(benimVeri, seninVeri);
// enBuyukKim == benimVeri

const T & qMin ( const T & value1, const T & value2 )

qMax dakinin aksine en küçük değeri döndürür. Bir önceki örnekte uygulandığında enBuyukKim değişkeni seninVeri ye eşit olacaktır.

qint64 qRound64 ( qreal value )

64-bit integer olacak şekilde sayıyı yuvarlayıp döndürür.

Örnek:

qreal deger1 = 42949672960.3;
qreal deger2 = 42949672960.7;

int roundedDeger1 = qRound(deger1);
// roundedDeger1  42949672960
int roundedDeger2 = qRound(deger2);
// roundedDeger2  42949672961

int qRound ( qreal value )

Integer tipinde bir sayıyı yuvarlayıp döndürür. Bir önceki örnekteki gibi davranış sergiler.

const char * qVersion ()

Çalışma esnasında qt nin versiyonunu öğrenmek isterseniz bu fonksiyonla String tipinde versiyonu alabilirsiniz (Örneğin, "4.1.0"). Ayrıca QT_VERSION_STR makrosuna da bakınız.

void qWarning ( const char * msg, … )

Mesaj handlerini msg bilgisiyle çağırır. Eğer mesaj handleri oluşturulmamışsa hata çıktısını stderr'a yönlendirir. Windows altında çalışıyorsanız mesajı debugger'e gönderecektir. Eğer bu fonksiyon QT_NO_WARNING_OUTPUT ile karşılaşmamışsa, QT_FATAL_WARNING tanımlaması yapacaktır. QT_NO_WARNING_OUTPUT tanımlaması sayesinde Warning tipi hataları es geçebildiğimizi unutmayın.

Bu fonksiyon string formatını ve liste argüman yapısını C de ki printf() fonksiyonunda olduğu gibi kullanabilmektedir.

Örnek:

void f(int c)
{
 if ( c > 500 )
 qWarning("f: bad argument, c == %d", c);
}

Eğer program çalışırken süpriz bir çıktıyla karşılaşmak istemiyorsanız tavsiye qInstallMsgHandler() 'i install etmektir.

T * q_check_ptr ( T * pointer )

Pek fazla açıklama bulamadığım bir husus. Ama anladığım kadarıyla pointerin pointer olup olmadığını denetliyor. Bir pointer verin ve size yine bir pointer döndürsün. Pointer vermezseniz ne olur, zaten onu denetlemek için.

QByteArray qgetenv ( const char * varName )

Environment değişkenlerini okumaya ihtiyaç duyduğunuzda parametrede göndereceğiniz değeri okur. Gelen dğeri QByteArray::constData() fonksiyonuyla char dönüştürebilirsiniz.

bool qputenv ( const char * varName, const QByteArray & value )

Environment değişkenlerinde düzenleme veya ekleme ihtiyacı duyduğunuzda bu fonksiyonu kullanabilirsiniz. Değişkenin adı ve değerini göndererek var ise eski kaydı günceller, yok ise yeni kayıt oluşturur. Eğer geri dönen değer 0 ise değeri ayarlamayı maalesef yapamamış demektir.

int qrand ()

C++ da ki rand() fonksiyonunun Thread-safe versiyonudur.

Geri döndereceği sayıyı 0 ile RAND_MAX (bu max <cstdlib> ve <stdlib.h> dosyalarında tanımlanmıştır) arasında pseudo-random sekansı ile bularak döndürür. Bu sekans bir adım değeri ile üretildiği için eğer adım değerini belirleyerek rastgele sayı üretmek isterseniz qsrand() fonskiyonunu kullanabilirsiniz.

void qsrand ( uint seed )

C++ da ki srand() fonksiyonun Thread-safe versiyonudur. qrand() fonksiyonunu çağırırken, pseudo rastgele sayısını üretecek adım değerini belirtmek için kullanılır. Yani rastgele sayı aralığında ki sekansı değiştirmeye yarar.

qsrand() fonskiyonu ile tanımlanan adım değeri bir thread boyunca hep aynı kalacaktır. Buna dikkat ederek farklı threadlarda sekansın aynı ayarla olmayacağını ve bir thread boyunca sekansın değişmesini istiyorsanız thread bitmeden tekrar ayarlamanız gerekeceğini unutmayın.

void qt_set_sequence_auto_mnemonic ( bool on )

Mac sistemlerde mnemonic değerini aktif etmeye yarar. Mac sistemlerde bu değer varsayılan olarak false dır.

int qt_symbian_exception2Error ( const std::exception & aThrow )

Symbian sistemlerde C++ standart hatalarını symbian hata sisteminde symbian hata koduna dönüştürmeyi sağlar. Bu kod sadece symbian sistemlerde çalışır.

void qt_symbian_exception2LeaveL ( const std::exception & aThrow )

Symbian sistemlerde C++ standart hatalarını symbian hata sisteminde symbian leave haline dönüştürmeyi sağlar. Bu kod sadece symbian sistemlerde çalışır.

void qt_symbian_throwIfError ( int error )

Symbian sistemlerde hata kodu ile hata fırlatılmasını sağlar. Bu kod sadece symbian sistemlerde çalışır.

Makro Dökümantasyonu

QT_REQUIRE_VERSION ( int argc, char ' argv, const char * version )

Qt uygulaması geliştirirken gerekli versiyonu belirtmek için kullanılır. Bu sayede uygulama çalışmadan önce gerekli versiyonun var olup olmadığını kontrol ederek uygulamanın çalışmasını sağlar.

argc ve argv parametreleri qt main fonksiyonuna gönderilen parametreler olmalıdır.

Örnek:

 #include <QApplication>
 #include <QMessageBox>

int main(int argc, char '''argv[])
 {
 QT_REQUIRE_VERSION(argc, argv, "4.0.2")

 QApplication app(argc, argv);
 
 return app.exec();
 }

QT_TRYCATCH_ERROR ( error, function )

p. Bu makro standart C++ hata kodunu yakalayıp Symbian OS hata koduna dönüştürür. Bu durumda error ile kodu ve KErrNone ile hata oluşmadığı bilgilerine ulaşabiliriz. Bu makro sadece Symbian sistemlerde çalışır.

p. Örnek:

 // Burada Symbian TInt tipinde hata kodunu üreterek bize sunar.
 // Örnekte server adını translate ederken oluşacak hatayı algılamaya çalışılmıştır.
 // Eğer hata olursa geri dönecek değer KErrNone sabitinden farklı olacaktır.
 TInt QServerApp::Connect(const QString &serverName)
 {
 TPtrC name;
 TInt err;
 QT_TRYCATCH_ERROR(err, name.Set(qt_QString2TPtrC(serverName)));
 if (err != KErrNone)
 return err;
 return iServer.Connect(name);
 }

QT_VERSION

p. Qt nin versiyonunu hex olarak verir. Bu 0xMMNNPP şeklindeki (MM=Major, NN=Minor ve PP=Patch) bilgiyle version bilgisine ulaşılabilinir. Aşağıda ki örnekte qt versiyonuna göre uygulamada derlenirken icon atama yöntemine değinilmiştir.

p. Örnek:

 #if QT_VERSION >= 0x040100
 QIcon icon = style()->standardIcon(QStyle::SP_TrashIcon);
 #else
 QPixmap pixmap = style()->standardPixmap(QStyle::SP_TrashIcon);
 QIcon icon(pixmap);
 #endif

QT_VERSION_STR

p. String tipinde (örn: 4.1.0) versiyon bilgisini almamıza yarar.

void Q_ASSERT ( bool test )

p. Bir işlem sonucunda debug modunda iken bize işlem için test yaparak bilgi gönderir. Bu bilgi kaynak, satır gibi verilerle debug çıktısına basılır.

p. Örnek:

 // File: div.cpp

 #include <QtGlobal>

 int divide(int a, int b)
 {
 Q_ASSERT(b != 0);
 return a / b;
 }

p. Örnekte eğer b değeri 0 verilerek çağrılmış ise debug çıktısına aşağıdaki gibi bir bilgi yazılacaktır.

ASSERT: "b == 0" in file div.cpp, line 7

void Q_ASSERT_X ( bool test, const char where, const char * what )

Q_ASSERT den farklı olarak nerede ve ne bilgileri de mesaj olarak gönderilir.

Örnek:

 // File: div.cpp

#include <QtGlobal>

int divide(int a, int b)
 {
 Q_ASSERT_X(b != 0, "Bölme işlemi", "Sıfıra bölme hatası");
 return a / b;
 }

Eğer işlemde b 0 olarak gönderilmiş ise debug çıktısına aşağıda ki bilgi düşecektir.

ASSERT failure in Bölme işlemi: "Sıfıra bölme hatası", file div.cpp, line 7

Q_CC_BOR

Bu tanımlama ile derlemenin Borland/Turbo C++ ile yapılacağını belirtir.

Q_CC_CDS

Bu tanımlama ile derlemenin Reliend C++ ile yapılacağını belirtir.

Q_CC_COMEAU

Bu tanımlama ile derlemenin Comeau C++ ile yapılacağını belirtir.

Q_CC_DEC

Bu tanımlama ile derlemenin DEC C++ ile yapılacağını belirtir.

Q_CC_EDG

Bu tanımlama ile derlemenin Eddison Design Group C++ ile yapılacağını belirtir.

Q_CC_GHS

Bu tanımlama ile derlemenin Green Hills Optimizing C++ ile yapılacağını belirtir.

Q_CC_GNU

Bu tanımlama ile derlemenin GNU C++ ile yapılacağını belirtir.

Q_CC_INTEL

Bu tanımlama ile derlemenin Intel C++ ile yapılacağını belirtir.

Q_CC_MSVC

Bu tanımlama ile derlemenin Microsoft Visual C/C++ veya Intel C++ for Windows ile yapılacağını belirtir.

void Q_CHECK_PTR ( void * pointer )

Parametrenin pointer olup olmadığını kontrol eder.

Q_DECLARE_TYPEINFO ( Type, Flags )

Özellikle bir tip için ekstra bilgi ataması yapmak istediğinizde kullanabilirsiniz. Type ile belirteceğiniz tipe Flag ile özellik bilgisini eklersiniz. Bu özelikler;

  • Q_PRIMITIVE_TYPE ile kurucusu ve yıkıcısı olmayan tiplere ait flagdır. Genellikle POD (plain old data) diye anılırlar.
  • Q_MOVABLE_TYPE ile kurucusu ve/veya yıkıcısı olan bellekte taşınabilir (memcopy() ile) tiplerin flagıdır.
  • Q_COMPLEX_TYPE (varsayılan) kurucusu ve/veya yıkıcısı olan ancak bellekte taşınamayn tiplerin flagıdır.

Primitif bir tip için örnek:

struct Point2D
 {
 int x;
 int y;
 };

Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);

Movable bir tip için örnek:

class Point2D
 {
 public:
 Point2D() { data = new int[2]; }
 Point2D(const Point2D &other) {  }
 ~Point2D() { delete[] data; }

Point2D &operator=(const Point2D &other) {  }

int x() const { return data[0]; }
 int y() const { return data[1]; }

private:
 int *data;
 };

Q_DECLARE_TYPEINFO(Point2D, Q_MOVABLE_TYPE);

qint64 Q_INT64_C ( literal )

Platformdan bağımsız olarak signed int64 oluşturmaya yarar.

Örnek:

 qint64 value = Q_INT64_C(932838457459459);

foreach ( variable, container )

container üzerinden değer çekerek çalışan standart foreach döngüsüdür.

forever

for (;;) döngüsünde olduğu gibi sonsuz döngü oluşturmaya yarar süslü parantezler içerisini sürekli çalıştırır.

Son

This category currently contains no pages or media.