Meta-object System

Мета-объектная система в Qt framework предоставляет поддержку дополнительных возможностей в языке C++, необходимое для интроспекции и рефлексии, предоставляя класс QObject с некоторым функционалом, как базовый. Фактически подавляющее большинство классов в Qt являются наследниками этого класса и реализуют данную систему.[1]

Реализация

Мета-объектная система включает в себя: класс QObject, утилиту moc(Мета-Объектный Компилятор) и необязательный макрос Q_OBJECT.

  1. QObject является базовым классом для всех классов Qt
  2. Мета-объектный компилятор предоставляет каждому подклассу QObject необходимый код на C++, для реализации мета-объектных возможностей, с учетом наличия или отсутствия макроса Q_OBJECT. Компилятор, не изменяет исходный файл, а создает другой содержащий метаобъектный код для каждого из этих классов.
  3. Макрос Q_OBJECT необходим мета-объектному компилятору. Находя данный макрос в исходном коде, компилятор объявляет некоторые функции, которые необходимы для анализа внутреннего состояния и должны быть реализованы в каждом подклассе QObject: metaObject(), tr(), qt_metacall() и некоторые другие.[2]

Допустимо использовать QObject в качестве базового класса и без макроса Q_OBJECT и без мета-объектного кода. Однако в таком случае, ни сигналы и слоты, ни другие возможности, описанные ниже, не будут доступны. С точки зрения метаобъектной системы, подкласс QObject без мета-кода аналогичен своему ближайшему предку с мета-объектным кодом. Это означает, что QMetaObject :: className () вернет не фактическое имя вашего класса, а имя класса этого предка.

Макросы, используемые Мета-Объектным компилятором для аннотации кода — это стандартные макросы C++. Они должны быть корректно распознаны любым инструментом, способным анализировать код на C++. Добавляя макрос Q_OBJECT, программист дописывает объявление нескольких функций.

Класс QObject, при наличии макроса Q_OBJECT содержит в себе поддержку:

  1. Метаобъектной информации. Она включает в себя информацию о наследовании классов, что позволяет определять являются ли классы непосредственными наследниками, а так же узнать имя класса. Предоставляется и информация о мета-методах класса (сигналах, слотах и других вызывающихся функциях с макросом Q_INVOKABLE).
  2. Динамического приведения типов с помощью qobject_cast () для классов QObject . Функция qobject_cast () ведет себя аналогично стандартной C ++ dynamic_cast() с теми преимуществами, что она не требует поддержки RTTI и работает через границы динамических библиотек. Функция пытается привести свой аргумент к типу указателя, указанному в угловых скобках, возвращая ненулевой указатель, если объект имеет правильный тип (определенный во время выполнения), или nullptr , если тип объекта несовместим.
  3. Таймера, и соответственно цикл обработки событий. Дополнительно имеется механизм фильтрации, для перехвата данных событий.
  4. Возможность интернационализации приложения с помощью методов QObject::tr() и QObject::trUtf8().
  5. Поддержку сигналов и слотов , которые используются для связи между слабо-связанными объектами.
  6. Поддержка свойств, для получения информации об объектах Qt, не из C++ кода, например из QML или Qt Script.

Использование мета-объектных систем прошло через некоторую критику. В документации Qt было дано несколько аргументов в пользу мета-объектных систем, включая плюсы генерации кода, динамичности графических интерфейсов, автоматической связи со скриптовыми языками, не добавляя ограничений и так же хорошая, производительность механизма сигналов и слотов в moc.[3] [4]

