Читаем Основы программирования в Linux полностью

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

void MainWindow::AddCd

 AddCdDialog* dialog = new AddCdDialog(this);

 dialog->show;

}

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

AddCdDialog

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

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

#include

#include


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

#include

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

#include


class LogonDialog : public QDialog {

 Q_OBJECT

public:

 LogonDialog(QWidget* parent = 0, const char *name = 0);

 QString getUsername;

QString getPassword;

private:

 QLineEdit *username_entry, *password_entry;

};

2. У вас есть более удобные методы для имени пользователя и пароля, чем инкапсуляция в файле LogonDialog.cpp вызова database_start. Далее приведен файл LogonDialog.cpp:

#include "LogonDialog.h"

#include "appmysql.h"

#include

#include

#include


LogonDialog::LogonDialog(QWidget *parent, const char *name):

 QDialog(parent, name) {

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже