Russian Qt Forum

Qt => Общие вопросы => Тема начата: kaw от Март 12, 2009, 12:42



Название: Проблема передачи данных из одного класса в другой
Отправлено: kaw от Март 12, 2009, 12:42
Из первого класа являющимся диалогом вызываю другой диалог
посылая данные в переменную, но переменная остаеться пустой  ???
Код:
void SchetWin::on_pushButton_2_clicked()
{
int sel=listWidget->currentRow();
if (sel > -1)
{
SchetEdit *schetEdit = new SchetEdit(0);
schetEdit->setModal(true);
schetEdit->setWindowTitle(tr("Редактирование счета"));
schetEdit->show();
schetEdit->comboBox->setVisible(false);
schetEdit->label_2->setVisible(false);
schetEdit->name = listWidget->item(sel)->text();
}
}
класс другой
Код:
#include "schetedit.h"

// place your code here
SchetEdit::SchetEdit(QWidget *parent):QDialog(parent)
{
setupUi(this);
shows();
}

void SchetEdit::shows()
{
if (name > "")
{
QString sql ="SELECT sh_id,sh_name,defaults FROM schet WHERE sh_name='"+name+"'";
query.exec(sql);
query.next();
lineEdit->setText(query.value(1).toString());
checkBox->setChecked(query.value(2).toBool());
id = query.value(0).toString();
}
}

поможите плиз


Название: Re: Проблема передачи данных из одного класса в другой
Отправлено: Rcus от Март 12, 2009, 12:50
/*sigh && cry*/
метод shows() вызывается из конструктора до установки name, может быть проще будет передавать его параметром конструктора. Инкапсуляция это не просто красивое слово, но еще и довольно интересная вещь, рекомендую.


Название: Re: Проблема передачи данных из одного класса в другой
Отправлено: kaw от Март 12, 2009, 13:14
может быть проще будет передавать его параметром конструктора.
интересно, а по подробнее. Не просто же так я в разделе для новичков  ;D
Цитировать
Инкапсуляция это не просто красивое слово, но еще и довольно интересная вещь, рекомендую.
Это не красивое слово, а страшное ругательство  ;D ;D ;D


Название: Re: Проблема передачи данных из одного класса в другой
Отправлено: kaw от Март 12, 2009, 13:23
да я еще пробывал данную переменую в первом класе прописать и как бы брать ее значения, но опять же она оказывалась пустой  >:(


Название: Re: Проблема передачи данных из одного класса в другой
Отправлено: Rcus от Март 12, 2009, 15:47
я бы побольше переделал будь это мой код, но и так должно работать
Код
C++ (Qt)
void SchetWin::on_pushButton_2_clicked()
{
int sel=listWidget->currentRow();
if (sel < 0 )
return;
SchetEdit *schetEdit = new SchetEdit(listWidget->item(sel)->text(), 0);
schetEdit->setModal(true);
schetEdit->setWindowTitle(tr("Редактирование счета"));
schetEdit->show();
schetEdit->comboBox->setVisible(false);
schetEdit->label_2->setVisible(false);
}
/*--------*/
#include "schetedit.h"
 
// place your code here
SchetEdit::SchetEdit(const QString &invoiceName, QWidget *parent):QDialog(parent)
{
setupUi(this);
shows(invoiceName);
}
 
void SchetEdit::shows(const QString &invoiceName)
{
if (invoiceName.isEmpty())
return;
query.prepare("SELECT sh_id,sh_name,defaults FROM schet WHERE sh_name=:name");
query.bindValue(":name", invoiceName);
if (!query.first())
return;
lineEdit->setText(query.value(1).toString());
checkBox->setChecked(query.value(2).toBool());
id = query.value(0).toString();
}
 
 


Название: Re: Проблема передачи данных из одного класса в другой
Отправлено: kaw от Март 12, 2009, 18:44
спасибо за пример! Щас попробуем!


Название: Re: Проблема передачи данных из одного класса в другой
Отправлено: lit-uriy от Март 12, 2009, 23:10
>>Инкапсуляция это не просто красивое слово, но еще и довольно интересная вещь, рекомендую.
А в багланде это не принято, там все объекты из класса поумолчанию видны :)