crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Переменные
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  


Цитата(Dimix @ 14.1.2011, 8:43) *
Создал 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 не поддерживает пароли и её содержимое не составит труда прочитать. Что нужно передать из одного класса в другой? Вы пытаетесь сделать окно логина?

Я проверяю наличие базы данных так:
if(!query.exec("SELECT * FROM sometable LIMIT 1")) {
    // базы данных нет или нет такой таблицы
}


А окно логина в первой своей программе делал по здешнему совету как-то так:
main.cpp
#include "login.h"
#include "mainwindow.h"
..
login             loginWindow;
mainwindow  main;

loginWindow.show();

QObject::connect(loginWindow, SIGNAL(GO(const QString &someString)), main, SLOT(GO(const QString &someString)));
// сигнал в логине и слот в main
// Сейчас бы сделал по-другому


Сообщение отредактировал 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  


Ну откуда там взяться содержимому, если Вы туда ничего не передаете? Вот кусок Вашего кода с вызовом второго окна:
QMessageBox::warning(this, warningError, tr("Вы не выбрали учетную запись"));
}else{
PasswordWin* paq = new PasswordWin; // создаем второе окно
paq->show(); // показываем его


Раз уж Вы создали второе окно, то передать в него строку вы можете 2 способами (насколько я, как быдлокодер знаю):
1 - не совсем трушный - прямой записью в публичную переменную класса:
PasswordWin.h
class PasswordWin : public ..........
{
    Q_OBJECT

private:
    // приватные переменные

public:
   // публичные переменные
  QString myVeryNeededString;
};


тогда до вызова paq->show; нужно будет paq->myVeryNeededString = "Строка";

2 - Более трушный, переменную запихнуть в приват, а в паблике создать функцию по работе со строкой:

PasswordWin.h
class PasswordWin : public ..........
{
    Q_OBJECT

private:
    // приватные переменные
   QString myVeryNeededString;

public:
   // публичные переменные
  void setMyVeryNeededString(const &QString);
};


PasswordWin.cpp
..
void PasswordWin::setMyVeryNeededString(const QString &str){
  myVeryNeededString = str;
}
..


тогда перед вызовом paq->show(); нужно будет выполнить paq->setMyVeryNeededString("Строка");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 9:39