Название: Добавление потомка в активный элемент treeView
Отправлено: 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); }
Название: Re: Добавление потомка в активный элемент treeView
Отправлено: kibsoft от Июль 09, 2010, 21:15
Посмотри в ассистенте Simple Tree Model Example, сразу все станет понятно.
Название: Re: Добавление потомка в активный элемент treeView
Отправлено: rezor от Июль 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().
Название: Re: Добавление потомка в активный элемент treeView
Отправлено: kibsoft от Июль 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.
Название: Re: Добавление потомка в активный элемент treeView
Отправлено: rezor от Июль 23, 2010, 16:33
Почему при добавлении потомка последующий затирает предыдущего??? (http://s60.radikal.ru/i168/1008/92/dc2dcebb9049t.jpg) (http://radikal.ru/F/s60.radikal.ru/i168/1008/92/dc2dcebb9049.png.html) 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); } }
|