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

на главную

Жанры

Основы программирования в 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. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Я царь. Книга XXVIII

Дрейк Сириус
28. Дорогой барон!
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Я царь. Книга XXVIII

Кодекс Охотника. Книга XXXII

Винокуров Юрий
32. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXII

Беглый

Шимохин Дмитрий
2. Подкидыш [Шимохин]
Приключения:
прочие приключения
5.00
рейтинг книги
Беглый

#Бояръ-Аниме. Газлайтер. Том 37

Володин Григорий Григорьевич
37. История Телепата
Фантастика:
фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 37

Звездная Кровь. Изгой VI

Елисеев Алексей Станиславович
6. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
технофэнтези
рпг
попаданцы
5.00
рейтинг книги
Звездная Кровь. Изгой VI

Сколько стоит любовь

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.22
рейтинг книги
Сколько стоит любовь

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

Я - злодейка в дораме. Сезон второй

Вострова Екатерина
2. Выжить в дораме
Фантастика:
уся
фэнтези
сянься
попаданцы
5.00
рейтинг книги
Я - злодейка в дораме. Сезон второй

Черный Маг Императора 18

Герда Александр
18. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 18

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Законы Рода. Том 10

Мельник Андрей
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

На границе империй. Том 10. Часть 10

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 10