Russian Qt Forum
Ноябрь 24, 2024, 21:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выбор элементов QTreeWidget  (Прочитано 4705 раз)
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 - элемент дерева. Проблема в том, что выводит информацию только у последнего созданного элемента(т.к. они создавались в цикле). Может у кого то возникнут идеи, что делать.
З.Ы. извините за косноязычное объяснение
Записан
GreenGo
Гость
« Ответ #1 : Ноябрь 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());
}
}
Записан
Gomerd
Гость
« Ответ #2 : Ноябрь 01, 2010, 19:48 »

Спасибо, буду пробовать Улыбающийся
Записан
Gomerd
Гость
« Ответ #3 : Ноябрь 02, 2010, 20:20 »

все работает, спасибо за совет Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 21.