Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 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 {

 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 <qpushbutton.h>

#include <qlayout.h>

#include <qlabel.h>

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

 QDialog(parent, name) {

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

 grid->addWidget(new QLabel("Username", this, "usernamelabel"), 0, 0, 0);

 grid->addWidget(new QLabel("Password", this, "passwordlabel"), 1, 0, 0);

 username_entry = new QLineEdit(this, "username entry");

 password_entry = new QLineEdit(this, "password_entry");

 password_entry->setEchoMode(QLineEdit::Password);

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

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

 QPushButton* button = new QPushButton("Ok", this, "button");

 grid->addWidget(button, 2, 1, Qt::AlignRight);

 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.cpp

Единственный оставшийся программный код — функция

main
, которую вы помещаете в отдельный файл main.cpp.

1. В файле main.cpp вы открываете окно

LogonDialog
и получаете успешную регистрацию из функции
database_start
. Если регистрация оказалась неудачной, вы выводите окно
QMessageBox
или при попытке закрыть
LogonDialog
просите у пользователя подтверждения его выхода.

#include "MainWindow.h"

#include "app_mysql.h"

#include "LogonDialog.h"

#include <kde/kapp.h>

#include <qmessagebox.h>

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);

Поделиться:
Популярные книги

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Академия проклятий. Книги 1 - 7

Звездная Елена
Академия Проклятий
Фантастика:
фэнтези
8.98
рейтинг книги
Академия проклятий. Книги 1 - 7

Афганский рубеж 2

Дорин Михаил
2. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Афганский рубеж 2

Отверженный. Дилогия

Опсокополос Алексис
Отверженный
Фантастика:
фэнтези
7.51
рейтинг книги
Отверженный. Дилогия

Моя (не) на одну ночь. Бесконтрактная любовь

Тоцка Тала
4. Шикарные Аверины
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Моя (не) на одну ночь. Бесконтрактная любовь

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Херсон Византийский

Чернобровкин Александр Васильевич
1. Вечный капитан
Приключения:
морские приключения
7.74
рейтинг книги
Херсон Византийский

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Тринадцатый III

NikL
3. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый III

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Жена на четверых

Кожина Ксения
Любовные романы:
любовно-фантастические романы
эро литература
5.60
рейтинг книги
Жена на четверых