Нейл Мэтью - Основы программирования в Linux
- Название:Основы программирования в Linux
- Автор:
- Жанр:
- Издательство:«БХВ-Петербург»
- Год:2009
- Город:Санкт-Петербург
- ISBN:978-5-9775-0289-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Нейл Мэтью - Основы программирования в Linux краткое содержание
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.
Для начинающих Linux-программистов
Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Диалоговое окно, созданное методом QInputDialog::getText
, применяет виджет QLineEdit
. Параметр режима редактирования, передаваемый в функцию getText
, управляет способом отображения набираемого текста точно так же, как аналогичный параметр режима виджета QLineEdit
. Вы можете также задать текст, выводимый по умолчанию, или оставить поле пустым, как показано на рис. 17.9. У всех окон QInputDialog
есть кнопки OKи Cancel, и в метод передается указатель типа bool
для обозначения нажатой кнопки — результат равен TRUE
, если пользователь щелкает мышью кнопку OK.
Метод getItem
с помощью раскрывающегося списка QComboBox
предлагает пользователю список вариантов:
bool result;
QStringList options;
options << "London" << "New York" << "Paris";
QString city = QInputDialog::getItem("Holiday", "Please select a
destination:", options, 1, TRUE, &result, this, "combo");
if (result) selectDestination(city);
Созданное диалоговое окно показано на рис. 17.10.

Рис. 17.10
Функции getInteger
и getDouble
действуют во многом аналогично, поэтому мы не будем на них останавливаться.
Применение qmake для упрощения написания make-файлов
Компиляция приложения с библиотеками KDE и Qt становится утомительным занятием, поскольку ваш make-файл получается очень сложным из-за необходимости использовать moc
и иметь библиотеки здесь, там и везде. К счастью, Qt поставляется с утилитой qmake
для создания ваших make-файлов.
Если вы уже пользовались комплектом Qt, вам, возможно, знакома утилита tmake
— более раннее (и теперь устаревшее) воплощение qmake
, поставлявшееся с предыдущими версиями Qt.
Утилита qmake
принимает в качестве входного файл .pro. Этот файл содержит самые существенные сведения, необходимые для компиляции, такие как исходные тексты, заголовочные файлы, результирующий двоичный файл и местонахождения библиотек KDE/Qt.
Типичный pro-файл среды KDE выглядит следующим образом:
TARGET = app
MOC_DIR = moc
OBJECTS_DIR = obj
INCLUDEPATH = /usr/include/kde
QMAKE_LIBDIR_X11 += /usr/lib
QMAKE_LIBS_X11 += -lkdeui -lkdecore
SOURCES = main.cpp window.cpp
HEADERS = window.h
Вы задаете результирующий двоичный файл, временные каталоги moc и объектных файлов, путь к библиотеке KDE и исходные тексты, и заголовочные файлы, из которых формируется приложение. Учтите, что местонахождение файлов библиотек и заголовочных файлов KDE зависит от вашего дистрибутива. Пользователи SUSE должны приравнять INCLUDEPATH
путь /opt/kde3/include и QMAKE_LIBS_X11
путь /opt/kde3/lib.
$ qmake file.pro -о Makefile
Затем вы можете выполнить команду make
как обычно, что не вызовет затруднений. Для упрощения процедуры построения приложения следует использовать qmake
с программами любой сложности, применяющими KDE/Qt.
Создание меню и панелей инструментов с помощью KDE
Для того чтобы продемонстрировать мощь виджетов KDE, мы оставили меню и панели инструментов напоследок, поскольку они — уж очень наглядные примеры того, как библиотеки KDE экономят время и усилия по сравнению с применением только Qt или любых других комплектов с элементами графического пользовательского интерфейса.
Обычно в библиотеках GUI элементы меню и панелей инструментов — отличающиеся элементы, каждый со своим собственным виджетом. Вы должны создавать отдельные объекты для каждого элемента и отслеживать изменения, например, делая недоступными определенные варианты, каждый отдельно.
У программистов KDE появилось лучшее решение. Вместо такого обособленного подхода в KDE определен виджет KAction
для представления действия, которое может выполнить приложение. Это действие может открыть новый документ, сохранить файл или вывести окно справки.
KAction
присваивается текст, клавиатурный акселератор, пиктограмма и слот, который вызывается при активизации действия:
KAction *new_file = new KAction("New", "filenew",
KstdAccel::shortcut(KstdAccel::New), this,
SLOT(newFile()), this, "newaction");
Затем KAction
может быть вставлено в меню и панель инструментов без дополнительного описания:
new_file->plug(a_menu);
new_file->plug(a_toolbar);
Таким образом, вы создали пункт меню Newи кнопку панели инструментов, которые вызывают newFile
при щелчке кнопкой мыши.
Теперь если вам нужно отменить KAction
— скажем, вы не хотите, чтобы пользователь мог создать новый файл, — вызов централизован:
new_file->setEnabled(FALSE);
Это все, что касается меню и панелей инструментов в среде KDE — на самом деле очень легко и просто. Далее приведен конструктор виджета KAction
:
#include
KAction(const QString& text, const KShortcut& cut,
const QObject* receiver, const char* slot,
QObject *parent, const char* name = 0);
KDE предоставляет стандартные объекты KAction
для унификации текста, клавиатурных акселераторов и пиктограмм в разных приложениях KDE:
#include
KAction* openNew(const QObject* recvr, const char *slot,
KActionCollection* parent, const char* name = 0)ж
KAction* save ...
KAction* saveAs ...
KAction* revert ...
KAction* close ...
KAction* print ...
И т.д.
Любое стандартное действие принимает одни и те же параметры; слот-приемник и функцию, KActionCollection
и имя KAction
. Объект KActionCollection
управляет в окне объектами KAction
, и вы можете получить текущий объект с помощью метода actionCollection
окна KMainWindow
:
KAction *saveas = KStdAction::saveAs(this, SLOT(saveAs()) ,
actionCollection(), "saveas");
Выполните упражнение 17.8.
В приведенном далее примере вы опробуете объекты KAction
в приложении среды KDE.
1. Начните с заголовочного файла KDEMenu.h. KDEMenu
— это подкласс KMainWindow
, являющегося подклассом класса QMainWindow
. KMainWindow
управляет сеансом в среде KDE и обладает встроенными панелью инструментов и строкой состояния.
#include
class KDEMenu : public KMainWindow {
Q_OBJECT
public:
KDEMenu(const char * name = 0);
private slots:
void newFile();
void aboutApp();
};
2. Файл KDEMenu.cpp начните с директив #include
для виджетов, которые будете применять:
#include "KDEMenu.h"
#include
#include
#include
#include
#include
3. В конструкторах, создающих три виджета KAction
, new_file
определяется вручную, a quit_action
и help_action
используют стандартные определения KAction
:
KDEMenu::KDEMenu(const char *name = 0) : KMainWindow (0L, name) {
Интервал:
Закладка: