connect (button, SIGNAL(clicked()), this, SLOT(accept()));
}
QString LogonDialog::getUsername() {
if (username_entry == NULL) return NULL;
return username_entry->text();
}
QString LogonDialog::getPassword() {
if (password_entry == NULL) return NULL;
return password_entry->text();
}
На рис. 17.15 показано, как будет выглядеть диалоговое окно.
Рис. 17.15
Единственный оставшийся программный код — функция main
, которую вы помещаете в отдельный файл main.cpp.
1. В файле main.cpp вы открываете окно LogonDialog
и получаете успешную регистрацию из функции database_start
. Если регистрация оказалась неудачной, вы выводите окно QMessageBox
или при попытке закрыть LogonDialog
просите у пользователя подтверждения его выхода.
#include "MainWindow.h"
#include "app_mysql.h"
#include "LogonDialog.h"
#include
#include
int main(int argc, char **argv) {
char username[100];
char password[100];
KApplication a(argc, argv, "cdapp");
LogonDialog *dialog = new LogonDialog();
while (1) {
if (dialog->exec() == QDialog::Accepted) {
strcpy(username, dialog->getUsername());
strcpy(password, dialog->getPassword());
if (database_start(username, password)) break;
QMessageBox::information(0, "Title",
"Could not Logon: Check username and/or password",
QMessageBox::Ok);
continue;
} else {
if (QMessageBox:information(0, "Title",
"Are you sure you want to quit?", QMessageBox::Yes,
QMessageBox::No) == QMessageBox::Yes) {
return 0;
}
}
}
delete dialog;
MainWindow *window = new MainWindow("Cd App");
window->resize(600, 400);
a.setMainWidget(window);
window->show();
return a.exec();
}
2. Осталось только написать pro-файл для утилиты qmake
. Назовите его cdapp.pro:
TARGET = app
MOC_DIR = moc
OBJECTS_DIR = obj
INCLUDEPATH = /usr/include/kde /usr/include/mysql
QMAKE_LIBDIR_X11 += -/usr/lib
QMAKE_LIBDIR_X11 += /usr/lib/mysql
QMAKE_LIBS_X11 += -lkdeui -lkdecore -lmysqlclient
SOURCES = MainWindow.cpp main.cpp app_mysql.cpp AddCdDialog.cpp LogonDialog.cpp
HEADERS = MainWindow.h app_mysql.h AddCdDialog.h LogonDialog.h
Примечание
Обратите внимание на то, что приведенный программный код позволяет вам немного схитрить, просто переименовав файл app_mysql.c в файл app_mysql.cpp; таким образом, вы сможете использовать его как обычный исходный файл на языке С++. Это устраняет небольшое усложнение, необходимость редактирования связей или компоновки объектного файла на языке С и объектного файла на языке С++,
$ qmake cdapp.pro -о Makefile
$ make
$ ./арр
Если все нормально, вы должны получить работающую базу данных компакт-дисков!
Для того чтобы глубже понять KDE/Qt, можно попробовать реализовать другие функции в интерфейсе MySQL, такие как добавление дорожек в компакт-диски или удаление компакт-дисков. Вам понадобятся диалоговые окна, новые элементы меню и панели инструментов, придется также запрограммировать внутреннюю логику. Сделайте такую попытку!
В этой главе вы научились применять библиотеку графического пользовательского интерфейса Qt и рассмотрели виджеты графической среды KDE в действии. Вы узнали, что Qt — это библиотека на языке С++, применяющая механизм "сигнал/слот" для реализации программирования, управляемого событиями. Вы познакомились с основными виджетами Qt и написали несколько программ-примеров для демонстрации их практического применения. В заключение средствами KDE/Qt реализован графический пользовательский интерфейс вашего приложения для работы с компакт-дисками.
ОС Linux появилась сначала только как ядро системы. К сожалению, ядро само по себе не очень полезно; программам нужна регистрация, управление файлами, компиляция новых программ и т.д. Для того чтобы сделать систему полезной, в рамках проекта GNU были добавлены разные средства. Они представляли собой клоны похожих программ, имевшихся в UNIX и UNIX-подобных системах того времени. Превращение системы Linux в подобие UNIX-системы установило первые стандарты для Linux, предоставляя программистам на языке С знакомую рабочую среду.
Разные разработчики ОС UNIX (а позднее Linux) вставляли собственные расширения в команды и утилиты, которые включали в состав системы, и структура используемых ими файловых систем тоже слегка отличалась. Все это затрудняло создание приложений, способных выполняться в разных системах. Более того, программист не мог даже полагаться на то, что функциональные возможности системы были реализованы одинаково, или файлы конфигурации хранились в одном и том же месте.
Читать дальше