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



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


Глава 13. Создание графического интерфейса средствами Qt
void CalculatorMainWindow : : c r e a t e W i d g e t s ( )
{
. . . . .
//Зададим политики размера для кнопок: горизонтальное и вертикальное изменение размера
pushButton−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_2−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_3−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_4−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_5−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_6−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_7−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_8−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_9−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButton_10−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButtonC−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
pushButtonPlus−>s e t S i z e P o l i c y ( Q S i z e P o l i c y : : P r e f e r r e d , Q S i z e P o l i c y : : P r e f e r r e d ) ;
}
Также размеры виджета можно жёстко ограничивать с помощью мето-
дов setMaximumSize() (контролирует максимальный размер элемента интер-
фейса) и setMinimumSize() (контролирует минимальный размер). В качестве
параметра они принимают объект класса QSize, содержащий размеры эле-
мента. Для удобства можно использовать также методы setMinimumWidth(),
setMinimumHeight()
, setMaximumWidth(), setMaximumHeight() для задания ми-
нимальной ширины и высоты, а также максимальной ширины и высоты. Зададим
фиксированный вертикальный размер для визуального элемента lcdNumber:
void CalculatorMainWindow : : c r e a t e W i d g e t s ( )
{
. . .
lcdNumber−>s e t F i x e d H e i g h t ( 5 0 ) ;
}
Результат изменения политик размера показан на рисунке 13.6.
Рис. 13.6: Графический интерфейс программы-калькулятора.
Программирование на языке С++ в среде Qt Creator


13.4. Сигнально-слотовые соединения
365
13.4
Сигнально-слотовые соединения
Одной из фундаментальных возможностей в Qt является взаимодействие объ-
ектов с помощью сигнально-слотовых соединений. Для осознания преимуществ,
которые предоставляет такая возможность, рассмотрим как устроено взаимодей-
ствие между объектами в программе.
Любая объектно-ориентированная программа состоит из объектов, которые
взаимодействуют между собой. Каждый из объектов обладает состоянием, ко-
торое определяет совокупность данных, которые хранит объект в данный мо-
мент. В ответ на взаимодействие с объектом его состояние может измениться.
Например, объект, реализующий сетевое соединение, может получить новые от-
правленные данные, а объект, реализующий кнопку на окне пользовательского
интерфейса, может быть нажат пользователем. Таким образом объект изменил
своё состояние — и он может уведомить об этом другой объект посылая ему
сообщение об изменении. Практически это взаимодействие обычно реализуют с
помощью вызова метода объекта, которому нужно отправить сообщение. Этот
метод должен выполнять соответствующие действия в ответ на изменение. Каж-
дый объект выполняет свою роль, а взаимодействие между ними происходит за
счёт взаимного вызова методов (прямого или косвенного), каждый из которых
должен выполнять собственную чёткую функцию. Таким разделением получают
уменьшение сложности кода — за счёт чёткого распределения ответственности
между объектами — а, следовательно, получают и гибкость, способность клас-
сов к повторному использованию, простоту сопровождения кода. Очень важно
хорошее понимание этих ключевых идей — разделение ответственности между
объектами в программе и организации взаимодействия между ними на основе
чётко определённых интерфейсов (наборов методов), вытекающих из фундамен-
тальных понятий ООП: абстракции и инкапсуляции.
Таким образом, для реализации такого взаимодействия программисту нужно
вызвать метод другого объекта в ответ на изменение состояния. Объект, кото-
рый сменил состояние, может для этого просто хранить указатель на другой
объект, чей метод нужно вызвать. В ответ на изменение состояния он будет об-
ращаться через указатель и вызывать метод. Однако, в таком случае теряется
гибкость. Например, в случае с элементами управления в окне программы, при-
дётся программировать каждый элемент отдельно — наследовать от класса эле-
мента управления, добавлять указатель и переопределять метод для обработки
действий пользователя с целью взаимодействия с другими объектами в програм-
ме. К тому же такая связь не может быть динамической и задаётся жёстко на
этапе компиляции.
Конечно можно передавать указатель на метод, который будет вызываться
в ответ (callback), но такой подход тоже имеет некоторые недостатки (меньшая
безопасность, всегда работает как прямой вызов метода, нужны знания о деталях
реализации). Именно поэтому в Qt используется концепция сигнально-слотовых
соединений.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


366
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   162   163   164   165   166   167   168   169   ...   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