Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Gomerd от Ноябрь 01, 2010, 16:23



Название: Выбор элементов QTreeWidget
Отправлено: Gomerd от Ноябрь 01, 2010, 16:23
     Здравствуйте. Имеется проблема: есть некая форма, на которой находиться QTreeWidget. При создании главного окна происходит заполнение из базы данных (Sqlite 3, при чем баз несколько). При этом происходит создание объектов собственных классов.
Код:
// собственный класс
class disciplines
{
private:
    QString shortName;
    QString longName;
    QString prepod;
    QString dolgnost;
    QString data;
    test finTest;
    QTreeWidgetItem dI;

public:

    disciplines( QString sN, QString lN, QString p, QString d, QString dataC, test t, QTreeWidgetItem as )
        : shortName(sN), longName(lN), prepod(p), dolgnost(d), data(dataC), finTest(t), dI(as) {}
     В MainWindow.cpp создается указатель на массив этих объектов, которые создаются при построения дерева. Дальше мне требуется при клике по нужному итему выводить на экран содержимое его полей. Нечто вроде этого:
Код:
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem* item, int column)
{
    if (item == treeItem)
    {
        ui->shortNameEdit->setText(disc[2]->returnShortName());
        ui->LongNameEdit->setText(disc[2]->returnLongName());
        ui->dolgnostEdit->setText(disc[2]->returnDolgnost());
        ui->prepodEdit->setText(disc[2]->returnPrepod());
        ui->dateEdit->setText(disc[2]->returnDate());
    }
}
    Где treeItem - элемент дерева. Проблема в том, что выводит информацию только у последнего созданного элемента(т.к. они создавались в цикле). Может у кого то возникнут идеи, что делать.
З.Ы. извините за косноязычное объяснение


Название: Re: Выбор элементов QTreeWidget
Отправлено: GreenGo от Ноябрь 01, 2010, 19:40
Я так понимаю, тебе для каждого QTreeWidgetItem, надо подставлять данные из объекта типа disciplines.

можно создать контейнер типа:
QMap <QTreeWidgetItem *, disciplines *>
и заполнять его по мере создания классов типа disciplines.
Тогда обработчик клика будет выглядеть так:

Код:
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem* item, int column)
{
// допустим discMap - наш контейнер
     if (discMap.contains(item))
{
        ui->shortNameEdit->setText(discMap [item]->returnShortName());
        ui->LongNameEdit->setText(discMap [item]->returnLongName());
        ui->dolgnostEdit->setText(discMap [item]->returnDolgnost());
        ui->prepodEdit->setText(discMap [item]->returnPrepod());
        ui->dateEdit->setText(discMap [item]->returnDate());
}
}


Название: Re: Выбор элементов QTreeWidget
Отправлено: Gomerd от Ноябрь 01, 2010, 19:48
Спасибо, буду пробовать :)


Название: Re: Выбор элементов QTreeWidget
Отправлено: Gomerd от Ноябрь 02, 2010, 20:20
все работает, спасибо за совет :)