Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 313 314 315 316 317 318 319 320 321 ... 324

  res1, search_text);

 statusBar()->message(statusBar_text);

 i = 0;

 list->clear();

8. Для каждого id извлеките сведения о компакт-диске в виджет QListView и информацию обо всех дорожках данного CD:

 while (i < res1) {

  res2 = get_cd(cd_res->cd_id[i], cd);

  cd_item = new QListViewItem(list, cd->title, cd->artist_name,

   cd->catalogue);

  res3 = get_cd_tracks(cd_res->cd_id[i++], &ct);

  j = 0;

  /* Заполните дерево дорожками текущего компакт-диска */

  while (j < res3) {

   sprintf(track_title, " Track %d. ", j+1);

   strcat(track_title, ct.track[j++]);

   new QListViewItem(cd_item, track_title);

  }

 }

}

Рис. 17.13

9. Слот AddCd вызывается, когда активизирован пункт меню или кнопка панели инструментов addcd_action:

void MainWindow::AddCd()

 AddCdDialog* dialog = new AddCdDialog(this);

 dialog->show();

}

Результат показан на рис. 17.13.

AddCdDialog

Для вставки сведений о компакт-диске в базу данных вам нужно включить в программу диалоговое окно с полями, необходимыми для ввода информации.

1. Введите следующий программный код в файл AddCdDialog.h. Имейте в виду, что класс AddCdDialog — потомок KDialogBase, виджета диалогового окна в среде KDE.

#include <kde/kdialogbase.h>

#include <qlineedit.h>

class AddCdDialog : public KDialogBase {

 Q_OBJECT

public:

 AddCdDialog(QWidget* parent);

private:

 QLineEdit* artist_entry, *title_entry, *catalogue_entry;

public slots:

 void okClicked();

};

2. Далее следует файл AddCdDialog.cpp, в котором в слоте okClicked вызывается функция add_cd из интерфейса MySQL:

#include "AddCdDialog.h"

#include "app_mysql.h"

#include <qlayout.h>

#include <qlabel.h>

AddCdDialog::AddCdDialog(QWidget* parent)

 : KDialogBase(parent, "AddCD", false, "Add CD",

 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, true) {

 QWidget *widget = new QWidget(this);

 setMainWidget(widget);

 QGridLayout *grid = new QGridLayout(widget, 3, 2, 10, 5, "grid");

 grid->addWidget(new QLabel("Artist", widget, "artistlabel"), 0, 0, 0);

 grid->addWidget(new QLabel("Title", widget, "titlelabel"), 1, 0, 0);

 grid->addwidget(new QLabel("Catalogue", widget, "cataloguelabel"), 2, 0, 0);

 artist_entry = new QLineEdit(widget, "artist_entry");

 title_entry = new QLineEdit(widget, "titleentry");

 catalogue_entry = new QLineEdit(widget, "catalogue_entry");

 grid->addWidget(artist_entry, 0, 1, 0);

 grid->addWidget(title_entry, 1, 1, 0);

 grid->addWidget(catalogue_entry, 2, 1, 0);

 connect(this, SIGNAL(okClicked()), this, SLOT(okClicked()));

}

void AddCdDialog::okClicked() {

 char artist[200];

 char title[200];

 char catalogue[200];

 int cd_id = 0;

 strcpy(artist, artist_entry->text());

 strcpy(title, title_entry->text());

 strcpy(catalogue, catalogue_entry->text());

 add_cd(artist, title, catalogue, &cd_id);

}

На рис. 17.14 показано работающее диалоговое окно AddCdDialog.

Рис. 17.14 

LogonDialog

Вы, конечно же, не сможете запрашивать базу данных без предварительной регистрации, поэтому вам необходимо простое диалоговое окно для ввода имени пользователя и пароля. Назовите этот класс LogonDialog. (Да, еще один пример остроумного и образного имени!)

1. Начнем с заголовочного файла. Введите приведенный далее программный код и назовите файл LogonDialog.h. Обратите внимание на то, что для разнообразия этот класс описан в данном случае как потомок класса QDialog, а не KDialogBase.

#include <qdialog.h>

#include <qlineedit.h>

class LogonDialog : public QDialog {

1 ... 313 314 315 316 317 318 319 320 321 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий