Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet167/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   163   164   165   166   167   168   169   170   ...   193
Bog'liq
Book-qtC


Глава 13. Создание графического интерфейса средствами Qt
Сигнально-слотовые соединения
являются простым, но в то же время важ-
ным средством кроссплатформенного инструментария разработки Qt. Один объ-
ект при изменении своего состояния может сообщить других с помощью сигнала.
Визуальные компоненты тоже вырабатывают сигналы в ответ на действия поль-
зователя (например, нажатия кнопки, установки флага, изменения положения
слайдера, редактирования текста в поле ввода и т. п.). Другие объекты могут
присоединиться к сигналу слотом — специальным методом, который реализу-
ет некоторую функциональность и вызывается каждый раз, когда был выпущен
присоединённый к нему сигнал. Как отмечалось ранее, сигнально-слотовые со-
единения могут использоваться как для взаимодействия объектов в пределах
одного потока, так и между потоками (при соответствующих условиях), также
возможна организация отложенного выполнения операций.
Для задания соединения используют метод connect() класса QObject. Метод
принимает пять параметров:
• указатель на объект, который посылает сигнал (sender);
• название сигнала (signal) и его параметры, которые задаются с помощью
макроса SIGNAL();
• указатель на объект, который получает сигнал (receiver);
• название слота (slot) и его параметры, которые задаются с помощью мак-
роса SLOT(), или название другого сигнала, будет эмитироваться (выпус-
каться) в ответ;
• тип сигнально-слотового соединения (имеет значение по умолчанию
Qt::AutoConnection
).
В следующем примере мы продемонстрируем сигнально-слотовое соедине-
ния между кнопкой QPushButton и виджетом-окном QWidget. В ответ на
нажатие кнопки (сигнал clicked()), вызывается метод-слот close(), ко-
торый закрывает окно. Заметим, что слоты имеют спецификатор доступа
(private/protected/public) и вызывают их как и обычные методы класса. Этим
они не отличаются от других методов.
connect(lPushButton,SIGNAL(clicked()),lWindow, SLOT(close()));
Сигнально-слотовые соединения
могут отличаться методом вызова слота, ли-
бо механизмом соединения. Тип соединения можно указать при его создании:
• Qt::AutoConnection — тип соединения по умолчанию. При соединении объ-
ектов в пределах потока ведёт себя как Direct Connection, иначе — как
Queued Connection
;
• Qt::DirectConnection — слот вызывается немедленно после того, как был
выпущен сигнал. По сути это напоминает обычний вызов слота как метода;
• Qt::QueuedConnection — слот выполняется, как только управления перей-
дёт к очереди обработки сообщений потока получателя;
• Qt::BlockingQueuedConnection — то же, что и Queued Connection, но по-
ток, из которого был выпущен сигнал блокируется, пока выполнение слота
не будет завершено. Этот тип соединения должен использоваться только
когда взаимодействующие объекты находятся в разных потоках.
Программирование на языке С++ в среде Qt Creator


13.5. Создание сигналов (signals) и слотов (slots)
367
• Qt::UniqueConnection — этот тип соединения такой же как и
Qt::AutoConnection
, но соединение происходит только тогда, когда оно
уникально (то есть такое, которое не дублирует уже существующие соеди-
нений).
Также с помощью соединений между слотами и сигналами может происходить
передача параметров. Например, визуальный элемент QCheckBox выпускает сиг-
нал toggled() каждый раз при установке и снятии флажка. Сигнал toggled()
передаёт один параметр — булевое значение: true — если флажок установлен,
false
— если нет. Мы сможем соединить его со слотом setChecked() кнопки,
который также принимает булево значение и устанавливает кнопку в положение
«включено» (true) или «выключено» (false). Заметьте: мы использовали ме-
тод setCheckable(), который устанавливает для кнопки режим переключения
между двумя состояниями.
lPushButton−>s e t C h e c k a b l e ( true ) ;
c o n n e c t ( lCheckBox , SIGNAL( t o g g l e d ( bool ) ) , lPushButton , SLOT( setChecked ( bool ) ) ) ;
• порядок и тип параметров должен совпадать у объекта, который передаёт
сигнал, и у объекта-получателя;
• сигнал или слот получателя может опускать некоторые или все остальные
параметры, при этом порядок и тип параметров, которые остались у полу-
чателя, должны совпадать с первыми параметрами сигнала.
Один и тот же сигнал объекта может быть подключён к нескольким различным
сигналам и слотам другого объекта и наоборот. При этом последовательность,
в которой будут вызываться присоединённые сигналы и слоты будет соответ-
ствовать порядку в котором их соединили. Также надо помнить, что одно и то
же соединение может быть выполнено несколько раз подряд. В таком случае
при вызове сигнала слот сработает столько же раз, сколько раз было повторно
выполнено соединение. Для того, чтобы избежать этого, необходимо передавать
тип соединения Qt::UniqueConnection каждый раз в случаях, когда создание
повторных соединений не требуется.
Возможность создания перекрёстного сигнально-слотового соединения про-
демонстрирована в следующем примере:
c o n n e c t ( lCheckBox , SIGNAL( t o g g l e d ( bool ) ) , lPushButton , SLOT( setChecked ( bool ) ) ) ;
c o n n e c t ( lPushButton , SIGNAL( t o g g l e d ( bool ) ) , lCheckBox , SLOT( setChecked ( bool ) ) ) ;
Здесь мы видим взаимодействие между обоими элементами управления. При
установке\сбросе флажка кнопка будет устанавливаться во включённое состоя-
ние или сбрасываться и наоборот.
13.5
Создание сигналов (signals) и слотов (slots)
Для того, чтобы объект мог принимать участие в сигнально-слотовом взаи-
модействии, нужно удовлетворить несколько условий. Класс, экземпляром кото-
рого является объект, должен наследовать от класса QObject (в случае множе-
ственного наследования QObject должен быть первым в списке классов).
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


368
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   163   164   165   166   167   168   169   170   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish