Основы программирования в 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);
}
На
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
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);
Поделиться:
Популярные книги
Газлайтер. Том 36
36. История Телепата
Фантастика:
городское фэнтези
аниме
попаданцы
6.25
рейтинг книги
Цивилизация статуса (сборник)
Сборники Роберта Шекли
Фантастика:
фэнтези
8.22
рейтинг книги
Вечный Герой (сборник)
Шедевры фантастики
Фантастика:
эпическая фантастика
6.25
рейтинг книги
История Рима
Научно-образовательная:
история
5.00
рейтинг книги
Хватательная рука
2. Мошкиты
Фантастика:
научная фантастика
6.00
рейтинг книги
История героя: Огонь наших душ
2. История героя
Фантастика:
фэнтези
уся
5.00
рейтинг книги
Газлайтер. Том 2
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Рассвет русского царства 3
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Товарищи женщины!
14. Магопокалипсис
Фантастика:
городское фэнтези
постапокалипсис
фэнтези
5.00
рейтинг книги
Опыты (Том 3)
Научно-образовательная:
философия
6.25
рейтинг книги
Месть
Детективы:
классические детективы
5.00
рейтинг книги
Удар. Мир Теллы
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
"Фантастика 2024-68". Компиляция. Книги 1-22
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Блаженны алчущие
1. Сюляпарре
Фантастика:
фэнтези
детективная фантастика
5.25