Тема: QT Подайте ідею як правильно "зв'язати" два comboBox
Є в мене два comboBox
перший це "категорія"
другий це "підкатегорія"
Інформацію вони черпають з БД там є таблиці з аналогічними назвами які зв'язані зовнішнім ключем, зв'язок "1 до багатьох"
І так, як зробити так що коли користувач вибере категорію в comboBox категорія то в comboBox з підкатегорією появилася відповідна інформація, напевно потрібно при події "поза фокусом" зразу занесення інформації з БД в comboBox підкатегорія
я зробив функцію linkComboBox
перший параметр це категорія
другий підкатегорія
І тут є проблема, нижче поясню яка
template <typename Category,typename Subcategory>
void linkComboBox(Category *comboBoxCategory, Subcategory *comboBoxSubcategory)
{
comboBoxCategory->addItems(listCategory());
QObject::connect(
comboBoxCategory,
SIGNAL(FocusOut()),
comboBoxCategory,
SLOT(didChoice())
);
}
didChoice - обробник події поза фокусом (не знаю чи правильно назвав, хотів назвати "зробленийВибір")
void MyComboBox::didChoice()
{
if( this->findText( this->currentText() ) == -1 )
{
/*
If the text is not in ComboBox then add this text
*/
this->addItem( this->currentText() );
}
else
{
/*
Find foreign key and insert list text
*/
listSubcategory( this->currentText() );
}
}
Ну і проблемна функція
void listSubcategory( QString Text )
{
QStringList list;
/*
If was insert a new entry then Subcategory will be empty
*/
if(Text == "")
return;
int _id_ = -1;
QSqlQuery *query = new QSqlQuery;
query->prepare("SELECT _id_ FROM category WHERE _name_=:_name_");
query->bindValue(":_name_", Text);
query->exec();
query->next();
_id_ = query->value("_id_").toInt();
query->prepare("SELECT _name_ FROM subcategory WHERE _categoryId_=:_id_");
query->bindValue(":_id_", _id_);
query->exec();
while(query->next())
list << query->value("_name_").toString();
delete query;
//? ui->comboBoxSubcategory->addItems( list );
}
А тепер про проблему, в кінці listSubcategory я закоментував проблемний рядок.
Справа в тому що я не знаю як listSubcategory передати Subcategory *comboBoxSubcategory, цю функцію викликає функція як обробляє подію (тобто didChoice) а вона вже немає об'єкта comboBoxSubcategory
Як передати об'єкт comboBoxSubcategory в listSubcategory ?