Ссылки

  1. The Meta-Object System - QtCore 5.1. Qt Project (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 26 августа 2013 года.
  2. Using the Meta-Object Compiler (moc). Qt Project (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 26 августа 2013 года.
  3. Why Does Qt Use Moc for Signals and Slots? Qt Project (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 20 октября 2013 года.
  4. Re-implementing Qt moc using libclang. Olivier Goffart (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 15 июля 2013 года.

Read other articles:

BakhtiariSaad ad-DaulaAli-Qoli Khan BakhtiariTeymur BakhtiarMohammad MosaddeghShapour BakhtiarSoraya Esfandiary-BakhtiariMohsen RezaeeNavab NassirshalalDaerah dengan populasi signifikanProvinsi Khūzestān, Provinsi Chaharmahal dan Bakhtiari, Provinsi Kohgiluyeh dan Boyer-Ahmad, Provinsi Isfahan, dan Provinsi Lorestān IranBahasaBakhtiari dialek, bahasa PersiaAgamaMuslimKelompok etnik terkaitorang Persia Bakhtiari (Persia: بختیاری) adalah sebuah kelompok etnis di Iran, yang sebagian be...

 

Film Indonesiaberdasarkan tahun 1920-an 1926 1927 1928 1929 1930-an 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940-an 1940 1941 1942 1943 1944 1948 1949 1950-an 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960-an 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970-an 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980-an 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990-an 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000-an 2000 2001 2002 2003 2004 2005 2006 200...

 

Mexican Secretary of Education (b. 1961) Ramírez on 26 January 2021 Leticia Ramírez Amaya (Mexico City, 25 March 1961) is a Mexican professor, labor leader, and Morena politician.[1] Since 1 September 2022, she has been the Secretary of Public Education.[2] Career She is a professor of primary education at the Benemérita Escuela Nacional de Maestros [es], a position she obtained in 1984, having led a group for 12 years in schools west of Mexico City.[3]...

Yom KippurYom Kippur (1878)Nama resmibahasa Ibrani: יום כיפור atau יום הכיפוריםNama lainHari PendamaianDirayakan olehorang YahudiJenisKeagamaanMaknaHari penghakiman untuk individu dan semua orang. Hari penebusan dosa, dan untuk Anak sapi emas.Kegiatanpuasa, doaTanggalhari ke-10 di bulan TishreiTahun 202324 SeptemberTahun 2024date missing (please add)Terkait denganRosh Hashanah yang mendahului Yom Kippur, dan Sukkot yang mengikuti Yom Kippur. Yom Kippur (יום כ�...

 

Jean Renoir Oscar onorario 1975 Jean Renoir (Parigi, 15 settembre 1894 – Beverly Hills, 12 febbraio 1979) è stato un regista, sceneggiatore, scrittore e attore francese, secondo figlio del pittore impressionista Pierre-Auguste Renoir. «Ho l'impressione di essere un uccello ... un grosso uccello che becchetta i frutti dei più disparati frutteti [...] Sono stato felice. Ho girato dei film che ho desiderato girare. Li ho girati con persone che erano più che dei collaboratori, erano dei com...

 

Various foods This is a categorically-organized list of foods. Food is any substance consumed to provide nutritional support for the body.[1] It is produced either by plants, animals, or fungi, and contains essential nutrients, such as carbohydrates, fats, proteins, vitamins, and minerals. The substance is ingested by an organism and assimilated by the organism's cells in an effort to produce energy, maintain life, or stimulate growth. Note: due to the high number of foods in existen...

You can help expand this article with text translated from the corresponding article in German. (February 2023) Click [show] for important translation instructions. View a machine-translated version of the German article. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pasting machine-translated text into the English Wikip...

 

Sungai SipaiSungai SipaiLokasi mulut sungaiTampilkan peta KalimantanSungai Sipai (Indonesia)Tampilkan peta IndonesiaLokasiNegaraIndonesiaProvinsiKalimantan SelatanCiri-ciri fisikHulu sungai  - lokasiKalimantan Sungai Sipai atau Sungai Sifa adalah sungai yang mengalir di kota Banjarmasin, Kalimantan Selatan, Indonesia. Geografi Sungai ini mengalir di kecamatan Banjarmasin Tengah.[1] Sungai Sipai memiliki panjang 404,455 m dengan lebar 10-12 m.[2] Lihat pula Dafta...

 

  لمعانٍ أخرى، طالع هجوم القنيطرة (توضيح). هجوم القنيطرة (أكتوبر 2015) جزء من الحرب الأهلية السورية الوضع العسكري الحالي في محافظة القنيطرة. ساحة القتال ظاهرة في المربع الأسود.      سيطرة الجيش السوري      سيطرة المعارضة      سيطرة تنظي�...

Not to be confused with: Eugenics Study of improving living conditions to increase well-being Euthenics (/juːˈθɛnɪks/) is the study of improvement of human functioning and well-being by improvement of living conditions.[1] Improvement is conducted by altering external factors such as education and the controllable environments, including environmentalism, education regarding employment, home economics, sanitation, and housing, as well as the prevention and removal of contagious d...

 

Municipality in Mecklenburg-Vorpommern, GermanyAnkershagen MunicipalityGutshaus Rumpshagen [de] in Ankershagen Coat of armsLocation of Ankershagen within Mecklenburgische Seenplatte district Ankershagen Show map of GermanyAnkershagen Show map of Mecklenburg-VorpommernCoordinates: 53°28′36″N 12°58′0″E / 53.47667°N 12.96667°E / 53.47667; 12.96667CountryGermanyStateMecklenburg-VorpommernDistrictMecklenburgische Seenplatte Municipal assoc.Penzliner...

 

Carrier CorporationIndustriSistem pemanas ruangan, ventilasi, dan pengkondisi udara (HVAC)Didirikan1915; 109 tahun lalu (1915) Syracuse, New YorkPendiriWillis CarrierKantorpusatKomersial: Charlotte, Carolina Utara, Amerika Serikat[1]Residensial: Indianapolis, Indiana, Amerika Serikat.[2]KaryawanSekitar 45.000IndukUnited TechnologiesSitus webcarrier.com Carrier Corporation adalah sebuah merek dari divisi Iklim, Pengendali, dan Keamanan UTC, yang berkantor pusat di Palm Bea...

Midway attraction operated by Merlin Entertainments in County Hall, London DreamWorks Tours: Shrek's Adventure!County Hall, LondonCoordinates51°30′7″N 0°7′8″W / 51.50194°N 0.11889°W / 51.50194; -0.11889StatusOperatingOpening dateJuly 2015 (2015-07) Ride statisticsThemeShrek DreamWorks Tours: Shrek's Adventure!, commonly referred to as Shrek's Adventure!,[1][2] is a tourist attraction located in the County Hall building, London. It ...

 

نظرية النسبيةصنف فرعي من نظرية علمية جزء من فيزياء حديثة يمتهنه relativity theorist (en) فروع النسبية العامة — النسبية الخاصة الموضوع زمكان التاريخ تاريخ النسبية الخاصة تعديل - تعديل مصدري - تعديل ويكي بيانات جزء من سلسلة مقالات حولمواضيع في نظرية النسبية نظريات النسبية الخاصة العا�...

 

Movement started in 1998 by Anwar Ibrahim For other uses, see Reformasi. This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article may require cleanup to meet Wikipedia's quality standards. The specific problem is: Suspicions of authors/academics adding their own works in the page without full disclosure. Please help improve this article if you can. (August 2018) (Learn how and when to...

Marion County, AlabamaLokasi di negara bagian AlabamaLokasi negara bagian Alabama di Amerika SerikatDidirikanFebruary 13, 1818SeatHamiltonKota terbesarHamiltonWilayah • Keseluruhan744 sq mi (1.927 km2) • Daratan741 sq mi (1.919 km2) • Perairan2 sq mi (5 km2), (0.29%)Populasi • (2000)31.214 • Kepadatan21/sq mi (8/km²) Marion County, Alabama adalah county yang terletak di negara bagian...

 

American basketball player, coach, and college athletics administrator (1927–2022) Leland ByrdByrd from the 1973 Monticola.Biographical detailsBorn(1927-04-08)April 8, 1927Lynch, Kentucky, U.S.DiedJanuary 19, 2022(2022-01-19) (aged 94)Morgantown, West Virginia, U.S.Playing career1944–1948West Virginia Coaching career (HC unless noted)1953–1955Hinton HS1955–1966Glenville State Administrative career (AD unless noted)1962–1966Glenville State1966–1969Miami Dade North Campus (ass...

 

1990 European Athletics Indoor ChampionshipsTrack events60 mmenwomen200 mmenwomen400 mmenwomen800 mmenwomen1500 mmenwomen3000 mmenwomen60 m hurdlesmenwomen3000 m walkwomen5000 m walkmenField eventsHigh jumpmenwomenPole vaultmenLong jumpmenwomenTriple jumpmenwomenShot putmenwomenvte The women's 3000 metres event at the 1990 European Athletics Indoor Championships was held in Kelvin Hall on 3 March.[1] Results Rank Name Nationality Time Notes Elly van Hulst  Netherlands 8:57.28 Ma...

Distintos tipos de llaves, entre otras herramientas, en la pared de un garaje Las llaves de apriete son las herramientas manuales que se utilizan para apretar elementos atornillados mediante tornillos o tuercas con cabezas principalmente hexagonales. En las industrias o grandes producciones estas llaves son sustituidas por pistolas neumáticas o por atornilladoras eléctricas portátiles. Llave de boca fija Llave de estrella acodada Llave de boca mixta o combinada Las llaves de boca fija son ...

 

Lake freighter that sank in Lake Superior The Western Reserve prior to her sinking History United States NameWestern Reserve NamesakeWestern Reserve OwnerMinch Transportation Co. BuilderCleveland Shipbuilding Co., Cleveland CostUS$200,000 Yard number9 Launched20 August 1890 Maiden voyage6 October 1890 HomeportCleveland IdentificationUS Official Number 81294 FateSank, 30 August 1892 General characteristics TypeBulk carrier Tonnage 2,392.05 GRT 1,965.08 NRT 3,000 DWT Length300...