И вот оно! Мы закончили наш тур по Qt и KDE, рассмотрев базовые элементы, всех приложений GUI, окна, схемы размещения, кнопки, диалоговые окна и меню. Существует бесчисленное множество виджетов Qt и KDE, о которых мы не упоминали, начиная с QColorDialog
— диалогового окна для выбора цвета — и заканчивая KHTML
— виджетом Web-обозревателя — все они подробно описаны на Web-сайтах компании Trolltech и графической среды KDE.
Приложение для работы с базой данных компакт-дисков с использованием KDE/Qt
Теперь, когда вы можете использовать силу и мощь KDE/Qt, пришло время снова обратить внимание на приложение для работы с компакт-дисками, чтобы привести его в чувство.
Напоминаем, чего вы хотите добиться от вашего приложения для работы с базой данных компакт-дисков:
□ регистрация в базе данных из графического пользовательского интерфейса;
□ поиск компакт-диска в базе данных;
□ вывод информации о компакт-диске и его дорожках;
□ добавление компакт-диска в базу данных;
□ отображение окна About(О программе).
Начнем обсуждение с программного кода для главного окна приложения, которое содержит виджет поля поиска и список для отображения результатов поиска.
1. Начните с ввода программного кода в файл MainWindow.h (или загрузите его с Web-сайта книги). Поскольку окно содержит виджет QLineEdit
для поиска компакт-дисков и виджет QListView
для вывода результатов поиска, вы должны вставить в программный код заголовочные файлы qlistview.h и qlineedit.h:
#include
#include
#include
class MainWindow : public KMainWindow {
Q_OBJECT
public:
MainWindow(const char *name);
public slots:
void doSearch();
void Added();
private:
QListView *list;
QLineEdit *search_entry;
};
2. MainWindow.срр — самая сложная часть программы. В конструкторе вы создаете интерфейс главного окна и связываете необходимые сигналы с вашими слотами. Как обычно, начните программу с файлов в директивах #include
:
#include "MainWindow.h"
#include "AddCdDialog.h"
#include "app_mysql.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
MainWindow::MainWindow(const char * name) : KMainWindow(0L, name) {
setCaption("CD Database");
3. Теперь создайте элементы меню и панели инструментов с помощью виджета KAction
.
KAction *addcd_action = new KAction("&Add CD", "filenew",
KStdAccel::shortcut(KStdAccel::New), this, SLOT(AddCd()), this);
KAction *quit_action = KStdAction::quit(KApplication::kApplication(),
SLOT(quit()), actionCollection());
QPopupMenu* filemenu = new QPopupMenu;
QString about = ("CD App\n\n"
"(C) 2007 Wrox Press\n" "email@email.com\n");
QPopupMenu* helpmenu = helpMenu(about);
menuBar()->insertItem("&File", filemenu);
menuBar()->insertltem(i18n("&Help"), helpmenu);
addcd_action->plug(filemenu);
filemenu->insertSeparator();
quit_action->plug(filemenu);
addcd_action->plug(toolBar());
quit_action->plug(toolBar());
4. Для разнообразия примените виджеты QBoxLayout
вместо обычных классов QLayout
:
QVBox *vbox = new QVBox(this);
QHBox *hbox = new QHBox(vbox);
QLabel* label = new QLabel(hbox);
label->setText("Search Text: ");
search_entry = new QLineEdit(hbox);
QPushButton *button = new QPushButton("Search", hbox);
5. Далее следует виджет QListView
, занимающий основную часть рабочей области окна. После этого для поиска компакт-диска в базе данных вы связываете необходимые сигналы с вашим слотом doSearch
. Строка состояния KMainWindow
становится видимой за счет вставки пустого сообщения:
list = new QListView(vbox, "name", 0L);
list->setRootIsDecorated(TRUE);
list->addColumn("Title");
list->addColumn("Artist");
list->addColumn("Catalogue");
connect(button, SIGNAL(clicked()), this, SLOT(doSearch()));
connect(search_entry, SIGNAL(returnPressed()), this, SLOT(doSearch()));
statusBar()->message("");
setCentralWidget(vbox);
resize(300, 400);
}
6. Слот doSearch
— рабочее завершение приложения. В нем считывается строка поиска и выбираются все соответствующие ей компакт-диски и их дорожки. Логика слота такая же, как в функции doSearch
GNOME/GTK+ в главе 16.
void MainWindow::doSearch() {
cd_search_st *cd_res = new cd_search_st;
current_cd_st *cd = new current_cd_st;
struct current_tracks_st ct;
int res1, i, j, res2, res3;
char track_title[110];
char search_text[100];
char statusBar_text[200];
QListViewItem *cd_item;
strcpy(search_text, search_entry->text());
7. Извлеките id
соответствующих компакт-дисков и обновите строку состояния, чтобы отобразить результаты поиска:
Читать дальше