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

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

Жанры

Основы программирования в 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);

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

Газлайтер. Том 40

Володин Григорий Григорьевич
40. История Телепата
Фантастика:
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 40

Изменяющий-Механик. Компиляция. Книги 1-18

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18

Наномашины, демоненок! Том 3

Новиков Николай Васильевич
3. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, демоненок! Том 3

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Дважды одаренный. Том V

Тарс Элиан
5. Дважды одаренный
Фантастика:
аниме
альтернативная история
городское фэнтези
5.00
рейтинг книги
Дважды одаренный. Том V

Золушка вне правил

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.83
рейтинг книги
Золушка вне правил

Прорыв

Круз Андрей
3. Эпоха мертвых
Фантастика:
боевая фантастика
9.33
рейтинг книги
Прорыв

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

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

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Последний реанорец. Том III

Павлов Вел
2. Высшая Речь
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Последний реанорец. Том III

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Родословная. Том 1

Ткачев Андрей Юрьевич
1. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Родословная. Том 1

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8