Category:GlobalTanimlamalar: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
'''Türkçe'''
'''Türkçe'''


= <QtGlobal> Global Tanımlamalar =
= <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.''
''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 &lt;QtGlobal&amp;gt; header dosyasında bulunmaktadır. Global tanım listesine bu dökümanın ingilizce versiyonundan ulaşabilirsiniz.
Global tanımlar <QtGlobal> header dosyasında bulunmaktadır. Global tanım listesine bu dökümanın ingilizce versiyonundan ulaşabilirsiniz.


=== Tipler (Types) ===
=== Tipler (Types) ===
Line 17: Line 17:
=== Fonksiyonlar (Functions) ===
=== Fonksiyonlar (Functions) ===


&lt;QtGlobal&amp;gt; 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.
<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:
Örnek:


<code>int valueA = 10;<br />int valueB = 5;
<code>int valueA = 10;
int valueB = 5;


int valueMin = qMin(valueA, valueB);<br />// valueMin == 5</code>
int valueMin = qMin(valueA, valueB);
// valueMin == 5</code>


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


Örnek:
Örnek:


<code><br />if (!driver()<s>&gt;isOpen() || dirver()</s>&gt;isOpenError()) {<br />qWarning(&quot;Sql Hatası: Database açılamıyor&amp;quot;);<br />}<br /></code>
<code>
if (!driver()->isOpen() || dirver()->isOpenError()) {
qWarning("Sql Hatası: Database açılamıyor");
}
</code>


Örnekte görüldüğü gibi varsayım bir veritabanına bağlantı kurulduğunda hata olma ihtimali sonucu bir uyarı mesajı üretmiş olduk.
Örnekte görüldüğü gibi varsayım bir veritabanına bağlantı kurulduğunda hata olma ihtimali sonucu bir uyarı mesajı üretmiş olduk.
Line 35: Line 41:
=== Makrolar (Macros) ===
=== Makrolar (Macros) ===


&lt;QtGlobal&amp;gt; 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.
<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.
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.
Line 46: Line 52:


<code> void aMsgHandler(QtMsgType, const char '''); <code>
<code> void aMsgHandler(QtMsgType, const char '''); <code>
<br />h4. enum QtMsgType
 
<br />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.
h4. enum QtMsgType
<br />h4. typedef qint8
 
<br />p. Bu tanımlama signed char içindir. Bu sayede 8-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.
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.
<br />h4. typedef qint16
 
<br />p. Bu tanımlama signed short içindir. Bu sayede 16-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.
h4. typedef qint8
<br />h4. typedef qint32
 
<br />p. Bu tanımlama signed int içindir. Bu sayede 32-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.
p. Bu tanımlama signed char içindir. Bu sayede 8-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.
<br />h4. typedef qint64
 
<br />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.
h4. typedef qint16
<br /></code>qint64 data = Q_INT64_C(932838457459459);</code>
 
<br />h4. typedef qlonglogn
p. Bu tanımlama signed short içindir. Bu sayede 16-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.
<br />p. Bu qint64 ile aynı yapıya sahiptir.
 
<br />h4. typedef qptrdiff
h4. typedef qint32
<br />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.
 
<br />h4. typedef qreal
p. Bu tanımlama signed int içindir. Bu sayede 32-bit lik data tüm platformlarda Qt tarafından desteklenmiş olur.
<br />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.
 
<br />h4. typedef quint8
h4. typedef qint64
<br />p. Bu değişken unsigned char içindir.
 
<br />h4. typedef quint16
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.
<br />p. Bu değişken unsigned short içindir.
 
<br />h4. typedef quint32
</code>qint64 data = Q_INT64_C(932838457459459);</code>
<br />p. Bu değişken unsigned int içindir.
 
<br />h4. typedef quint64
h4. typedef qlonglogn
<br />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.
 
<br />h4. typedef quintptr
p. Bu qint64 ile aynı yapıya sahiptir.
<br />p. Bu değişken unsigned pointer farklılığı içindir. Bu sayede herhangi bir boyuttaki unsigned pointerlar Qt tarafından farklı platformlarda desteklenmektedir.
 
<br />h4. typedef qulonglong
h4. typedef qptrdiff
<br />p. Bu değişken quintptr ile aynıdır.
 
<br />h4. typedef uchar
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.
<br />p. unsigned char için en kolay uyuşumlu tiptir.
 
<br />h4. typedef uint
h4. typedef qreal
<br />p. unsigned int için en kolay uyuşumlu tiptir.
 
