Тролль
ла
гастролях
Влад aka V.L.A.D. СВЕТЛИЧНЫЙ
Мы уже рассмотрели довольно много примеров использования Qt, пришло время написать программу,
которая делала бы что-либо полезное. Предлагаю сделать утилиту для управления CD-приводом —
ф ронт энд для консольной программы eject. Программа будет работать под О С Linux. Пользователи
Microsoft W indows могут переделать пример, подставив вместо вызовов утилиты eject соотвествующие
функции WinAPI.
Продолжение, начало см. в М К, № 6, 9, 12 (333, 336, 339)
П
ару слов о том, что умеет делать
e j e c t . Основные ее функ-
ции — извлечение лотка CD/DVD-привода —
e j e c t d e v ic e ;
закрытие лотка CD/DVD-привода —
e j e c t - t d e v ic e ; из-
менение скорости CD/DVD-привода —
e j e c t - х s p e e d d e -
v i c e .
Утилита
e j e c t присутствует практически в любом дистри-
бутиве, так что искать и устанавливать ее не придется.
Скриншот программы, о которой идет речь, представлен
на рисунке. Предварительно нужно где-то найти или изгото-
вить пиктограммы для кнопок «Извлечь лоток» и «Закрыть ло-
М к Рисунок
ток». Размера 48x48 будет достаточно. Очень вероятно, что
вы найдете подходящую иконку в каталоге /u s r/s h a re /ic o n s
или в его дочерних каталогах. Если нет — G IM P в руки и бы-
стренько состряпаем очередной графический шедевр © . Со-
храним эти иконки под именами e je c t.p n g и in s e rt.p n g .
В этот раз я хотел бы немного изменить структуру ката-
логов проекта. Создаем корневую директорию программы —
speeder. В ней создаем три подкаталога: b in , в котором бу-
дет находиться исполняемый файл проекта; p ic , в который
положим заготовленные иконки e je c t.p n g и in s e rt.p n g ; и
src , в котором будут находиться исходники программы. В
корневой каталог поместим файл проекта — spe ed er.pro
со следующим содержанием:
t e m p l a t e
= app
IN C L U D E P A T H + = .
T A R G E T = b in / s p e e d e r
H E AD ER S = s r c / s p e e d e r . h
SOURCES = s r c / s p e e d e r . c p p \
s r c / m a i n . c p p
IM A G E S = p i c / e j e c t . p n g \
p i c / i n s e r t . p n g
T A R G E T . P A T H = / u s r / l o c a l / b i n
Переменной
t a r g e t
(«цель») мы указали путь к исполняе-
мому файлу, а
t a r g e t . p a t h
— путь к установленному бинар-
нику (то есть уже после команды make
i n s t a l l ) , im a g e s мы
передали в качестве значения пути к пиктограммам, которые
будут вкомпилены непосредственно в бинарник при сборке
программы. Доступ к ним осуществляется при ПОМОЩИ
Q M im e -
S o u r c e (об этом ниже). Также вы, наверное, уже заметили,
что при «переносе» строк можно использовать обратный слэш.
Содержание файла m ain. срр будет аналогично тому, что
мы наблюдали в предыдущих примерах:
ttin c lu d e < q a p p lic a tio n .h >
ttin c lu d e "s p e e d e r.h "
in t m ain (in t a rg e , ch a r »argv [ ] )
{
Q A p p l i c a t i o n a ( a r g e , a r g v ) ;
S p e e d e r *m w = n e w S p e e d e r ;
a . s e t M a in W id g e t ( m w ) ;
m w - > s h o w ( ) ;
r e t u r n a . e x e c ( ) ;
}
В
s p e e d e r . h кроме описания класса S p e e d e r я также за-
дал две дефиниции —
D E V IC E И M A X S P E E D , В КОТОрЫХ ХрОНЯТ-
ся,
соответственно,
путь к устройству
( / d e v / c d r o m O ,
/ d e v / c d r o m l , / d e v / d v d и так далее) и максимальная ско-
рость вращения «подставочки для кофе» Для моего NEC
NR-9100 данный заголовочный файл имеет следующий вид:
# i n c l u d e < q s l i d e r . h >
# d e f i n e M A X S P E E D 4 0
# d e f i n e D E V IC E " / d e v / e d r o m "
c l a s s S p e e d e r : p u b l i c Q w id g e t
{
Q _O B JE C T
p u b l i c :
S p e e d e r ( ) ;
p u b l i c s l o t s :
v o i d e j e c t ( ) ;
v o i d i n s e r t ( ) ;
v o i d s e t S p e e d t ) ;
p r i v a t e :
Q S l i d e r » s l i d e r ;
};
Пару слов о структуре класса. В качестве базового вид-
жета мы используем стандартный Qwidget. Интерфейс при-
ложения создается в конструкторе Speeder (), слот eject ()
извлекает лоток CD-привода, слот in s e r t () задвигает его,
а setspeed () устанавливает скорость вращения диска в уст-
ройстве. В p r iv a te -секции определен указатель на класс
Q S lid e r — ползунок прокрутки.
Дотошный читатель может спросить: а почему мы не под-
ключаем заголовочный файл
q w i d g e t . h ? Все очень просто:
поскольку
Q S l i d e r также наследует Q w id g e t , то в q s l i d -
e r . h присутствует строка t t i n c l u d e < q w id g e t . h > .
Теперь я приведу листинг
s p e e d e r . с р р , по ходу сопрово-
ждая код своими комментариями:
t t i n c l u d e " s p e e d e r . h "
t t i n c l u d e < q p u s h b u t t o n . h >
t t i n c l u d e < q l a y o u t .h >
t t i n c l u d e < q l a b e l . h >
t t i n c l u d e < q l c d n u m b e r . h >
t t i n c l u d e < u n i s t d . h >
t t i n c l u d e < s y s / t y p e s . h >
S p e e d e r : : S p e e d e r ( )
: Q W id g e t ( 0 )
{
s e t C a p t i o n ( " S p e e d e r " ) ;
r e s i z e ( 4 7 0 , 7 0 ) ; / / и з м е н я е т р а з м е р в и д ж е т а : 4 7 0 п о
г о р и з о н т а л и и 7 0 п о в е р т и к а л и
Q P u s h B u tt o n ‘ b t n E j e c t = n e w Q P u s h B u t t o n ( t h i s ) ,
» b t n l n s e r t = n e w Q P u s h B u tt o n ( t h i s ) ,
» b t n S e t S p e e d = n e w Q P u s h B u tt o n ( " S e t s p e e d " , t h i s ) ;
//создаем кнопки
Q S l i d e r » s l i d e r = n e w Q S l i d e r ( 1 , M A X S P E E D , 1 ,
M A X S P E E D ,Q t: : H o r i z o n t a l , t h i s ) ; / / Создаем горизон-
тальный ползунок прокрутки, который изменяет свое значе-
ние от 1 ДО
M AXSPEED с шагом 1, текущее значение — M AXSPEED
14/341
04
апреля
-11
апреля
2005
предыдущая страница 38 Мой Компьютер 2005 14 читать онлайн следующая страница 40 Мой Компьютер 2005 14 читать онлайн Домой Выключить/включить текст