Технология ООП
Санкт-Петербургский государственный политехнический университет
1 ноября 2011
Технология ООП
qmake
qmake создает файл сборки, основываясь на информации в
файле проекта.
qmake содержит дополнительные свойства для поддержки
разработки с Qt, включая автоматическое создание правил для
moc и uic.
Технология ООП
qmake
qmake имеет два режима работы, в первом он генерирует
проектные файлы (.pro), а во втором на основе проектных
файлов генерирует правила сборки. Опции:
-recursive
-nodepend
-nomoc
-Wnone
-Wall
Технология ООП
файлы проекта qmake. Переменные
В файле проекта, переменные используются для хранения
списков строк. В простых проектах эти переменные
информируют qmake о параметрах настройки, именах файлов и
каталогах, которые используются в процессе сборки.
HEADERS = mywidget.h mylist.h \\
test.h
Оператор $$ используется для извлечения содержимого
переменной и может быть использован для передачи значений
между переменными или передачи их в функции:
EVERYTHING = $$SOURCES $$HEADERS
Технология ООП
Переменные
Специальный оператор $$[...] может быть использован для
получения доступа к различным опциям конфигурирования,
которые были установлены при сборке Qt:
message(Qt version: $$[QT_VERSION])
Для получения содержимого значения окружения при запуске
qmake используйте оператор $$(...):
DESTDIR = $$(PWD) #выполняется на этапе обработки
проекта
DESTDIR = $(PWD) #выполняется на этапе обработки
makefile’а
Технология ООП
операторы
Операторы:
variable = value
variable += value
variable -= value
variable *= value
variable = value
DEFINES += QT_DLL
CONFIG += gui
Технология ООП
Комментарии
Для добавления комментария в файл проекта используется
символ #. Если необходимо вставить символ # как часть
переменной, то нужно использовать переменную
LITERAL_HASH.
urlPieces = [Link]
pageCount
message($$join(urlPieces, $$LITERAL_HASH))
Технология ООП
Области видимости
Области видимости аналогичны операторам if в процедурных
языках программирования. Если некоторое условие истинно, то
объявления внутри области видимости обрабатываются.
<условие> {
<команда или определение>
...
}
Открывающая скобка должна находиться в той же строке, что
и условие.
win32 {
SOURCES += p a i n t w i d g e t _ w i n . cpp
}
Технология ООП
Области видимости
Области видимости допускают вложенность, а также
сокращенную запись используя оператор «:». Значения,
сохраненные в переменной CONFIG, специально
обрабатываются для qmake. Например:
CONFIG += opengl
opengl {
TARGET = a p p l i c a t i o n −g l
} else {
TARGET = a p p l i c a t i o n
Технология ООП
Циклы
Простые циклы создаются с помощью перебора списка
значений, используя встроенную функцию for. Следующий код
добавляет каталоги в переменную SUBDIRS, но только в том
случае, если они существуют:
EXTRAS = h a n d l e r s t e s t s d o c s
f o r ( d i r , EXTRAS) {
exists ( $$dir ) {
SUBDIRS += $ $ d i r
}
}
Технология ООП
Встроенные функции
Встроенные функции позволяют обрабатывать содержимое
переменных. Эти функции обрабатывают переданные им
аргументы и возвращают в качестве результата значение или
список значений.
HEADERS = model . h
HEADERS += $$OTHER_HEADERS
HEADERS = $ $ u n i q u e (HEADERS)
win32 : INCLUDEPATH += $ $ q u o t e (C : / m y l i b s / e x t r a
headers )
Технология ООП
Условные функции
Выполняются только при выполнении условия, например,
isEmpty(variablename):
i s E m p t y ( CONFIG ) {
CONFIG += q t warn_on debug
}
Технология ООП
Пользовательские функции
defineReplace ( headersAndSources ) {
v a r i a b l e = $$1
names = $ $ e v a l ( $ $ v a r i a b l e )
headers =
sources =
f o r ( name , names ) {
h e a d e r = $$ {name } . h
e x i s t s ( $$header ) {
h e a d e r s += $ $ h e a d e r
}
s o u r c e = $$ {name } . cpp
e x i s t s ( $$source ) {
s o u r c e s += $ $ s o u r c e
}
}
return ( $$headers $$sources )
}
Технология ООП
Переменные qmake
Перечень переменных которые распознаются Qt:
CONFIG
DESTDIR
FORMS
HEADERS
QT
RESOURCES
SOURCES
TEMPLATE
Технология ООП
Шаблоны проекта
Переменная TEMPLATE используется для определения типа
проекта, который будет собран. Доступные типы проектов:
app
lib
subdirs
vcapp
vclib
vcsubdirs
Технология ООП
Общие настройки
Переменная CONFIG определяет параметры и возможности,
которые должен использовать компилятор, и библиотеки, с
которыми будет идти компоновка.
release
debug
debug_and_release
ordered
warn_on
warn_off
qt
thread
x11
Технология ООП
Объявление библиотек Qt
Если переменная CONFIG содержит значение qt, то qmake
поддерживает приложения Qt.
core
gui
network
opengl
sql
svg
xml
qt3support
CONFIG += q t
QT += n e t w o r k xml
Технология ООП
Объявление библиотек Qt
Если в проекте используются не только библиотеки Qt, то
дополнительные библиотеки для линковки, а также пути поиска
заголовочных файлов можно добавить:
LIBS += −Ld : / s t l / l i b −l m a t h
INCLUDEPATH = c : / msdev / i n c l u d e d : / s t l / i n c l u d e
Технология ООП
MOC
Мета-объектный компилятор(MOC) — программа, которая
обрабатывает расширения C++ от Qt. Каждый класс
использующий возможности мета-объектной системы должен
быть обработан moc.
Инструмент moc читает заголовочный файл C++. Если он
находит одно или более объявлений классов, которые содержат
макрос Q_OBJECT, то он порождает файл исходного кода
C++, содержащий мета-объектный код для этих классов.
Технология ООП
Использование MOC
Обычно moc используется с входным файлом, содержащим
такое объявление класса:
c l a s s MyClass : p u b l i c QObject
{
Q_OBJECT
public :
MyClass ( QObject ∗ p a r e n t = 0 ) ;
~MyClass ( ) ;
};
После чего будет сгенерирован файл .cpp на основании файла,
например, если файл с объявлентем был myclass.h, то на
выходе получится moc_myclass.cpp.
Технология ООП
Использование MOC
Moc не обрабатывает весь c++ из-за этого классы-шаблоны не
могут содержать сигналы и слоты.
Вызов препроцессора moc происходит то вызова препроцессора
языка, а значит и до выполнения подстановки директив
компилятора, таких как define
Технология ООП
Механизм свойств
Классы, унаследованные от QObject, могут использовать
механизм свойств, поддерживаемый библиотекой Qt.
Свойства — это поля класса, который определяются
специальным образом и благодаря которым к атрибутам
объекта класса можно получить доступ извне (например, из Qt
Script).
Для определения свойств используются директивы
препроцессора:
Q_PROPERTY
(
t y p e name
READ g e t F u n c t i o n
[ WRITE s e t F u n c t i o n ]
[ RESET r e s e t F u n c t i o n ]
[ DESIGNABLE bool ]
[ SCRIPTABLE bool ]
[ STORED bool ]
)
Технология ООП
Механизм свойств
WRITE — запись значения
RESET — сброс значения
DESIGNABLE — отображение в инспекторе свойств
SCRIPTABLE — доступность в Qt Script
STORED — поддержка сериализации
Технология ООП
Пример задания свойства
c l a s s MyExample : p u b l i c QObject {
Q_OBJECT
Q_PROPERTY( i n t f i r s t P r o p e r t y READ g e t F i r s t P r o p V a l u e
WRITE s e t F i r s t P r o p V a l u e )
private :
int m_firstProp ;
public :
int getFirstPropValue () { return m_firstProp ; }
void s e t F i r s t P r o p V a l u e ( i n t v a l u e ) { m_firstProp =
value ; }
};
Технология ООП
Пример задания свойства
myExample−>s e t P r o p e r t y ( " f i r s t P r o p e r t y " , 1 0 ) ;
i n t p r o p V a l u e = myExample−>p r o p e r t y ( " f i r s t P r o p e r t y "
) . toInt () ;
Технология ООП
Строковые значения
Класс QString представляет собой строку символов Unicode.
QString хранит строку 16-битных QChar, где каждый QChar
хранит символ Unicode 4.0.
const QChar ∗ c o n s t D a t a ( ) const
bool i s E m p t y ( ) const
bool i s N u l l ( ) const
i n t l e n g t h ( ) const
QChar a t ( i n t i ) const
QByteArray t o A s c i i ( ) const
...
Технология ООП
Строковые значения
QString s t r = "Hello" ;
QString s t r 1 ;
i f ( s t r == " t e s t 1 " | | s t r == " H e l l o " )
{ ... }
s t a t i c const QChar d a t a [ 4 ] = { 0 x0055 , 0 x006e , 0
x10e3 , 0 x03a3 } ;
Q S t r i n g s t r ( data , 4 ) ;
Q S t r i n g s t r = "and" ;
s t r . p r e p e n d ( " rock ␣" ) ; // s t r == " r o c k and "
s t r . append ( "␣ r o l l " ) ; // s t r == " r o c k and
roll"
s t r . r e p l a c e ( 5 , 3 , "&" ) ; // s t r == " r o c k & r o l l "
Технология ООП
Строковые значения
Qt также предоставляет класс QByteArray для хранения
произвольных байтов и 8-битных оканчивающихся на ’\0’
строк.
const char ∗ c o n s t D a t a ( ) const
bool i s E m p t y ( ) const
bool i s N u l l ( ) const
i n t l e n g t h ( ) const
char a t ( i n t i ) const
i n t i n d e x O f ( char ch , i n t from = 0 ) const
i n t l a s t I n d e x O f ( const QByteArray & ba , i n t from =
−1 ) const
bool c o n t a i n s ( const QByteArray & ba ) const
Технология ООП
QStringList
Список строк, аналог конструкции QList<QString>.
QStringList fonts ;
f o n t s << " A r i a l " << " H e l v e t i c a " << "Times" <<
"Courier" ;
f o r ( i n t i = 0 ; i < f o n t s . s i z e ( ) ; ++i )
c o u t << f o n t s . a t ( i ) . t o L o c a l 8 B i t ( ) .
c o n s t D a t a ( ) << e n d l ;
QStringList : : const_iterator constIterator ;
for ( c o n s t I t e r a t o r = fonts . constBegin () ;
c o n s t I t e r a t o r != f o n t s . c o n s t E n d ( ) ;
++c o n s t I t e r a t o r )
c o u t << ( ∗ c o n s t I t e r a t o r ) . t o L o c a l 8 B i t ( ) .
c o n s t D a t a ( ) << e n d l ;
QString s t r = f o n t s . j o i n (" ,") ;
QStringList l i s t ;
l i s t = s t r . s p l i t (" ,") ;
Технология ООП