<br />h4. typedef ulong
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.
<br />p. unsigned long için en kolay uyuşumlu tiptir.
 
<br />h4. typedef ushort
h4. typedef quint8
<br />p. unsigned short için en kolay uyuşumlu tiptir.
 
<br />h3. Fonkisyon Dökümantasyonu
p. Bu değişken unsigned char içindir.
<br />h4. T qAbs(const T &amp; value)
 
<br />p. qAbs fonksiyonu T tipi ile verilen değeri 0 dan uzaklaştırarak mutlak değerini alır.
h4. typedef quint16
<br />p. Örnek:
 
<br /><code><br />int mutlakDeger;<br />int orijinalDeger = –14;
p. Bu değişken unsigned short içindir.
<br />mutlakDeger = qAbs(orijinalDeger);<br />// mutlakDeger == 14<br /></code>
 
<br />h4. const T &amp; qBound( const T &amp; min, const T &amp; value, const T &amp; max )
h4. typedef quint32
<br />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.
 
<br />p. Örnek:
p. Bu değişken unsigned int içindir.
<br /><code><br />int xValue = 0;<br />int minValue = 2;<br />int maxValue = 8;
 
<br />int boundedValue = qBound(minValue, xValue, maxValue);<br />// boundedValue == 2<br /></code>
h4. typedef quint64
<br />h4. void qCritical ( const char''' msg, … )
 
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.
 
h4. 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.
 
h4. typedef qulonglong
 
p. Bu değişken quintptr ile aynıdır.
 
h4. typedef uchar
 
p. unsigned char için en kolay uyuşumlu tiptir.
 
h4. typedef uint
 
p. unsigned int için en kolay uyuşumlu tiptir.
 
h4. typedef ulong
 
p. unsigned long için en kolay uyuşumlu tiptir.
 
h4. typedef ushort
 
p. unsigned short için en kolay uyuşumlu tiptir.
 
h3. Fonkisyon Dökümantasyonu
 
h4. T qAbs(const T &amp; value)
 
p. qAbs fonksiyonu T tipi ile verilen değeri 0 dan uzaklaştırarak mutlak değerini alır.
 
p. Örnek:
 
<code>
int mutlakDeger;
int orijinalDeger = –14;
 
mutlakDeger = qAbs(orijinalDeger);
// mutlakDeger == 14
</code>
 
h4. const T &amp; qBound( const T &amp; min, const T &amp; value, const T &amp; 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:
 
<code>
int xValue = 0;
int minValue = 2;
int maxValue = 8;
 
int boundedValue = qBound(minValue, xValue, maxValue);
// boundedValue == 2
</code>
 
h4. 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.
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.
Line 100: Line 164:
Örnek:
Örnek:


<code><br />void load(const QString &amp;fileName)<br />{<br />QFile file&amp;amp;#40;fileName&amp;amp;#41;;<br />if (!file.exists())<br /> qCritical(&quot;%s dosyası bulunamadı!&quot;, qPrintable(fileName));<br />}<br /></code>
<code>
void load(const QString &amp;fileName)
{
QFile file(fileName);
if (!file.exists())
qCritical("%s dosyası bulunamadı!", qPrintable(fileName));
}
</code>


==== void qDebug ( const char * msg, … ) ====
==== void qDebug ( const char * msg, … ) ====
Line 134: Line 205:
Örnek:
Örnek:


<code><br />int benimVeri = 10;<br />int seninVeri = 5;
<code>
int benimVeri = 10;
int seninVeri = 5;


int enBuyukKim = qMax(benimVeri, seninVeri);<br />// enBuyukKim == benimVeri<br /></code>
int enBuyukKim = qMax(benimVeri, seninVeri);
// enBuyukKim == benimVeri
</code>


==== const T &amp; qMin ( const T &amp; value1, const T &amp; value2 ) ====
==== const T &amp; qMin ( const T &amp; value1, const T &amp; value2 ) ====
Line 148: Line 223:
Örnek:
Örnek:


<code><br />qreal deger1 = 42949672960.3;<br />qreal deger2 = 42949672960.7;
<code>
qreal deger1 = 42949672960.3;
qreal deger2 = 42949672960.7;


int roundedDeger1 = qRound(deger1);<br />// roundedDeger1  42949672960
int roundedDeger1 = qRound(deger1);
// roundedDeger1  42949672960
int roundedDeger2 = qRound(deger2);
int roundedDeger2 = qRound(deger2);
// roundedDeger2  42949672961<br /></code>
// roundedDeger2  42949672961
</code>


==== int qRound ( qreal value ) ====
==== int qRound ( qreal value ) ====
Line 160: Line 239:
==== const char * qVersion () ====
==== const char * qVersion () ====


Çalışma esnasında qt nin versiyonunu öğrenmek isterseniz bu fonksiyonla String tipinde versiyonu alabilirsiniz (Örneğin, &quot;4.1.0&amp;quot;). Ayrıca QT_VERSION_STR makrosuna da bakınız.
Ç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, … ) ====
==== void qWarning ( const char * msg, … ) ====
Line 170: Line 249:
Örnek:
Örnek:


<code><br />void f(int c)<br />{<br /> if ( c &gt; 500 )<br /> qWarning(&quot;f: bad argument, c == %d&amp;quot;, c);<br />}<br /></code>
<code>
void f(int c)
{
if ( c > 500 )
qWarning("f: bad argument, c == %d", c);
}
</code>


Eğer program çalışırken süpriz bir çıktıyla karşılaşmak istemiyorsanız tavsiye qInstallMsgHandler() 'i install etmektir.
Eğer program çalışırken süpriz bir çıktıyla karşılaşmak istemiyorsanız tavsiye qInstallMsgHandler() 'i install etmektir.
Line 190: Line 275:
C++ da ki rand() fonksiyonunun Thread-safe versiyonudur.
C++ da ki rand() fonksiyonunun Thread-safe versiyonudur.


Geri döndereceği sayıyı 0 ile RAND_MAX (bu max &lt;cstdlib&amp;gt; ve &lt;stdlib.h&amp;gt; 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.
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 ) ====
==== void qsrand ( uint seed ) ====
Line 224: Line 309:
Örnek:
Örnek:


<code><br /> #include &lt;QApplication&amp;gt;<br /> #include &lt;QMessageBox&amp;gt;
<code>
#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();
}
</code>
 
h4. 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:
 
<code>
// 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 &amp;serverName)
{
TPtrC name;
TInt err;
QT_TRYCATCH_ERROR(err, name.Set(qt_QString2TPtrC(serverName)));
if (err != KErrNone)
return err;
return iServer.Connect(name);
}
</code>
 
h4. 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:
 
<code>
#if QT_VERSION >= 0x040100
QIcon icon = style()->standardIcon(QStyle::SP_TrashIcon);
#else
QPixmap pixmap = style()->standardPixmap(QStyle::SP_TrashIcon);
QIcon icon(pixmap);
#endif
</code>
 
h4. QT_VERSION_STR
 
p. String tipinde (örn: 4.1.0) versiyon bilgisini almamıza yarar.
 
h4. 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:
 
<code>
// File: div.cpp
 
#include <QtGlobal>
 
int divide(int a, int b)
{
Q_ASSERT(b != 0);
return a / b;
}
</code>
 
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.
 
<code>
ASSERT: "b == 0" in file div.cpp, line 7
</code>


int main(int argc, char '''argv[])<br /> {<br /> QT_REQUIRE_VERSION(argc, argv, &quot;4.0.2&amp;quot;)
h4. void Q_ASSERT_X ( bool test, const char''' where, const char * what )
<br /> QApplication app(argc, argv);<br /> …<br /> return app.exec&amp;amp;#40;&amp;#41;;<br /> }<br /></code>
<br />h4. QT_TRYCATCH_ERROR ( error, function )
<br />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.
<br />p. Örnek:
<br /><code><br /> // Burada Symbian TInt tipinde hata kodunu üreterek bize sunar.<br /> // Örnekte server adını translate ederken oluşacak hatayı algılamaya çalışılmıştır.<br /> // Eğer hata olursa geri dönecek değer KErrNone sabitinden farklı olacaktır.<br /> TInt QServerApp::Connect(const QString &amp;serverName)<br /> {<br /> TPtrC name;<br /> TInt err;<br /> QT_TRYCATCH_ERROR(err, name.Set(qt_QString2TPtrC(serverName)));<br /> if (err != KErrNone)<br /> return err;<br /> return iServer.Connect(name);<br /> }<br /></code>
<br />h4. QT_VERSION
<br />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.
<br />p. Örnek:
<br /><code><br /> #if QT_VERSION &gt;= 0x040100<br /> QIcon icon = style()<s>&gt;standardIcon(QStyle::SP_TrashIcon);<br /> #else<br /> QPixmap pixmap = style()</s>&gt;standardPixmap(QStyle::SP_TrashIcon);<br /> QIcon icon(pixmap);<br /> #endif<br /></code>
<br />h4. QT_VERSION_STR
<br />p. String tipinde (örn: 4.1.0) versiyon bilgisini almamıza yarar.
<br />h4. void Q_ASSERT ( bool test )
<br />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.
<br />p. Örnek:
<br /><code><br /> // File: div.cpp
<br /> #include &lt;QtGlobal&amp;gt;
<br /> int divide(int a, int b)<br /> {<br /> Q_ASSERT(b != 0);<br /> return a / b;<br /> }<br /></code>
<br />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.
<br /><code><br />ASSERT: &quot;b == 0&amp;quot; in file div.cpp, line 7<br /></code>
<br />h4. 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.
Q_ASSERT den farklı olarak nerede ve ne bilgileri de mesaj olarak gönderilir.
Line 252: Line 393:
Örnek:
Örnek:


<code><br /> // File: div.cpp
<code>
// File: div.cpp


#include &lt;QtGlobal&amp;gt;
#include <QtGlobal>


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


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


<code><br />ASSERT failure in Bölme işlemi: &quot;Sıfıra bölme hatası&amp;quot;, file div.cpp, line 7<br /></code>
<code>
ASSERT failure in Bölme işlemi: "Sıfıra bölme hatası", file div.cpp, line 7
</code>


==== Q_CC_BOR ====
==== Q_CC_BOR ====
Line 312: Line 461:
Primitif bir tip için örnek:
Primitif bir tip için örnek:


<code><br />struct Point2D<br /> {<br /> int x;<br /> int y;<br /> };
<code>
struct Point2D
{
int x;
int y;
};


Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);<br /></code>
Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);
</code>


Movable bir tip için örnek:
Movable bir tip için örnek:


<code><br />class Point2D<br /> {<br /> public:<br /> Point2D() { data = new int[2]; }<br /> Point2D(const Point2D &amp;other) { … }<br /> ~Point2D() { delete[] data; }
<code>
class Point2D
{
public:
Point2D() { data = new int[2]; }
Point2D(const Point2D &amp;other) { … }
~Point2D() { delete[] data; }


Point2D &amp;operator=(const Point2D &amp;other) { … }
Point2D &amp;operator=(const Point2D &amp;other) { … }


int x() const { return data[0]; }<br /> int y() const { return data[1]; }
int x() const { return data[0]; }
int y() const { return data[1]; }


private:<br /> int *data;<br /> };
private:
int *data;
};


Q_DECLARE_TYPEINFO(Point2D, Q_MOVABLE_TYPE);<br /></code>
Q_DECLARE_TYPEINFO(Point2D, Q_MOVABLE_TYPE);
</code>


==== qint64 Q_INT64_C ( literal ) ====
==== qint64 Q_INT64_C ( literal ) ====
Line 334: Line 499:
Örnek:
Örnek:


<code><br /> qint64 value = Q_INT64_C(932838457459459);<br /></code>
<code>
qint64 value = Q_INT64_C(932838457459459);
</code>


==== foreach ( variable, container ) ====
==== foreach ( variable, container ) ====

Revision as of 11:02, 25 February 2015

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>

h4. 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.

h4. typedef qint8

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

h4. typedef qint16

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

h4. typedef qint32

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

h4. 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);

h4. typedef qlonglogn

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

h4. 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.

h4. 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.

h4. typedef quint8

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

h4. typedef quint16

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

h4. typedef quint32

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

h4. 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.

h4. 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.

h4. typedef qulonglong

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

h4. typedef uchar

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

h4. typedef uint

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

h4. typedef ulong

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

h4. typedef ushort

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

h3. Fonkisyon Dökümantasyonu

h4. 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

h4. 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

h4. 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 &amp;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();
 }

h4. 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 &amp;serverName)
 {
 TPtrC name;
 TInt err;
 QT_TRYCATCH_ERROR(err, name.Set(qt_QString2TPtrC(serverName)));
 if (err != KErrNone)
 return err;
 return iServer.Connect(name);
 }

h4. 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

h4. QT_VERSION_STR

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

h4. 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

h4. 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 &amp;other) {  }
 ~Point2D() { delete[] data; }

Point2D &amp;operator=(const Point2D &amp;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.