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



Download 5,27 Mb.
Pdf ko'rish
bet187/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   183   184   185   186   187   188   189   190   ...   193
Bog'liq
Book-qtC


Глава 15. Разработка приложений с графическим интерфейсом
setWindowModified ( f a l s e ) ;
}
e l s e
{
//Если при открытии файла возникла ошибка выводим диалоговое окно с сообщением,
//содержащим имя файла, одну кнопку «Ок» и заголовок «Error»
QMessageBox : : warning ( this , " E r r o r " , QString ( " C o u l d n o t o p e n f i l e %1 f o r
w r i t i n g "
) . a r g ( l F i l e . f i l e N a m e ( ) ) , QMessageBox : : Ok) ;
}
}
Здесь в начале каждого из слотов мы вызываем диалог для выбора файла с
помощью статических методов класса QFileDialog. Диалог для открытия файла
мы вызываем с помощью метода
QFileDialog::getOpenFileName()
, а для сохранения — с
помощью
QFileDialog ::getSaveFileName()
. Для каждого из случаев диалог будет иметь
соответствующий вид. Для того, чтобы добавить фильтр для текстовых файлов
мы передаем строку с описанием фильтра — «Text files (*.txt );;All files (*.*)».
В описании — названия для фильтров и шаблоны для фильтрации (в скобках).
Можно задавать несколько шаблонов через пробел при необходимости. Фильтры
в списке разделяем с помощью двойной точки с запятой.
После выбора пользователем файла, статический метод вернет полный путь
к нему. В случае, когда пользователь закрыл диалог или нажал «Отмена», метод
вернет пустую строку. Для выбранного файла мы выполняем чтение содержимо-
го и сохранения. Если при открытии возникла ошибка, мы выводим ее с помощью
статического метода
QMessageBox::warning()
.
При открытии файла мы использовали собственный метод
askForFileSaveAndClose
()
, который должен проверить текущий открытый файл на изменения и пред-
ложить пользователю сохранить их перед открытием другого файла. Добавим
описание этого метода к описанию класса MainWindow:
private :
bool a s k F o r F i l e S a v e A n d C l o s e ( ) ;
и его реализацию в файл mainwindow.cpp:
//Метод для проверки текущего файла на изменения и вывода диалога для пользователя,
//с предложением сохранить изменения. Метод возвращает логическое значение,
//содержащее false в случае, когда пользователь нажал в диалоге кнопку «Cancel»
bool MainWindow : : a s k F o r F i l e S a v e A n d C l o s e ( )
{
i f ( isWindowModified ( ) ) //Если содержимое окна модифицировано
{
//вызываем диалог с вопросом, нужно ли сохранять изменения: подставляем в текст диалога
//название текущего открытого файла, задаем кнопки: «Да», «Нет» и «Отмена».
//Результат работы диалога (нажатой кнопки) записываем в переменную
i n t l R e s u l t = QMessageBox : : q u e s t i o n ( this , t r ( " S a v e c h a n g e s " ) ,
Q S t r i n g ( t r ( " F i l e %1 is m o d i f i e d . Do y o u w a n t to s a v e y o u r c h a n g e s ? " ) ) . a r g
( mFile . f i l e N a m e ( ) ) , QMessageBox : : Yes , QMessageBox : : No , QMessageBox : :
C a n c e l ) ;
i f ( QMessageBox : : Yes == l R e s u l t ) //Если нажали кнопку «Да»
{
s l o t S a v e ( ) ; //сохранить изменения
}
e l s e
{
i f ( QMessageBox : : Cancel == l R e s u l t ) //Если нажали кнопку «Отменить»
{
return f a l s e ;
Программирование на языке С++ в среде Qt Creator


15.4. Стандартные диалоги
407
}
}
}
return true ;
}
В этом фрагменте программы мы использовали статический метод
QMessageBox :: question
, и задали заголовок, текст и кнопки на диало-
ге с помощью специальных констант (QMessageBox::Yes, QMessageBox::No,
QMessageBox::Cancel
). Он, как и почти все статические методы QMessageBox,
возвращает значение нажатой кнопки. Это значение мы сравниваем со значения-
ми констант для кнопок, чтобы определить, какие дальнейшие действия выбрал
пользователь. Используем метод
askForFileSaveAndClose()
также и в слоте для нового
текстового файла:
//Спросить пользователя о сохранении документа
i f
( ! a s k F o r F i l e S a v e A n d C l o s e ( ) )
{
//Если пользоватеель нажал «Отменить» игнорировать вызов — продолжать работу
return ;
}
Осталось реализовать вывод информации о программе. Для этого сначала
добавим к .pro-файлу информацию о версии. Например, добавим переменные
с большим и меньшим номерами версии, а потом передадим их в переменную
DEFINES
таким образом, чтобы они были объявлены в программе. Это может
быть удобно для дальнейшего изменения версии при разработке программы:
MAJOR_VERSION = 1
MINOR_VERSION = 0
DEFINES += \
MAJOR_VERSION=$$MAJOR_VERSION \
MINOR_VERSION=$$MINOR_VERSION
После изменений в файле проекта не забудьте вызвать qmake еще раз, чтобы
программа обработала все изменения в файле проекта (выберите в главном меню
Build->Run qmake
) Теперь в файле main.cpp зададим версию, а также название
для QApplication:
i n t main ( i n t argc , char ∗ a r g v [ ] )
{
Q A p p l i c a t i o n a ( a r g c , a r g v ) ;
a . s e t A p p l i c a t i o n N a m e ( " T e x t E d i t o r " ) ;
a . s e t A p p l i c a t i o n V e r s i o n ( Q S t r i n g ( " % 1 . % 2 " )
. a r g (MAJOR_VERSION)
. a r g (MINOR_VERSION) ) ;
MainWindow w ;
w . show ( ) ;
return a . e x e c ( ) ;
}
Теперь используем объект QApplication для получения версии и названия
программы в слоте отображения информации. Добавим объявления слота, а так-
же следующую его реализацию:
//Слот для отображения информации о программе
void MainWindow : : slotAboutProgram ( )
{
//Выводим диалоговое информационное окно с сообщением, куда подставляем версию и название
//программы возвращаемых QApplication. Указываем — окно содержит заголовок «About».
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


408
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   183   184   185   186   187   188   189   190   ...   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