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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Добавление потомка в активный элемент treeView  (Прочитано 5624 раз)
rezor
Гость
« : Июль 09, 2010, 16:07 »

Есть функция добавления категорий
Код:
void MainWindow::appendixCategory()
{
    parentItem = new QStandardItem();
    parentItem->setText(nameCategory->text());
    model->setItem(model->rowCount(),0, parentItem);
}
Как можно определить категорию которую пользователь выделил левой кнопкой мыши???
Как добавить в нее потомка???
Пробовал писать просто добавление потомка ,но не работает.
Код:
void MainWindow::appendixWWW()
{
    childItem = new QStandardItem();
    childItem->setText(linkWWW->text());
    parentItem->setChild(parentItem->rowCount(),childItem);
  
}
« Последнее редактирование: Июль 09, 2010, 16:18 от rezor » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Июль 09, 2010, 21:15 »

Посмотри в ассистенте Simple Tree Model Example, сразу все станет понятно.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
rezor
Гость
« Ответ #2 : Июль 11, 2010, 16:13 »

Ну посмотрел, добавление категории работает, потом переопределяю mousePressEvent чтобы получить активный элемент с помощью indexAt().
А вот добавить потомка к нему так и не получается.
Код:
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {

        QModelIndex ind = ui->treeView->indexAt(event->pos());
        if (ind.isValid())
            {
            appendixWWW();
        }
    }
    MainWindow::mousePressEvent(event);
}

//Добавление категории в модель
void MainWindow::appendixCategory()
{
 parentItem = new QStandardItem();
    parentItem->setText(nameCategory->text());
    model->setItem(model->rowCount(),0, parentItem);
}
// Добавление потомка в категорию
void MainWindow::appendixWWW()
{
    childItem = new QStandardItem();
    childItem->setText(linkWWW->text());
    parentItem->setChild(parentItem->rowCount(),childItem);
  
}
В appendixWWW() надо передать  ind  активного элемента , но как его там использовать ведь по типу он не подходит к setChild().
« Последнее редактирование: Июль 11, 2010, 16:30 от rezor » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #3 : Июль 11, 2010, 23:09 »

Цитировать
void * QModelIndex::internalPointer () const
Returns a void * pointer used by the model to associate the index with the internal data structure.

See also QAbstractItemModel::createIndex().
Приводишь указатель void* к QStandardItem* и юзаешь как parentItem.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
rezor
Гость
« Ответ #4 : Июль 23, 2010, 16:33 »

Почему при добавлении потомка последующий затирает предыдущего???

Код:
void MainWindow::addChild()
{
    qDebug()<<"Slot activ";
    QModelIndex index = ui->treeView->selectionModel()->currentIndex();
    QAbstractItemModel *model = ui->treeView->model();

    if (model->columnCount(index) == 0) {
        if (!model->insertColumn(0, index))
        {
            return;
        }
    }

    if (!model->insertRow(0, index))
    {
        return;
    }

int column = ui->treeView->selectionModel()->currentIndex().column();
int row=ui->treeView->selectionModel()->currentIndex().row();

    model->setData(model->index(row, column, index), QVariant(linkWWW->text()), Qt::EditRole);
    model->insertColumn(column +1, index);
    model->setData(model->index(row, column + 1, index), QVariant(nameWWW->text()), Qt::EditRole);
    model->insertColumn(column +2, index);
    model->setData(model->index(row, column + 2, index), QVariant(tegWWW->text()), Qt::EditRole);
    model->insertColumn(column +3, index);
    model->setData(model->index(row, column + 3, index), QVariant(tegWWW->text()), Qt::EditRole);

}
void MainWindow::insertRow()
{
    QModelIndex index = ui->treeView->selectionModel()->currentIndex();
    QAbstractItemModel *model = ui->treeView->model();

    if (!model->insertRow(index.row()+1, index.parent()))
        return;



    for (int column = 0; column < model->columnCount(index.parent()); ++column) {
        QModelIndex child = model->index(index.row()+1, column, index.parent());
        model->setData(child, QVariant("[No data]"), Qt::EditRole);
    }
}
« Последнее редактирование: Август 01, 2010, 17:03 от rezor » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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