Q_OBJECT Makrosu Nedir?

Q_OBJECT makrosu muhtemelen Qt ile geliştirmeye başladığınızda karşılacağınız en garip tanımlardan biridir.

Qt’nin QObject Sınıfı içindeki tanımı:

  • Q_OBJECT makrosu, kendi sinyallerini ve yuvalarını bildiren veya Qt’nin meta-nesne sistemi tarafından sağlanan diğer hizmetleri kullanan bir sınıfın başlık dosyası tanımında bulunmalıdır.
class Foo: public QObject
{
    Q_OBJECT

public:
    Foo(QObject * parent = 0);
    ~Foo();

signals:
    void mySignal ();

public slots:
    void mySlot ();
};

Öyleyse, sinyal ve yuva kullanmamıza ve muhtemelen başka amaçlar için (meta-nesne ile ilgili) ihtiyacımız var gibi görünüyor.

Burada MOC işleyicinin dikkat çekici çalışması aslında olayları açıklıyor.

MOC ile ilgili tanımlama şöyle:

  • Meta-Object Compiler (MOC), Qt’nin C ++ uzantılarını işleyen programdır.
  • MOC aracı bir C ++ başlık dosyasını okur. Q_OBJECT makrosunu içeren bir veya daha fazla sınıf bildirimi bulursa, bu sınıflar için meta nesne kodunu içeren bir C ++ kaynak dosyası üretir. Diğer şeylerin yanı sıra, sinyaller ve yuva mekanizması, çalışma zamanı türü bilgisi ve dinamik özellik sistemi için meta nesne kodu gereklidir.

Signal ve Slot hakkında başka bir tanımlama :

  • Sinyalleri veya yuvaları içeren tüm sınıflar, bildirimlerinin en üstünde Q_OBJECT’i belirtmelidir. Ayrıca (doğrudan veya dolaylı olarak) QObject’ten türetmeleri gerekir.

Sinyal ve yuva arasında bağlantı kurmak istediğimizde, bunu aslında Object kapsamıyla yaptığımızı unutmayın :

QObject::connect (sender, signal, receiver, slot):

Q_OBJECT makrosu her zaman gerekli midir?

  1. Hızlı cevap: Hayır.
  2. Daha iyi cevap: Her zaman oraya koyun.

Aslında, Q_OBJECT makrosu yalnızca, sinyalleri ve yuva mekanizmasını, çalışma zamanı türü bilgisini, dinamik özellik sistemini ve uluslararasılaştırma için çevirme özelliklerini kullanmak için moc aracı tarafından meta-nesne kodunun üretilmesi gerektiğinde gereklidir.

QObject’i Q_OBJECT makrosu ve meta-nesne kodu olmadan bir temel sınıf olarak kullanmak mümkün olsa da, Q_OBJECT makrosu kullanılmadığında ne sinyaller ve yuvalar ne de burada açıklanan diğer özellikler kullanılamayacaktır.

Genel olarak, tüm Qt geliştiricilerinin, yukarıda listelenen özellikleri gerçekten kullansalar da kullanmasalar da, QObject’in her alt sınıfı için Q_Object’i kullanmaları şiddetle tavsiye edildiği görülmektedir.

Yazının içeriği: https://www.bogotobogo.com/ adresinden alınmıştır.

Hakan Kaya
Yarı zamanlı mühendis. Yarı zamanlı eğitmen. Biraz da film sever.
error: 5846 sayılı Fikir ve Sanat Eserleri Kanunu tarafında içeriklerin izinsiz kopyalanması, paylaşılması ve çoğaltılması yasaktır.