QT Framework
QT Essentials definiuje podstawę QT na wszystkich platformach. Są one dostępne na wszystkich obsługiwanych platformach programistycznych i na testowanych platformach docelowych.
Streszczenie:
1. Framework QT to kompleksowy zestaw klas bibliotek C ++, które upraszczają tworzenie aplikacji.
2. QT produkuje wysoce czytelny, konserwowalny i wielokrotnego użytku z wysokim działaniem i niewielkim śladem.
3. QT jest platforma krzyżowa, umożliwiając programistom tworzenie aplikacji dla wielu platform.
4. QT Essentials, takie jak QT Core, QT GUI, QT Multimedia, QT Network, QT Quick i QT SQL, stanowią podstawę QT na wszystkich platformach.
5. QT zapewnia również dodatki, takie jak QT OpenGL, QT Wayland Compositor, QT Sensors, QT WebView, QT Safe Renderer i QT SCXML dla określonych zadań.
6. Ramy QT priorytetowo traktuje potencjalne zagrożenia i obawy dotyczące bezpieczeństwa.
7. Deweloperzy powinni mieć wcześniejszą wiedzę na temat C ++ przed użyciem QT.
8. Seria samouczka QT obejmuje takie tematy, jak C ++ przypomnienie, wprowadzenie do funkcji QT, QT Creator, tworzenie okien i przycisków, hierarchia klasy QT i wiele innych.
9. Wzór obserwatora, sygnały i szczeliny oraz informacje o transmisji to niektóre z zaawansowanych funkcji omówionych w serii samouczków.
Pytania:
- Czy QT używa c++?
Tak, QT jest napisane przede wszystkim w C ++ i zapewnia zestaw klas bibliotek C ++ do tworzenia aplikacji. - Co to są niezbędne?
QT Essentials są podstawą QT i obejmują moduły takie jak QT Core, QT GUI, QT Multimedia, QT Network, QT Quick i QT SQL. - Jakie są dodatki QT?
Niektóre dodatki QT obejmują QT OpenGL, QT Wayland Compositor, QT Sensors, QT WebView, QT Safe Renderer i QT SCXML. - W jaki sposób QT priorytetowo traktuje bezpieczeństwo?
Grupa QT aktywnie odnosi się do potencjalnych zagrożeń i problemów bezpieczeństwa oraz przestrzega polityki bezpieczeństwa określonej w polityce bezpieczeństwa projektu QT. - Jaka wiedza jest wymagana do użycia QT?
Deweloperzy powinni mieć wiedzę na temat C ++ przed rozpoczęciem od QT. - Jakie tematy są omawiane w serii samouczków QT?
Seria samouczka obejmuje takie tematy, jak przypomnienie C ++, wprowadzenie do funkcji QT, QT Creator, tworzenie okien i przycisków, hierarchia klasy QT i wiele innych. - Jakie zaawansowane funkcje są omawiane w serii samouczków?
Seria samouczka obejmuje zaawansowane funkcje, takie jak wzór obserwatora, sygnały i szczeliny oraz informacje o transmisji. - Jest qt cross-platform?
Tak, QT jest platforma krzyżowa i umożliwia programistom tworzenie aplikacji działających na wielu platformach. - Jaki jest cel dodatków QT i dodatków QT?
QT Essential stanowi podstawę QT, a dodatki QT oferują dodatkową funkcjonalność dla określonych zadań. - Jak QT zapewnia bezpieczeństwo?
QT aktywnie analizuje raporty podatności i podejmuje szybkie działania w celu rozwiązania ich problemu. Grupa QT uczestniczy również w odpowiednich grupach sterujących w zakresie problemów bezpieczeństwa. - Jakie są korzyści z korzystania z QT?
QT umożliwia programistom pisanie wysoce czytelnego i możliwego do utrzymania kodu z doskonałą wydajnością czasu wykonywania. Zapewnia również możliwości międzyplatformowe. - Co to jest framework QT?
Ramy QT składa się z kompleksowego zestawu klas bibliotek C ++, które upraszczają opracowywanie aplikacji i zapewniają modułowość. - Jaki jest wzór obserwatora?
Wzór obserwatora jest wzorem projektowym, w którym obiekt zwany obiektem, utrzymuje listę obserwatorów, którzy od niego zależą. Kiedy stan podmiotu się zmienia, powiadamia wszystkich swoich obserwatorów do automatycznej aktualizacji. - Jakie są sygnały i szczeliny?
Sygnały i szczeliny są mechanizmem w QT do komunikacji między obiektami. Sygnały są emitowane przez obiekty, gdy pojawią się określone zdarzenia, a szczeliny są funkcjami, które można podłączyć do odbierania i obsługi sygnałów. - Jak można przesyłać informacje w QT?
Informacje mogą być przesyłane w QT za pomocą sygnałów i gniazd, w których sygnały przenoszą informacje i szczeliny odbierają i przetwarzają.
Odpowiedzi:
1. Czy QT używa c++?
Tak, QT używa przede wszystkim C ++ do swojego rozwoju. To pozwala programistom wykorzystać moc i elastyczność języka C ++ w ich aplikacjach QT.
2. Co to są niezbędne?
QT Essentials to fundamentalne moduły w QT, które stanowią podstawę ram. Należą do nich QT Core, QT GUI, QT Multimedia, QT Network, QT Quick i QT SQL. Zapewniają one niezbędną funkcjonalność różnych aspektów tworzenia aplikacji, takich jak klasy nie graficzne, graficzne komponenty interfejsu użytkownika, obsługa multimedialna, programowanie sieciowe, opracowanie aplikacji deklaratywnych i integracja bazy danych za pomocą SQL.
3. Jakie są dodatki QT?
QT zapewnia różne dodatki, które oferują dodatkową funkcjonalność dla określonych zadań. Niektóre przykłady dodatków QT to:
- QT OpenGL: Zajęcia dla obsługi OpenGL. Przestarzałe na korzyść klas Qopengl w module GUI QT.
- QT Wayland Compositor: Ramy opracowania kompozytora Wayland.
- Czujniki QT: Zajęcia dostępu do sprzętu czujnika i umożliwienia rozpoznawania gestów ruchu.
- QT WebView: Moduł, który umożliwia wyświetlanie treści internetowych w aplikacji QML za pomocą rdzennych interfejsów API platformy zamiast pełnego stosu przeglądarki internetowej.
- QT bezpieczny renderer: Zapewnia komponent renderowania interfejsu użytkownika do renderowania elementów krytycznego bezpieczeństwa, takich jak wskaźniki ostrzegawcze, w funkcjonalnych systemach bezpieczeństwa.
- QT SCXML: Oferuje zajęcia i narzędzia do tworzenia maszyn stanowych z plików SCXML i osadzania ich w aplikacjach.
4. W jaki sposób QT priorytetowo traktuje bezpieczeństwo?
Grupa QT poważnie traktuje obawy dotyczące bezpieczeństwa i ma dedykowane podejście do rozwiązania potencjalnych luk w zabezpieczeniach. Ponieważ QT jest opracowywana jako projekt typu open source, analiza raportu podatności odbywa się przez wyznaczonych pracowników i współpracowników zewnętrznych. Grupa QT aktywnie uczestniczy w odpowiednich grupach sterujących i niezwłocznie podejmuje działania po otrzymaniu raportów podatności. Szczegółowe procedury obsługi raportów podatności są przedstawione w polityce bezpieczeństwa projektu QT.
5. Jaka wiedza jest wymagana do użycia QT?
Przed rozpoczęciem od QT zaleca się dobre zrozumienie C++. QT mocno wykorzystuje C ++ do jego rozwoju, a solidne zrozumienie języka ułatwi pracę z QT Framework i jego interfejsami API.
6. Jakie tematy są omawiane w serii samouczków QT?
Seria samouczków QT obejmuje szeroki zakres tematów, które pomagają początkującym w rozpoczęciu rozwoju aplikacji QT. Niektóre z omawianych tematów obejmują:
- Przypomnienie C ++ w celu odświeżenia podstaw
- Wprowadzenie do QT, jego funkcji i możliwości międzyplatformowych
- Przewodnik po instalacji SDK QT
- Przegląd QT Creator i jego funkcji
- Tworzenie pierwszego okna i zrozumienie procesu kompilacji
- Dodawanie interaktywnych elementów, takich jak przyciski do aplikacji
- Zrozumienie hierarchii klasy QT i koncepcja rodzicielstwa Qobject
- Podklasowanie QWidget i tworzenie niestandardowych widżetów
- Dalsze zasoby czytania i zalecenia
7. Jakie zaawansowane funkcje są omawiane w serii samouczków?
Oprócz podstaw, seria samouczka QT zagłębia się w bardziej zaawansowane tematy. Niektóre przykłady objętych zaawansowanych funkcji to:
- Wzór obserwatora: badanie koncepcji i sposobu wdrożenia jej w aplikacjach QT
- Sygnały i szczeliny: Zrozumienie mechanizmu komunikacji między obiektami
- Przekazywanie informacji: Jak przekazywać informacje między różnymi częściami aplikacji za pomocą sygnałów i gniazd
- Funkcje sygnałów i szczelin: dodatkowe funkcje i możliwości mechanizmu sygnałów i szczelin
8. Jest qt cross-platform?
Tak, QT to framework międzyplatformowy. Pozwala programistom pisać ich aplikacje raz i wdrażać je na wielu platformach, w tym w systemie Windows, MacOS, Linux, Android i iOS. QT zapewnia abstrakcje i interfejsy API, które obsługują szczegóły specyficzne dla platformy, co ułatwia tworzenie aplikacji, które działają konsekwentnie w różnych systemach operacyjnych.
9. Jaki jest cel dodatków QT i dodatków QT?
QT Essentials stanowi podstawę struktury QT, zapewniając podstawowe funkcjonalność i klasy, które są szeroko stosowane w tworzeniu aplikacji. Zapewniają spójne i niezawodne doświadczenie rozwoju na różnych platformach. Z drugiej strony dodatki QT oferują dodatkowe moduły i funkcje, które są bardziej specyficzne dla niektórych przypadków użycia lub domeny. Zapewniają rozszerzoną funkcjonalność i możliwości wykraczające poza podstawy.
10. Jak QT zapewnia bezpieczeństwo?
QT przyjmuje proaktywne podejście do bezpieczeństwa, aktywnie analizując i zajmując się potencjalnymi lukami w swoich produktach. Grupa QT uczestniczy w odpowiednich grupach sterujących i niezwłocznie odpowiada na raporty podatności. Dodatkowo, jako projekt typu open source, QT zaprasza zewnętrznych współpracowników do przeglądu i analizy kodu, zwiększając ogólne bezpieczeństwo ramy.
11. Jakie są korzyści z korzystania z QT?
Korzystanie z QT do opracowywania aplikacji ma kilka korzyści:
- QT zapewnia kompleksowy zestaw klas bibliotek C ++, które upraszczają opracowywanie aplikacji, dzięki czemu jest szybciej i łatwiejsza do tworzenia solidnych aplikacji.
- Kod napisany za pomocą QT jest wysoce czytelny, możliwy do utrzymania i wielokrotnego użytku, zmniejszając wysiłki rozwojowe i poprawę wydajności.
- QT jest platforma krzyżowa, umożliwiając programistom pisanie aplikacji raz i wdrożenie na wielu platform.
- Framework oferuje doskonałą wydajność środowiska wykonawczego, zapewniając płynne i responsywne aplikacje.
- QT ma niewielki ślad, co oznacza, że powstałe elementy wykonywalne są kompaktowe i wydajne.
12. Co to jest framework QT?
Framework QT to kompleksowa zbiór klas bibliotek C ++, które zapewniają szeroki zakres funkcjonalności dla tworzenia aplikacji. Oferuje moduaryzowaną strukturę, umożliwiając programistom korzystanie tylko z potrzebnych komponentów. QT zapewnia narzędzia, interfejsy API i abstrakcje dla różnych aspektów tworzenia aplikacji, w tym projektowanie interfejsu użytkownika, integracja bazy danych, sieci, multimedia i wiele więcej. Został zaprojektowany w celu uproszczenia procesu rozwoju, promowania ponownego użycia kodu i włączenia tworzenia aplikacji międzyplatformowych.
13. Jaki jest wzór obserwatora?
Wzór obserwatora to wzór projektu behawioralnego, który umożliwia komunikację jeden do wielu obiektów. W wzorze obserwatora istnieją dwa główne jednostki: podmiot i obserwatorzy. Podmiot utrzymuje listę obserwatorów i powiadamia je automatycznie, gdy zmienia się jego stan. Ten wzór promuje luźne połączenie między obiektami i umożliwia wysoce interaktywny i dynamiczny system. W QT wzór obserwatora można zaimplementować za pomocą sygnałów i gniazd, w których podmiot emituje sygnały, a obserwatorzy łączą swoje szczeliny do sygnałów, aby otrzymywać aktualizacje.
14. Jakie są sygnały i szczeliny?
Sygnały i szczeliny są mechanizmem dostarczonym przez QT do komunikacji między obiektami. Sygnał jest specjalną funkcją członkowską klasy pochodzącej z QOBject, którą można emitować, aby wskazać, że wystąpiło określone zdarzenie lub warunek. Gniazdo to funkcja członka, którą można podłączyć do sygnału, aby go odbierać i obsługiwać. Sygnały i szczeliny mogą być użyte do ustalenia luźnego sprzężenia między obiektami, umożliwiając im komunikowanie się bez ścisłego sprzężenia. Sprzyja to modułowości i elastyczności w projektowaniu aplikacji QT.
15. Jak można przesyłać informacje w QT?
W QT informacje mogą być przesyłane między różnymi częściami aplikacji za pomocą sygnałów i szczelin. Sygnał może przenosić informacje, definiując parametry, a gniazdo może odbierać i przetwarzać te informacje. Po emitowaniu sygnału wszystkie połączone szczeliny zostaną wywołane z dostarczonymi informacjami. Ten mechanizm pozwala obiektom komunikować się i wymieniać dane bez bezpośredniego odniesienia się do siebie, promując luźne sprzężenie i elastyczność w projektowaniu aplikacji.
QT Framework
QT Essentials definiuje podstawę QT na wszystkich platformach. Są one dostępne na wszystkich obsługiwanych platformach programistycznych i na testowanych platformach docelowych.
Czy QT używa c++
Оjed
Ыы зарегистрир John. С помощю этой страницы ыы сожем оRipееделить, что запросы оRтравляете имено ыы, а не роvert. Почем это могло пRроизойиS?
Эта страница отображается тех слччаях, когда автоматическими системамgz которые наршают усовия исполззования. Страница перестанеura. До этого момента для исползования слжжж Google неоtoś.
Источником запросов может слжить ведоносное по, подкbarów. ыылку заRzy. Еarag ы исползеете общий доступ и интернет, проблема может ыть с компюююеyn с таким жж жж жесом, кк у комszczeюююе000. Обратитеunks к соем системном адинистратору. Подроlit.
Проверка по слову может также появаятьenia, еaсли ы водите сложные ззапры, оind обычно enia оиизи инenia оtoś еами, или же водите заlektora.
QT Framework
Framework QT zawiera kompleksowy zestaw wysoce intuicyjnych i modularyzowanych klas bibliotek C ++ i jest ładowany interfejsami API, aby uprościć tworzenie aplikacji. QT produkuje wysoce czytelny, łatwy do utrzymania i wielokrotnego użytku kod z wysokim działaniem i małym śladem-i jest to platforma międzypatrzowa.
QT Essentials
Umożliwienie prawdziwej platformy krzyżowej
QT Essentials definiuje podstawę QT na wszystkich platformach. Są one dostępne na wszystkich obsługiwanych platformach programistycznych i na testowanych platformach docelowych.
QT Core
Podstawowe nie-graficzne klasy stosowane przez inne moduły.
QT GUI
Klasy podstawowe dla graficznych komponentów interfejsu użytkownika. Obejmuje OpenGL.
QT Multimedia
Zajęcia dla funkcji audio, wideo, radia i aparatu.
Sieć QT
Zajęcia, aby ułatwić programowanie sieciowe i bardziej przenośne.
QT Szybkie
Deklaratywne ramy budowania wysoce dynamicznych aplikacji z niestandardowymi interfejsami użytkownika.
QT sql
Zajęcia integracji bazy danych za pomocą SQL.
Qt dodatki
Odpowiednie dodatki
Dla właściwego zadania
QT Essentials definiuje podstawę QT na wszystkich platformach. Są one dostępne na wszystkich obsługiwanych platformach programistycznych i na testowanych platformach docelowych.
QT OpenGL
Zajęcia wsparcia OpenGL. Przestarzałe na korzyść klas Qopengl w module GUI QT.
QT Wayland Compositor
Zapewnia ramy do opracowania kompozytora Wayland.
Czujniki QT
Zapewnia dostęp do rozpoznawania sprzętu czujnika i gestu ruchu.
QT WebView
Wyświetla treści internetowe w aplikacji QML przy użyciu interfejsów API natywnych na platformie, bez potrzeby włączenia pełnego stosu przeglądarki internetowej.
QT bezpieczny renderer
Zapewnia komponent renderowania interfejsu użytkownika, który można użyć do renderowania elementów krytycznych bezpieczeństwa, takich jak wskaźniki ostrzegawcze, w funkcjonalnych systemach bezpieczeństwa.
QT SCXML
Zapewnia zajęcia i narzędzia do tworzenia maszyn stanowych z plików SCXML i osadzania ich w aplikacjach.
QT Ramy praktyki w zakresie rozwiązywania problemów związanych z bezpieczeństwem
Grupa QT priorytetowo traktuje potencjalne zagrożenia i obawy dotyczące bezpieczeństwa w swoich produktach. Z szerokim zastosowaniem międzyplatformowym i obszernym interfejsem API ramy QT są podatne na ryzyko cybernetyczne na różnych frontach. Ponadto QT jest opracowywana jako projekt open source, wymagający analizy raportu podatności przez wyznaczonych pracowników i współpracowników zewnętrznych. Od momentu powstania grupa QT aktywnie uczestniczy w odpowiednich grupach sterujących i podejmuje szybkie działania w sprawie raportów podatności. Raporty podatności podlegają konkretnym procedurom określonym w polityce bezpieczeństwa projektu QT.
QT dla początkujących
Ostrzeżenie : Pamiętaj, aby przed rozpoczęciem znajomości C ++!
Uwaga : Ten cel serii samouczka głównie QT4. Nawet jeśli większość z tych samouczków jest również ważna dla QT5, przypadek QT5 jest omawiany w osobnej części.
Zawartość
- 1 przypomnienie C ++
- 2 Wprowadzenie do QT
- 3 Instalowanie QT SDK
- 4 funkcje twórcy QT
- 5 Nasze pierwsze okno
- 6 Jak kompilowany jest program QT
- 7 Piękny przycisk
- 8 hierarchii klasy QT
- 9 System rodzicielski
- 10 Podklasowanie QWidget
- 11 Dalsze czytanie
- 12 Wzór obserwatora
- 13 sygnałów i szczelin
- 14 Przekazywanie informacji
- 15 funkcji sygnałów i szczelin
- 16 przykładów
- 16.1 odpowiadając na wydarzenie
- 21.1 Tworzenie niestandardowych szczelin
- 21.2 Tworzenie sygnałów
- 21.3 Przykład
Przypomnienie C ++
podpis metody lub funkcji jest po prostu jej prototypem. Całkowicie opisuje metodę lub funkcję. Zawiera zwrócony typ, nazwę metody/funkcji (w tym nazwa klasy) i parametry, w tym typy.
Typ MyObject::MyFunkcja( Typ 1 param1, Type2 *param2, const Type3 Iparam3 );
Nowy w Qt? Nie wiem, jak zacząć? Wtedy ta strona wiki jest dla Ciebie! Jest to samouczek krok po kroku, który przedstawia wszystkie specyficzności i cechy QT. Chcę się dowiedzieć więcej? Sprawdź nasze klasy GUI C ++ dla klas GUI QT 5 i C ++ dla QT 6.
Wprowadzenie do Qt
QT (wymawiane jako „słodkie”, a nie „cu-tee”) to framework krzyżowy, który jest zwykle używany jako graficzny zestaw narzędzi, chociaż jest również bardzo pomocny w tworzeniu aplikacji CLI. Działa na trzech głównych systemach stacjonarnych, a także na mobilnych systemach operacyjnych, takich jak Symbian, Nokia Belle, Meego Harmattan, Meego lub BB10 oraz na wbudowanych urządzeniach. Porty na Androida (konieczne) i iOS są również w rozwoju.
QT ma imponującą kolekcję modułów, w tym
- QTCORE, Biblioteka podstawowa, która zapewnia kontenery, zarządzanie wątkami, zarządzanie wydarzeniami i wiele więcej
- Qtgui I QtWidgets, zestaw narzędzi GUI dla komputera, który zapewnia wiele komponentów graficznych do projektowania aplikacji.
- QTnetwork, To zapewnia użyteczny zestaw klas do radzenia sobie z komunikacją sieciową
- Qtwebkit, silnik WebKit, który umożliwia korzystanie z stron internetowych i aplikacji internetowych w aplikacji QT.
- QTSQL, Pełna opróżniona warstwa abstrakcji SQL RDBM rozszerzalna jest z własnymi sterownikami, obsługa ODBC, SQLite, MySQL i PostgreSQL jest dostępna w polu po pudełku
- Qtxml, Obsługa prostego parsingu XML (SAX) i DOM
- Qtxmlpatterns, Wsparcie dla XSLT, XPath, XQuery i Scheme Walidacja
Instalowanie QT SDK
Aby rozpocząć pisanie aplikacji QT, musisz uzyskać biblioteki QT, a jeśli chcesz, IDE. Można je zbudować ze źródła lub lepiej, być pobierane jako SDK ze strony pobierania.
Ten SDK zawiera wiele funkcji, takich jak kompilatory krzyżowe dla Symbian i Nokia N9. Możesz nie instalować ich, wybierając „Instalację niestandardową”. Pamiętaj, aby zachować te pakiety
- Dokumentacja QMake
- Dokumentacja QT
- QT 4.8.1 (komputer stacjonarny), Zakładając, że Qt 4.8.1 to najnowsza wersja.
- Qt twórca
Te pakiety mogą być również przydatne
- Przykłady QT
- Linguista QT
Możesz wybrać inne pakiety, jeśli chcesz opracować dla Symbian / Maemo / Meego lub ze starszą wersją QT.
NB : W systemie Linux lepiej jest używać pakietów, które zapewnia Twoja dystrybucja. QT Creator powinien być dostępny w prawie wszystkich dystrybucjach, a instalowanie go powinno zainstalować wszystkie zależności, takie jak biblioteki, kompilatory i nagłówki rozwojowe.
Notatka: Zobacz stronę oficjalną na starcie z QT Widżetów, aby uzyskać alternatywny samouczek.
Jesteśmy teraz gotowi utworzyć nasze pierwsze okno. I będzie to jak zwykle, a Witaj świecie.
Funkcje QT Creator
Przed napisaniem naszej pierwszej aplikacji GUI, odkryjmy QT Creator.
QT Creator to kolejna IDE dla C ++, ale jest bardzo odpowiedni do kodowania aplikacji QT. Zapewnia przeglądarkę DOC i „projektant”, co ułatwia tworzenie systemu Windows, wszystkie zapakowane w dobrze zaprojektowany interfejs użytkownika. To także jeden z najszybszych dostępnych IDE.
Nasze pierwsze okno
Zacznijmy od stworzenia naszego pierwszego projektu. Będzie to pusty projekt, więc musimy kontynuować: plik> nowy plik lub projekt> inne projekty> pusty projekt QT
Śledź kreatora, a po wybraniu folderu i nazwy projektu i wybierz wersję QT do użycia, powinieneś wylądować na tej stronie
To jest plik projektu (rozszerzenie .zawodowiec). QT używa narzędzia wiersza poleceń, które analizuje te pliki projektu w celu generowania „makefiles”, plików używanych przez kompilatorów do tworzenia aplikacji. To narzędzie się nazywa QMake. Ale nie powinniśmy zbytnio zawracać sobie głowy QMake, ponieważ QT Creator wykonuje dla nas zadanie.
W pliku projektu istnieje jakiś minimalny kod, który zawsze powinien być napisany:
Szablon = App Target = name_of_the_app qt = Core GUI GreaterThan (qt_major_version, 4): qt += widgets
- SZABLON opisuje typ do budowy. Może to być aplikacja, biblioteka lub po prostu subkredyty.
- CEL to nazwa aplikacji lub biblioteki.
- Qt służy do wskazania, jakie biblioteki (moduły QT) są używane w tym projekcie. Ponieważ nasza pierwsza aplikacja to mały GUI, będziemy potrzebować QTCore i Qtgui.
Dodajmy teraz punkt wejścia naszej aplikacji. Korzystanie z pliku> nowy plik lub projekt> C ++> plik źródłowy C ++ powinien wykonać zadanie.
Postępuj zgodnie z czarodziejem jeszcze raz, nazywając plik „głównym”, a skończyłeś. Zauważysz, że w pliku projektu nowa linia została automatycznie dodana przez QT Creator:
Szablon = App Target = name_of_the_app qt = Core GUI GreaterThan (qt_major_version, 4): Qt += Widgets Źródła += Main.CPP
Pliki nagłówka i źródeł można dodawać ręcznie
Nagłówki += First_file.H Second_file.H Źródła += First_file.CPP Second_file.CPP
Nagłówki += First_file.H Second_file.H Źródła += First_file.CPP Second_file.CPP
Jeśli używasz czarodziejów QT Creator, odbywa się to automatycznie.
Minimalny kod źródłowy aplikacji QT to
#włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); powrót App.Exec(); >
Qapplication to bardzo ważna klasa. Dba o argumenty wejściowe, ale także wiele innych rzeczy, a zwłaszcza pętla zdarzeń. Pętla zdarzeń to pętla, która czeka na dane wejściowe użytkownika w aplikacjach GUI.
Podczas dzwonienia aplikacji.exec () Pętla zdarzeń jest uruchamiana.
Skompilujmy tę aplikację. Klikając zieloną strzałkę po lewym dolnym rogu, QT Creator skompiluje i wykonuje. I co się stało? Wydaje się, że aplikacja została uruchomiona i nie odpowiadająca. To jest właściwie normalne. Pętla zdarzeń działa i czeka na wydarzenia, takie jak kliknięcia myszy na GUI, ale nie zapewniliśmy żadnego wydarzenia do przetworzenia, więc będzie działać na czas nieokreślony.
Dodajmy coś do wyświetlenia.
#włączać #włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); Qpushbutton przycisk ("Witaj świecie !"); przycisk.pokazywać(); powrót App.Exec(); >
Skompiluj go i… oto jest ! Nasze pierwsze okno !
Jak kompilowany jest program QT
QT Creator wykonuje dla nas zadawanie systemu kompilacji, ale może być interesujące wiedzieć, w jaki sposób kompilowane są programy QT.
W przypadku małych programów łatwo jest skompilować wszystko ręcznie, tworzenie plików obiektowych, a następnie łączenie ich. Ale w przypadku większych projektów wiersz poleceń z łatwością staje się trudny do napisania. Jeśli znasz Linuksa, możesz wiedzieć, że wszystkie programy są kompilowane za pomocą Makefile, który opisuje wszystkie te wiersze poleceń do wykonania. Ale w przypadku niektórych projektów nawet pisanie makijażu może stać się nudne.
QMake to system kompilacji, który jest dostarczany z QT i generuje dla ciebie teFile (istnieją inne systemy kompilacji, które można użyć, ale tutaj podajemy przykład z QMake). Z prostą składnią wytwarza makefile używane do kompilacji programu QT. Ale to nie jest jedyny cel. QT używa meta-obiektów do rozszerzenia funkcji C ++, a QMake jest odpowiedzialny za przygotowanie makue, który zawiera tę fazę ekstrakcji meta-obiekt. Zobaczysz to w innym rozdziale.
Tak więc aplikacje QT są kompilowane w 3 krokach
- A .zawodowiec Plik jest napisany w celu opisania projektu do skompilowania
- Makefile jest generowane za pomocą QMake
- Program jest budowany za pomocą robić (Lub nmake Lub Jom w systemie Windows)
Ładny przycisk
Ten rozdział zawiera przegląd modułów widżetów. Będzie obejmować właściwości widżetów, schemat dziedziczenia, który jest używany w widżetach, a także w systemie rodzicielskim.
Teraz, gdy mamy przycisk, możemy chcieć go trochę dostosować.
Obiekty QT mają wiele atrybutów, które można modyfikować za pomocą zdobywców i setterów. W QT, jeśli wywoływany jest atrybut bla, powiązane getter i setter będą miały te podpisy
T bla() const; próżnia Setfoo(const T);
W rzeczywistości QT rozszerza ten system atrybutów, zdobywców i setterów na coś, co nazywa się nieruchomość. Właściwość jest wartością dowolnego typu, do którego można uzyskać dostęp, modyfikować lub stać i może powiadomić zmianę. System nieruchomości jest przydatny, szczególnie w części trzeciej (QML). Na razie użyjemy „atrybutu” lub „właściwości”, aby zrobić to samo.
Qpushbutton ma mnóstwo nieruchomości:
Więc możemy ich użyć do dostosowania przycisku.
Najpierw zmieńmy tekst i dodajmy podpowiedź
#włączać #włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); Qpushbutton przycisk; przycisk.Ustaw tekst(„Mój tekst”); przycisk.settooltip(„Podpisanie”); przycisk.pokazywać(); powrót App.Exec(); >
Oto wynik:
Możemy również zmienić czcionkę. W QT czcionka jest reprezentowana w klasie QFONT. Dokumentacja zawiera wiele informacji. Jesteśmy szczególnie zaniepokojeni jednym z konstruktorów QFONT.
Qfont(const QString I rodzina, int Punkty = - -1, int waga = -1, Bool italski = FAŁSZ)
Aby zmienić czcionkę, musimy ulepszyć klasę QFONT i przekazać ją do QPUSHBUTTON za pomocą SetFont . Poniższy fragment zmieni czcionkę na kurier.
Qfont czcionka ("Kurier"); przycisk.setfont(czcionka);
Możesz wypróbować inne parametry konstruktora QFONT, aby odtworzyć przycisk przedstawiony na pierwszym zdjęciu w tym rozdziale.
Ustawienie ikony też nie jest bardzo trudne. Ikona jest reprezentowana w klasie Qicon. I możesz utworzyć ikonę pod warunkiem, że ma ona bezwzględną (lub względną) ścieżkę w systemie plików. Polecam dostarczenie bezwzględnej ścieżki w tym przykładzie. Ale w przypadku rozważań wdrożenia możesz użyć ścieżki względnej lub lepszej, systemu zasobów.
Qicon Ikona ("/ścieżka/do/my/icon/icon.PNG "); przycisk.Seticon(Ikona);
W Linux i niektórych innych systemach operacyjnych istnieje wygodny sposób na ustawienie ikony z motywu ikony. Można to zrobić za pomocą metody statycznej:
Qicon Qicon::FromTheme ( const QString Inazwa, const Qicon Iawaria = Qicon());
Na przykład na zrzucie ekranu na początku tego rozdziału Smiley pochodzi z motywu ikony ikon tlengen i został ustalony przez:
przycisk.Seticon(Qicon::FromTheme(„Smile twarzy”));
Hierarchia klasy QT
QT szeroko używa dziedziczenia, szczególnie w module widżetów. Poniższy wykres pokazuje niektóre z tych spadków:
QOBject to najbardziej podstawowa klasa w QT. Większość klas w QT dziedziczy po tej klasie. QOBject zapewnia bardzo potężne możliwości, takie jak:
- Nazwa obiektu : Możesz ustawić nazwę, jako ciąg, na obiekcie i wyszukać obiekty według nazwisk.
- System rodzicielski (opisane w poniższej sekcji)
- sygnały i szczeliny (opisane w następnym rozdziale)
- zarządzanie zdarzeniami
Widżety są w stanie reagować na zdarzenia i korzystać z systemu rodzicielskiego oraz mechanizm sygnałów i szczelin. Wszystkie widżety dziedziczą po Qobject. Najbardziej podstawowym widżetem jest QWidget . QWidget zawiera większość właściwości używanych do opisania okna lub widżetu, takiego jak pozycja i rozmiar, kursor myszy, podpowiedzi itp.
Uwaga : W QT widżet może być również oknem. W poprzedniej sekcji wyświetliśmy przycisk, który jest widżetem, ale pojawia się bezpośrednio jako okno. Nie ma potrzeby klasy „QWindow”.
Prawie wszystkie elementy graficzne dziedziczą po Qwidget. Możemy wymienić na przykład:
QabstractButton, klasa podstawowa dla wszystkich typów przycisków QPUSHBUTTON QCheckbox Qradiobutton Qframe, który wyświetla ramkę Qlabel, która wyświetla tekst lub obraz
To dziedziczenie odbywa się w celu ułatwienia zarządzania nieruchomościami. Wspólne właściwości, takie jak rozmiar i kursory, mogą być używane na innych komponentach graficznych, a QabstractButton zapewnia podstawowe właściwości, które są współdzielone przez wszystkie przyciski.
System rodzicielski
System rodzicielski to wygodny sposób radzenia sobie z obiektami w QT, zwłaszcza widżetów. Każdy obiekt dziedziczny po Qobject może mieć rodzica i dzieci. To drzewo hierarchii sprawia, że wiele rzeczy jest wygodne:
- Po zniszczeniu obiektu wszystkie jego dzieci również są zniszczone. Więc dzwoniąc usuwać w niektórych przypadkach staje się opcjonalny.
- Wszystkie qobjects mają Findchild I FindHildrens Metody, które można wykorzystać do wyszukiwania dzieci z danego obiektu.
- Widżety dziecięce w QWidget automatycznie pojawiają się w widżecie nadrzędnym.
Poniższy fragment, który tworzy QPUSHBUTTON w QPUSHBUTTON:
#włączać #włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); Qpushbutton przycisk 1 ("test"); Qpushbutton Button2 ("Inny", Iprzycisk 1); przycisk 1.pokazywać(); powrót App.Exec(); >
Możesz również zauważyć, że po zamknięciu aplikacji, przycisk 1, który jest przydzielony na stosie, jest rozdawane. Ponieważ Button2 ma Button1 jako rodzic, jest również usuwany. Możesz nawet przetestować to w QT Creator w sekcji Analiza, szukając wycieku pamięci – nie będzie żadnych.
Nie ma wyraźnie żadnej korzyści w umieszczeniu przycisku do przycisku, ale na podstawie tego pomysłu możemy chcieć umieścić przyciski wewnątrz pojemnika, które nic nie wyświetla. Ten pojemnik to po prostu QWidget .
Do wyświetlania przycisku wewnątrz widżetu jest używany następujący kod:
#włączać #włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); QWidget okno; okno.setfixedSize(100, 50); Qpushbutton *przycisk = nowy Qpushbutton("Witaj świecie", Iokno); przycisk->setgeometria(10, 10, 80, 30); okno.pokazywać(); powrót App.Exec(); >
Zauważ, że tworzymy widżet o stałym rozmiarze (który działa jak okno) za pomocą setfixedSize. Ta metoda ma następujący podpis:
próżnia QWidget::setfixedSize(int szerokość, int wysokość);
Ustawiliśmy również przycisk za pomocą setgeometria. Ta metoda ma następujący podpis:
próżnia QWidget::setgeometria(int X, int y, int szerokość, int wysokość);
Podklasowanie QWidget
Do tej pory umieściliśmy cały nasz kod w główny funkcjonować. Nie był to problem dla naszych prostych przykładów, ale w przypadku coraz bardziej złożonych aplikacji możemy chcieć podzielić nasz kod na różne klasy. Często robiono to, aby utworzyć klasę używaną do wyświetlania okna, i zaimplementowanie wszystkich widżetów zawartych w tym oknie jako atrybuty tej klasy.
Wewnątrz QT Creator możesz automatycznie utworzyć nową klasę z plik> nowy plik lub projekt> C ++> C ++ klasa
Zrób klasę odziedziczoną po Qwidget i powinieneś uzyskać kod podobny do poniżej
#ifndef Window_H #określić okno_h #włączać klasa Okno : publiczny QWidget Q_Object publiczny: wyraźny Okno(QWidget *rodzic = 0); sygnały: publiczny szczeliny: >; #endif // Window_h
#włączać "okno.H" Okno::Okno(QWidget *rodzic) : QWidget(rodzic) <>
Możesz zobaczyć, że QT Creator automatycznie generuje szablon klasy. Zauważ, że w nagłówku są kilka nowych elementów:
- Q_Object makro.
- Nowa kategoria metod: sygnały
- Nowa kategoria metod: Publiczne szczeliny
Wszystkie te elementy zostaną wyjaśnione w następnym rozdziale i żaden z nich nie jest teraz potrzebny. Wdrożenie okna odbywa się w konstruktorze. Możemy zadeklarować rozmiar okna, a także widżety, które zawiera to okno i ich pozycje. Na przykład implementacja poprzedniego okna zawierającego przycisk można wykonać w ten sposób:
#włączać #włączać "okno.H" int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); Okno okno; okno.pokazywać(); powrót App.Exec(); >
#ifndef Window_H #określić okno_h #włączać klasa Qpushbutton; klasa Okno : publiczny QWidget publiczny: wyraźny Okno(QWidget *rodzic = 0); prywatny: Qpushbutton *M_Button; >; #endif // Window_h
#włączać "okno.H" #włączać Okno::Okno(QWidget *rodzic) : QWidget(rodzic) // Ustaw rozmiar okna setfixedSize(100, 50); // Utwórz i ustaw przycisk M_Button = nowy Qpushbutton("Witaj świecie", Ten); M_Button->setgeometria(10, 10, 80, 30); >
Należy pamiętać, że nie ma potrzeby napisania destruktora do usunięcia M_Button . W przypadku systemu rodzicielskiego, gdy instancja okna jest poza stosem, M_Button jest automatycznie usuwany.
Dalsze czytanie
Na tej stronie wiki podano lepszy przegląd QPUSHBUTTON
Wzór obserwatora
Prawie wszystkie zestaw narzędzi interfejsu użytkownika mają mechanizm wykrywania działania użytkownika i reagowania na tę akcję. Niektóre z nich używają oddzwonienia, inni używają słuchacze, Ale w zasadzie wszystkie są inspirowane wzorem obserwatora.
Wzór obserwatora jest używany, gdy zauważalny Obiekt chce powiadomić inne obserwator obiekty dotyczące zmiany stanu. Oto kilka konkretnych przykładów:
- Użytkownik kliknął przycisk i należy wyświetlić menu.
- Strona internetowa właśnie zakończyła ładowanie, a proces powinien wyodrębnić informacje z tej załadowanej strony.
- Użytkownik przewija listę elementów (na przykład w sklepie z aplikacjami) i osiągnął koniec, więc należy załadować więcej elementów.
Wzór obserwatora jest używany wszędzie w aplikacjach GUI i często prowadzi do kodu płyty kotłowej. QT został stworzony z pomysłem usunięcia tego kodu z kotły i zapewnienia ładnej czystej składni. Mechanizm sygnału i szczeliny umożliwia to.
Sygnały i szczeliny
Zamiast mieć obserwowalne obiekty i obserwatorów i zarejestrować je, QT zapewnia dwa koncepcje wysokiego poziomu: sygnały I szczeliny.
- A sygnał to wiadomość, którą obiekt może wysłać, zwykle w celu zgłoszenia zmiany statusu.
- A otwór jest funkcją, która akceptuje i reaguje na sygnał.
Oto kilka przykładów sygnałów i szczelin z naszej dobrze znanej klasy QPUSHBUTTON.
Jak widać, ich nazwiska są dość wyraźne. Sygnały te są wysyłane, gdy użytkownik kliknie (naciśnie, a następnie zwolni), naciska lub zwolni przycisk.
Oto kilka miejsc, z różnych klas.
- Qapplication :: Resit
- QWidget :: Setenabled
- QPUSHBUTTON :: setText
Aby odpowiedzieć na sygnał, musi być miejsce połączony do sygnału. QT zapewnia metodę qobject ::łączyć. Jest używany w ten sposób, z dwoma makrami SYGNAŁ I OTWÓR .
FooObjecta *Fooa = nowy FooObjecta(); FooObjectB *Foob = nowy FooObjectB(); Qobject::łączyć(Fooa, SYGNAŁ (obnażone()), Foob, OTWÓR (Baz()));
Ten przykład zakłada, że FooObjecta ma sygnał obnażony, a FooObjectB ma gniazdo Baza.
Musisz napisać podpis sygnału i gniazda wewnątrz dwóch makr SYGNAŁ I OTWÓR. Jeśli chcesz uzyskać więcej informacji o tym, co robią te makra, przeczytaj ostatnią sekcję tego rozdziału.
Uwaga : Zasadniczo sygnały i szczeliny są metodami, które mogą lub nie mieć argumentów, ale nigdy niczego nie zwracają. Podczas gdy pojęcie sygnału jako metody jest niezwykłe, szczelinę jest w rzeczywistości prawdziwą metodą i może być wywoływana jak zwykle innymi metodami lub podczas reagowania na sygnał.
Przekazywanie informacji
Mechanizm sygnałów i gniazd jest przydatny do reagowania na kliknięcia przycisków, ale może zrobić znacznie więcej niż to. Na przykład można go również wykorzystać do komunikacji informacji. Powiedzmy, że podczas odtwarzania piosenki potrzebny jest pasek postępu, aby pokazać, ile czasu pozostaje przed końcem piosenki. Odtwarzacz multimediów może mieć klasę używaną do sprawdzenia postępu mediów. Wystąpienie tej klasy może okresowo wysyłać kleszcz sygnał z wartością postępu. Ten sygnał może być podłączony do QProgressbar, którego można użyć do wyświetlania postępu.
Hipotetyczna klasa używana do sprawdzenia postępu może mieć sygnał, który ma ten podpis:
próżnia MediaProgressManager::kleszcz(int Miliseconds);
I z dokumentacji wiemy, że QProgressbar ma ten szczelinę:
próżnia QProgressbar::ustalić wartość(int wartość);
Widać, że sygnał i gniazdo mają ten sam rodzaj parametrów, zwłaszcza typ. Jeśli podłączysz sygnał do gniazda, który nie ma tego samego rodzaju parametrów, po zakończeniu połączenia (w czasie wykonywania) otrzymasz ostrzeżenie takie jak:
Qobject::łączyć: Niekompatybilny nadawca/odbiorca argumenty
Wynika to z faktu, że sygnał przesyła informacje do gniazda za pomocą parametrów. Pierwszy parametr sygnału jest przekazywany do pierwszego z szczelin, i to samo dla drugiego, trzeciego i tak dalej.
Kod połączenia będzie wyglądał tak:
MediaProgressManager *menedżer = nowy MediaProgressManager(); QProgressbar *postęp = nowy QProgressbar(okno); Qobject::łączyć(menedżer, SYGNAŁ (kleszcz(int)), postęp, OTWÓR (ustalić wartość(int)));
Możesz zobaczyć, że musisz podać podpis w środku SYGNAŁ I OTWÓR makro, dostarczając typ wartości przekazywanych przez sygnały. Jeśli chcesz, możesz również podać nazwę zmiennej. (W rzeczywistości jest jeszcze lepiej).
Cechy sygnałów i gniazd
- Sygnał może być podłączony do kilku szczelin
- Wiele sygnałów można podłączyć do gniazda
- Sygnał może być podłączony do sygnału: jest to przekazywanie sygnału. Drugi sygnał jest wysyłany, jeśli zostanie wysłany pierwszy sygnał.
Przykłady
Odpowiadanie na wydarzenie
Pamiętaj o naszej aplikacji Button? Spróbujmy coś zrobić z tą aplikacją, na przykład możliwość jej zamykania, klikając przycisk. Wiemy już, że Qpushbutton zapewnia kliknięte sygnał. Musimy również wiedzieć, że Qapplication zapewnia zrezygnować gniazdo, które zamyka aplikację.
Aby kliknąć przycisk Zamknij aplikację, musimy podłączyć sygnał kliknięte emitowany przez przycisk do zrezygnować gniazdo tej instancji Qapplication. Możemy zmodyfikować kod z poprzedniej sekcji, aby to zrobić, ale zanim to zrobimy, możesz zastanawiać się, jak uzyskać dostęp do instancji Qapplication, gdy jesteś w innej klasie. W rzeczywistości jest to dość proste, ponieważ istnieje funkcja statyczna w Qapplication, z następującym podpisem, który służy do jej uzyskania:
Qapplication * Qapplication::instancja()
Prowadzi to do następującej modyfikacji naszego poprzedniego kodu:
#włączać "okno.H" #włączać #włączać Okno::Okno(QWidget *rodzic) : QWidget(rodzic) // Ustaw rozmiar okna setfixedSize(100, 50); // Utwórz i ustaw przycisk M_Button = nowy Qpushbutton("Witaj świecie", Ten); M_Button->setgeometria(10, 10, 80, 30); // NOWOŚĆ: nawiązuj połączenie łączyć(M_Button, SYGNAŁ (kliknięte()), Qapplication::instancja(), OTWÓR (zrezygnować ())); >
Po kliknięciu przycisku wewnątrz okna aplikacja zrezygnuje.
Przekazywanie informacji za pomocą sygnałów i szczelin
Oto prostszy przykład transmisji informacji. Wyświetla tylko pasek postępu i suwak (utworzony przez QSlider) w oknie, a podczas przenoszenia suwaka wartość paska postępu jest synchronizowana z bardzo prostym połączeniem.
Ciekawe sygnały i szczeliny to:
próżnia QSLIDER::ValueChed(int wartość); próżnia QProgressbar::ustalić wartość(int wartość);
QSLIDER automatycznie emituje sygnał o wartości nowej wartości przekazanej jako parametr, gdy wartość jest zmieniana, a metoda SetValue of QProgressbar jest używana, jak widzieliśmy, aby ustawić wartość paska postępu.
Prowadzi to do następującego kodu:
#włączać #włączać #włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); // Utwórz okno pojemnika QWidget okno; okno.setfixedSize(200, 80); // Utwórz pasek postępu // z zakresem od 0 do 100 i wartością początkową 0 QProgressbar *pasek postępu = nowy QProgressbar(Iokno); pasek postępu->SETRANME(0, 100); pasek postępu->ustalić wartość(0); pasek postępu->setgeometria(10, 10, 180, 30); // Utwórz poziomy suwak // z zakresem od 0 do 100 i wartością początkową 0 QSLIDER *suwak = nowy QSLIDER(Iokno); suwak->Setorientacja(Qt::Poziomy); suwak->SETRANME(0, 100); suwak->ustalić wartość(0); suwak->setgeometria(10, 40, 180, 30); okno.pokazywać(); // Połączenie // to połączenie ustawia wartość paska postępu // podczas zmienia się wartość suwaka Qobject::łączyć(suwak, SYGNAŁ (ValueChed(int)), pasek postępu, OTWÓR (ustalić wartość(int))); powrót App.Exec(); >
Aspekt techniczny
Tę sekcję można na razie pominąć, jeśli chcesz tylko zaprogramować z QT. Po prostu wiedz, że musisz umieścić SYGNAŁ I OTWÓR wokół sygnałów i gniazd podczas dzwonienia . Jeśli chcesz wiedzieć, jak działa QT, lepiej to przeczytać.
Obiekt meta
QT zapewnia meta-obiekt system. Meta-obiekt (dosłownie „nad obiektem”) jest sposobem na osiągnięcie niektórych paradygmatów programowania, które zwykle są niemożliwe do osiągnięcia za pomocą czystego C ++, takiego jak:
- Introspekcja : Możliwość zbadania typu w czasie wykonywania
- Wywołania funkcji asynchronicznych
Aby użyć takich możliwości meta-obiektów w aplikacji, można ją podklasować i oznaczyć, aby kompilator meta-obiekt (MOC) mógł to interpretować i przetłumaczyć.
Kod wytwarzany przez MOC obejmuje sygnały i sygnatury gniazda, metody używane do pobierania metainformacji z tych zaznaczonych klas, obsługi właściwości. Do wszystkich tych informacji można uzyskać za pomocą następującej metody:
const QMetaObject * Qobject::Metaobject () const
Klasa QMetaObject zawiera wszystkie metody dotyczące meta-obiektów.
Ważne makra
Najważniejsze makro to Q_Object. Połączenia z rozładowaniem sygnałów i ich składni nie mogą być interpretowane przez zwykły kompilator C ++. MOC jest dostarczany w celu przetłumaczenia składni QT, takimi jak „Connect”, „Signals”, „Glots” itp. Odbywa się to poprzez określenie Q_Object makro w nagłówku zawierającej definicje klas, które wykorzystują taką składnię.
klasa MyWidget : publiczny QWidget Q_Object publiczny: MyWidget(QWidget *rodzic = 0); >
Inne makra znaczników dla MOC to
- sygnały
- publiczne / chronione / prywatne szczeliny
które oznaczają różne metody, które należy przedłużyć.
SYGNAŁ I OTWÓR są również dwoma bardzo ważnymi i przydatnymi makrami. Gdy emitowany jest sygnał, system meta-obiekt jest używany do porównania podpisu sygnału, do sprawdzenia połączenia i znalezienia szczeliny za pomocą jego podpisu. Te makra są faktycznie używane do konwersji podanej metody w ciąg, który pasuje do tego, który zapisuje się w meta-obiekt.
Tworzenie niestandardowych sygnałów i gniazd
W tym rozdziale obejmuje drugą część sygnałów i gniazd: wdrażanie niestandardowych sygnałów i gniazd.
Tworzenie niestandardowych szczelin i sygnałów jest naprawdę proste. Gniazda są jak normalne metody, ale z małymi dekoracjami w pobliżu, podczas gdy sygnały nie wymagają w ogóle wdrożenia.
Tworzenie niestandardowych sygnałów i gniazd jest bardzo proste. Jest to opisane przez następującą listę kontrolną:
- dodać Q_Object makro
- dodać sygnały sekcja i prototypy sygnałów zapisu
- dodać Publiczne szczeliny Lub chronione szczeliny Lub prywatne automaty sekcje i pisz prototypy gniazda
- Wdrażaj szczeliny jako normalne metody
- ustanowić połączenia
Tworzenie niestandardowych szczelin
Aby wdrożyć miejsce, najpierw musimy sprawić, by klasa mogła wysyłać sygnały i mieć szczeliny (patrz poprzedni rozdział). Odbywa się to poprzez ustawienie Q_Object makro w deklaracji klasowej (często w nagłówku).
Następnie w odpowiednim rozdziale należy zadeklarować gniazdo i zaimplementować metodę normalną.
Wreszcie, szczeliny są podłączone do sygnałów.
Tworzenie sygnałów
Jeśli chodzi o miejsca, najpierw musimy dodać Q_Object makro.
Sygnały powinny być również zadeklarowane w sygnały sekcja i nie ma potrzeby wdrożenia.
Są emitowane za pomocą emitować Słowo kluczowe:
emitować Mysignal();
Zauważ, że aby wysłać sygnały, które mają parametry, musisz je przekazać w emisji sygnału:
emitować Mysignal(Pierwszy parametr, Drugi parametr …);
Przykład
Tworzenie niestandardowych szczelin
Zacznijmy od naszego okna z przyciskiem:
#ifndef Window_H #określić okno_h #włączać klasa Qpushbutton; klasa Okno : publiczny QWidget publiczny: wyraźny Okno(QWidget *rodzic = 0); prywatny: Qpushbutton *M_Button; >; #endif // Window_h
#włączać "okno.H" #włączać Okno::Okno(QWidget *rodzic) : QWidget(rodzic) // Ustaw rozmiar okna setfixedSize(100, 50); // Utwórz i ustaw przycisk M_Button = nowy Qpushbutton("Witaj świecie", Ten); M_Button->setgeometria(10, 10, 80, 30); >
Możemy usunąć nasze poprzednie połączenie, które sprawia, że aplikacja rzuci się podczas klikania przycisku. Teraz chcemy, aby po kliknięciu przycisku tekst został zmieniony. Mówiąc dokładniej, chcemy, aby przycisk może być sprawdzony, i że po sprawdzeniu wyświetla „sprawdzone”, a po niekwestionowaniu przywraca „Hello World”.
QPUSHBUTTON nie wdraża takiego konkretnego miejsca, więc musimy go wdrożyć samodzielnie. Jak wspomniano wcześniej, musimy dodać Q_Object makro.
klasa Okno : publiczny QWidget Q_Object publiczny: wyraźny Okno(QWidget *rodzic = 0); prywatny: Qpushbutton *M_Button; >;
Dodajemy również nasze niestandardowe miejsce. Ponieważ staramy się zareagować z sprawdzanego przycisku, a ponieważ odpowiedni sygnał jest
próżnia Qpushbutton::kliknięte(Bool sprawdzony)
Możemy zaimplementować szczelinę, która ma ten podpis:
próżnia Okno::Slotbuttonclicked(Bool sprawdzony);
Przez większość czasu według konwencji wdrażamy prywatne i chronione szczeliny, poprzedzając je „automatem”. Tutaj nie jesteśmy zainteresowani ujawnieniem tego miejsca jako funkcji publicznej, możemy uczynić go prywatnym. Nowy nagłówek jest wtedy
#ifndef Window_H #określić okno_h #włączać klasa Qpushbutton; klasa Okno : publiczny QWidget Q_Object publiczny: wyraźny Okno(QWidget *rodzic = 0); prywatny szczeliny: próżnia Slotbuttonclicked(Bool sprawdzony); prywatny: Qpushbutton *M_Button; >; #endif // Window_h
Wdrożenie tego szczelin jest
próżnia Okno::Slotbuttonclicked(Bool sprawdzony) Jeśli (sprawdzony) M_Button->Ustaw tekst("Sprawdzony"); > w przeciwnym razie M_Button->Ustaw tekst("Witaj świecie"); > >
Musimy sprawdzić przycisk i ustalić połączenie, musimy dodać ten kod w konstruktorze:
M_Button->setCheckable(PRAWDA); łączyć(M_Button, SYGNAŁ (kliknięte(Bool)), Ten, OTWÓR (Slotbuttonclicked(Bool)));
Powstały kod jest zatem:
#włączać "okno.H" #włączać Okno::Okno(QWidget *rodzic) : QWidget(rodzic) // Ustaw rozmiar okna setfixedSize(100, 50); // Utwórz i ustaw przycisk M_Button = nowy Qpushbutton("Witaj świecie", Ten); M_Button->setgeometria(10, 10, 80, 30); M_Button->setCheckable(PRAWDA); łączyć(M_Button, SYGNAŁ (kliknięte(Bool)), Ten, OTWÓR (Slotbuttonclicked(Bool))); > próżnia Okno::Slotbuttonclicked(Bool sprawdzony) Jeśli (sprawdzony) M_Button->Ustaw tekst("Sprawdzony"); > w przeciwnym razie M_Button->Ustaw tekst("Witaj świecie"); > >
Emitowanie niestandardowych sygnałów
Na podstawie poprzedniego przykładu chcemy zamknąć aplikację, jeśli przycisk zostanie kliknięty (sprawdzony lub niezaznaczony) 10 razy. Najpierw musimy zaimplementować licznik, który policzy liczbę kliknięć. Te modyfikacje to wdrażają:
klasa Okno : publiczny QWidget Q_Object publiczny: wyraźny Okno(QWidget *rodzic = 0); prywatny szczeliny: próżnia Slotbuttonclicked(Bool sprawdzony); prywatny: int m_counter; Qpushbutton *M_Button; >;
Okno::Okno(QWidget *rodzic) : QWidget(rodzic) // Ustaw rozmiar okna setfixedSize(100, 50); // Utwórz i ustaw przycisk M_Button = nowy Qpushbutton("Witaj świecie", Ten); M_Button->setgeometria(10, 10, 80, 30); M_Button->setCheckable(PRAWDA); m_counter = 0; łączyć(M_Button, SYGNAŁ (kliknięte(Bool)), Ten, OTWÓR (Slotbuttonclicked(Bool))); > próżnia Okno::Slotbuttonclicked(Bool sprawdzony) Jeśli (sprawdzony) M_Button->Ustaw tekst("Sprawdzony"); > w przeciwnym razie M_Button->Ustaw tekst("Witaj świecie"); > m_counter ++; >
Teraz musimy utworzyć niestandardowy sygnał używany do powiadomienia innych komponentów, że licznik osiągnął 10. Aby zadeklarować sygnał, musimy dodać
sygnały
Sekcja w nagłówku. Możemy również zadeklarować sygnał z następującym podpisem:
próżnia Okno::przeciwdziałany()
Klasa nagłówka jest następnie zadeklarowana zgodnie z następstwem:
klasa Okno : publiczny QWidget Q_Object publiczny: wyraźny Okno(QWidget *rodzic = 0); sygnały: próżnia przeciwdziałany(); prywatny szczeliny: próżnia Slotbuttonclicked(Bool sprawdzony); prywatny: int m_counter; Qpushbutton *M_Button; >;
Nawet jeśli sygnał jest zadeklarowany jako metoda, nie ma potrzeby go wdrażania. Kompilator meta-obiekt jest używany do tego.
Teraz musimy emitować sygnał, gdy licznik osiągnie 10. Jest to po prostu wykonane w automatach:
próżnia Okno::Slotbuttonclicked(Bool sprawdzony) Jeśli (sprawdzony) M_Button->Ustaw tekst("Sprawdzony"); > w przeciwnym razie M_Button->Ustaw tekst("Witaj świecie"); > m_counter ++; Jeśli (m_counter == 10) emitować przeciwdziałany(); > >
Musimy napisać słowo kluczowe emitować Aby wysłać sygnał.
Podłączenie nowo utworzonego sygnału z gniazdem rzucania się odbywa się jak zwykle:
łączyć(Ten, SYGNAŁ (przeciwdziałany()), Qapplication::instancja(), OTWÓR (zrezygnować ()));
Kod końcowy to:
#ifndef Window_H #określić okno_h #włączać klasa Qpushbutton; klasa Okno : publiczny QWidget Q_Object publiczny: wyraźny Okno(QWidget *rodzic = 0); sygnały: próżnia przeciwdziałany(); prywatny szczeliny: próżnia Slotbuttonclicked(Bool sprawdzony); prywatny: int m_counter; Qpushbutton *M_Button; >; #endif // Window_h
#włączać "okno.H" #włączać #włączać Okno::Okno(QWidget *rodzic) : QWidget(rodzic) // Ustaw rozmiar okna setfixedSize(100, 50); // Utwórz i ustaw przycisk M_Button = nowy Qpushbutton("Witaj świecie", Ten); M_Button->setgeometria(10, 10, 80, 30); M_Button->setCheckable(PRAWDA); m_counter = 0; łączyć(M_Button, SYGNAŁ (kliknięte(Bool)), Ten, OTWÓR (Slotbuttonclicked(Bool))); łączyć(Ten, SYGNAŁ (przeciwdziałany()), Qapplication::instancja(), OTWÓR (zrezygnować ())); > próżnia Okno::Slotbuttonclicked(Bool sprawdzony) Jeśli (sprawdzony) M_Button->Ustaw tekst("Sprawdzony"); > w przeciwnym razie M_Button->Ustaw tekst("Witaj świecie"); > m_counter ++; Jeśli (m_counter == 10) emitować przeciwdziałany(); > >
I możesz spróbować sprawdzić to po kliknięciu przycisku dziesięć razy, aplikacja zrezygnuje.
Rozwiązywanie problemów
Podczas kompilacji programu, zwłaszcza gdy dodajesz makro Q_Object, możesz mieć ten błąd kompilacji.
główny.CPP:(.tekst._Zn6Windowd2ev[[[_Zn6Windowd5ev]+0x3): nieokreślony odniesienie Do `VTABLE Do Okno'
Wynika to z tego, że kompilator meta-obiekt nie jest uruchamiany na klasie, która powinna mieć meta-obiekt. Powinieneś Rerun Qmake, Wykonując kompilację> Uruchom QMake.
Widżety
Przycisk opcji to standardowy komponent GUI. Często służy do dokonania unikalnego wyboru z listy. W QT qradiobutton służy do tworzenia przycisków opcji.
Dzięki miłym dziedzictwu Qradiobutton zachowuje się jak Qpushbutton. Wszystkie właściwości QPUSHBUTTON są również takie same w Qradiobutton, a wszystko, czego nauczył się w drugim rozdziale, można tutaj ponownie wykorzystać.
Domyślnie Qradiobuttons nie jest zgrupowany, więc wiele z nich można sprawdzić jednocześnie. Aby mieć „ekskluzywne” zachowanie wielu przycisków opcji, musimy użyć qbuttongroup . Ta klasa może być używana w ten sposób: przydzielamy nową grupę przycisków i dołączamy ją do obiektu nadrzędnego. Zauważ, że obiektem nadrzędnym może być MainWindow lub „to”:
Qbuttongroup *grupa pośladkowa = nowy Qbuttongroup(obiekt); // Dodaj przyciski w grupie przycisków grupa pośladkowa->Addbutton(przycisk 1); grupa pośladkowa->Addbutton(Button2); grupa pośladkowa->Addbutton(Button3); .
Chcemy utworzyć zbieracza menu. W oknie należy wyświetlić listę pysznych płyt z przyciskami opcji, a przycisk używany do wyboru wybrany płytka powinna być wyświetlana.
Oczywiście nic się nie stanie (teraz), gdy przyciski zostaną kliknięte.
Sygnały i szczeliny
Oto przykład o sygnałach i szczelinach. Napiszemy aplikację z dwoma przyciskami. Pierwszy przycisk powinien wyświetlać informacje o QT.
Zapewniamy następujący kod do zakończenia:
#włączać #włączać int główny(int Argc, zwęglać **Argv) Qapplication App (Argc, Argv); QWidget okno; okno.setfixedSize(100, 80); Qpushbutton *ButtonInfo = nowy Qpushbutton(„Informacje”, Iokno); ButtonInfo->setgeometria(10, 10, 80, 30); Qpushbutton *Buttonquit = nowy Qpushbutton("Zrezygnować", Iokno); Buttonquit->setgeometria(10, 40, 80, 30); okno.pokazywać(); // Dodaj swój kod tutaj powrót App.Exec(); >
Aby wyświetlić informacje o QT, należy użyć następującej metody
próżnia Qapplication::Aboutqt();
Możesz także dodać ikony na przyciskach lub zmienić ich rozmiar. Oczywiście przycisk „rzucić” powinien być ważniejszy, więc dlaczego nie uczynić go powiększaniem?
Ale naprawdę polecamy spróbować to wymyślić, jak rozwiązać te ćwiczenia.
QT dla początkujących – znajdowanie informacji w dokumentacji
Dokumentacja QT to bardzo cenna informacja. To miejsce do znalezienia wszystko Powiązane z Qt. Ale dokumentacja QT nie jest samouczkiem, jak korzystać z QT. Jest to zbiór wszystkich informacji związanych z klasami, a także niektórymi przykładami. Celem tego rozdziału jest przedstawienie dokumentacji jako podstawy programowania z QT.
Gdzie znaleźć dokumentację
Najlepsze źródło dokumentacji znajduje się w Internecie w tej sieci programistów:
Zapewnia pełny dokument, a także niektóre dokumenty, które użytkownicy mogą dodać. Te dokumenty podają więcej przykładów i podkreślają niektóre trudne punkty. Dokumentacja online ma również dość potężną wyszukiwarkę i zawiera również całą dokumentację dla wszystkich wersji QT.
Chociaż wersja online wymaga połączenia internetowego, dokumenty są nadal dostępne. Jeśli QTSDK został poprawnie zainstalowany, dokumentacja pasująca do bieżącej wersji QT powinna została zainstalowana, a Pomoc Sekcja QTCreator nie powinna być pusta. Możesz także użyć Asystent QT, to jest samodzielna przeglądarka doc.
Ważne sekcje dokumentacji
Jeśli uruchamiasz przeglądarkę dokumentacji offline, w QT Creator lub QT Assistant, w podsumowaniu przekonasz się, że istnieją dokumentacje dla różnych elementów QT SDK.
- Dokumentacja Assistant QT
- Dokumentacja projektanta QT
- Dokumentacja lingwisty QT
- Dokumentacja QMake
- Dokumentacja referencyjna QT
Najważniejszym elementem jest oczywiście dokumentacja referencyjna QT.
Dokumentacja QT zawiera miłe wprowadzenie wielu komponentów, a także dokumentację dla wszystkich klas w QT. Ta lista jest wymieniona na stronie wszystkie klasy. Inną interesującą stroną jest strona, która wymienia wszystkie moduły. Ta strona zawiera informacje o różnych komponentach w QT.
W tym samouczku będziemy głównie używać tych modułów
Funkcja wyszukiwania jest również dość ważna. Jeśli znasz klasę do użycia i chcesz znaleźć dokumentację, możesz wpisać nazwę tej klasy w polu wyszukiwania (online) lub w filtrze w indeksie (offline). Możesz także wyszukać metody i wyliczenia w tych dziedzinach.
Przeglądaj dokumentację klasy
Dokumentacja klas jest zawsze organizowana w ten sam sposób:
- Nazwa i krótki opis klasy
- Dziedzictwo
- Wyliczenia
- Nieruchomości
- Metody publiczne
- Publiczne szczeliny
- Sygnały
- Metody chronione
Przykładajmy klasę QTextedit jako przykład.
Czy QT ma interfejs C?
Znalazłem sprzeczne odpowiedzi w Internecie – niektórzy twierdzą, że tak, niektórzy twierdzą. Nie mogłem też znaleźć żadnych szczegółów w oficjalnej dokumentacji QT. Podobnie jak Qt ma wiązania C, czy nie?
zapytał 13 listopada 2009 o 10:53
6 041 11 11 złote odznaki 48 48 Srebrne odznaki 50 50 brązowych odznaki
7 Answers 7
Krótka odpowiedź: nie.
Jeśli potrzebujesz kompleksowego zestawu GUI dla C, możesz użyć GTK+.
Aby użyć QT, ty musieć mieć kompilator C ++. Ale to nie znaczy, że „logika aplikacji” nie może być napisana w C, skompilowana z kompilatorem C i starannie połączona z częścią C ++ (GUI z QT). Ta logika aplikacji może być ogólna, połączona z innymi wykonywalnymi (Pure-C, mieszany C/C ++ itp.) Wszystko zależy od tego, czego potrzebujesz.
QT jest jednak świetne dla C ++ i jest to dobry powód, aby zdecydować o użyciu C ++ dla konkretnego projektu, nawet jeśli nadal chcesz przechowywać części w C.