Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
res1, search_text); statusBar()->message(statusBar_text); i = 0; list->clear();8. Для каждого
idQListView 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. Слот
AddCdaddcd_actionvoid MainWindow::AddCd() AddCdDialog* dialog = new AddCdDialog(this); dialog->show();}Результат показан на рис. 17.13.
AddCdDialog
Для вставки сведений о компакт-диске в базу данных вам нужно включить в программу диалоговое окно с полями, необходимыми для ввода информации.
1. Введите следующий программный код в файл AddCdDialog.h. Имейте в виду, что класс
AddCdDialogKDialogBase#include <kde/kdialogbase.h>#include <qlineedit.h>class AddCdDialog : public KDialogBase { Q_OBJECTpublic: AddCdDialog(QWidget* parent);private: QLineEdit* artist_entry, *title_entry, *catalogue_entry;public slots: void okClicked();};2. Далее следует файл AddCdDialog.cpp, в котором в слоте
okClickedadd_cd#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
Вы, конечно же, не сможете запрашивать базу данных без предварительной регистрации, поэтому вам необходимо простое диалоговое окно для ввода имени пользователя и пароля. Назовите этот класс
LogonDialog1. Начнем с заголовочного файла. Введите приведенный далее программный код и назовите файл LogonDialog.h. Обратите внимание на то, что для разнообразия этот класс описан в данном случае как потомок класса
QDialogKDialogBase#include <qdialog.h>#include <qlineedit.h>class LogonDialog : public QDialog {