Переменные |
Здравствуйте, гость ( Вход | Регистрация )
Переменные |
Dimix |
14.1.2011, 6:43
Сообщение
#1
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Создал GUI приложение Qt с названием login
Создал Класс формы Qt Desinger с названием in В login есть переменные типа QString Пытаюсь присвоить данные полученные в QString форме in Но QString у меня почемуто ничего не содержит Debug показывает что QString данные получает а когда пытается передать он очищается. Как решить эту проблемку? |
|
|
Dovgon |
14.1.2011, 7:33
Сообщение
#2
|
Студент Группа: Участник Сообщений: 92 Регистрация: 5.1.2011 Пользователь №: 2325 Спасибо сказали: 3 раз(а) Репутация: 0 |
покажи исходники, так тебе не кто не поможет.
|
|
|
silver47 |
14.1.2011, 8:17
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Создал GUI приложение Qt с названием login Создал Класс формы Qt Desinger с названием in В login есть переменные типа QString Пытаюсь присвоить данные полученные в QString форме in Но QString у меня почемуто ничего не содержит Debug показывает что QString данные получает а когда пытается передать он очищается. Как решить эту проблемку? Как я понимаю, login и in разные классы. Делай или через сигналы слоты, тогда классы создаются в main или вызывай конструктор одного в другом... тогда сможешь обращаться к его публичным переменным. А так покажи код.. и скажи чего хочешь. |
|
|
Dimix |
14.1.2011, 14:58
Сообщение
#4
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Смотреть getUserData();
Раскрывающийся текст #include "loginwin.h" #include "ui_loginwin.h" #include "passwordwin.h" #include "ui_passwordwin.h" #include "create.h" #include "ui_create.h" loginWin::loginWin(QWidget *parent) : QDialog(parent), ui(new Ui::loginWin) { ui->setupUi(this); loadUser(); warningError="Ошибка"; criticalError="Критическая ошибка"; userErrorConnection="Ошибка осуществления соединения с пользовательской базой данных"; userNotFiledb="Ошибка файл пользовательской базы данных не найден"; mainErrorConnection="Ошибка осуществления соединения с главной базой данных"; mainNotFiledb="Ошибка файл главной базы данных не найден"; getUserData(); } loginWin::~loginWin() { delete ui; } void loginWin::getUserData() { QFile file; if(file.exists("bin\\"+ui->cboAccount->itemText(ui->cboAccount->currentIndex()))){ if(file.exists("profile\\account")){ QSqlDatabase maindb = QSqlDatabase::addDatabase("QSQLITE"); maindb.setHostName("localhost"); maindb.setDatabaseName("profile\\account"); if(!maindb.open("user", "password")){ maindb.lastError().text(); QSqlDatabase::removeDatabase("QSQLITE"); QMessageBox::warning(this, warningError, mainErrorConnection); }else{ QSqlQueryModel model; model.setQuery("SELECT * FROM user WHERE name = '"+ui->cboAccount->itemText(ui->cboAccount->currentIndex())+"';"); for(int i = 0; i < model.rowCount(); ++i){ userCurrency=model.record(i).value("currency").toString(); userName=model.record(i).value("name").toString(); userPassword=model.record(i).value("password").toString(); userPass=model.record(i).value("pass").toString(); userPin=model.record(i).value("pin").toString(); userSound=model.record(i).value("sound").toString(); } model.clear(); maindb.close(); QSqlDatabase::removeDatabase("QSQLITE"); }; }else{ QMessageBox::critical(this, criticalError, mainNotFiledb); }; }else{ QMessageBox::critical(this, criticalError, userNotFiledb); }; } void loginWin::on_cboAccount_currentIndexChanged(QString ) { getUserData(); } void loginWin::on_buttonLogin_clicked() { if(ui->cboAccount->currentIndex()==0){ QMessageBox::warning(this, warningError, tr("Вы не выбрали учетную запись")); }else{ PasswordWin* paq = new PasswordWin; paq->show(); close(); }; } Раскрывающийся текст #include "passwordwin.h" #include "ui_passwordwin.h" #include "loginwin.h" #include "ui_loginwin.h" PasswordWin::PasswordWin(QWidget *parent) : QDialog(parent), ui(new Ui::PasswordWin) { ui->setupUi(this); loginWin* log = new loginWin; ui->labelMore->setText(tr("<b><center>Для доступа к учетной записи")+log->userName+tr("</center></b>"));//возникшая проблема здесь } |
|
|
silver47 |
14.1.2011, 18:20
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Тяжело понять. SQLite не поддерживает пароли и её содержимое не составит труда прочитать. Что нужно передать из одного класса в другой? Вы пытаетесь сделать окно логина?
Я проверяю наличие базы данных так:
А окно логина в первой своей программе делал по здешнему совету как-то так: main.cpp
Сообщение отредактировал silver47 - 14.1.2011, 18:31 |
|
|
Dimix |
14.1.2011, 18:44
Сообщение
#6
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я раньше писал программы все одним полотном и несталкивался с подобной проблеммой так как мог получить все что понадобится. Но проблемма в том что когда настало время модернизировать ранне созданные проэкты это оказалось весьма непросто так как код имеет более чем 5000 строк я подумал что это неудобно.
Начал куралесить создавая каждое окно отдельными файлами и вот столкнулся с проблеммой что при попытке обращения к переменной вызовом ее в другом файле она оказывается пустой. Пример создал файл Базы данных заполнил его именами загрузил список имен в combobox и при выборе имени у меня выполняется получение данных для текущего имени его пароль и т.п. нажимаю кнопочку Вход появляется другое окно и говорит введите пароль ввожу пароль и сравниваю его с полученным при выборе имя паролем но проверка не проходит так как переменная хранящяя пароль на этот момент пустая. |
|
|
silver47 |
14.1.2011, 19:09
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Ну откуда там взяться содержимому, если Вы туда ничего не передаете? Вот кусок Вашего кода с вызовом второго окна:
Раз уж Вы создали второе окно, то передать в него строку вы можете 2 способами (насколько я, как быдлокодер знаю): 1 - не совсем трушный - прямой записью в публичную переменную класса: PasswordWin.h
тогда до вызова paq->show; нужно будет paq->myVeryNeededString = "Строка"; 2 - Более трушный, переменную запихнуть в приват, а в паблике создать функцию по работе со строкой: PasswordWin.h
PasswordWin.cpp
тогда перед вызовом paq->show(); нужно будет выполнить paq->setMyVeryNeededString("Строка"); |
|
|
Текстовая версия | Сейчас: 7.11.2024, 3:02 |