Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление потомка в активный элемент treeView 
:(
    Опции темы
Baton2007
Дата 14.7.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Есть функция добавления категорий
Код

//Добавление категории в модель
void MainWindow::appendixCategory()
{
 parentItem = new QStandardItem();
    parentItem->setText(nameCategory->text());
    model->setItem(model->rowCount(),0, parentItem);
}

потом переопределяю mousePressEvent чтобы получить активный элемент с помощью internalPointer ().
Код

void mousePressEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton) {

            QModelIndex ind;
            parentItem=static_cast<QStandardItem*>(ind.internalPointer());
            if (ind.isValid())
                {
                appendixWWW(parentItem);
            }
        }
       mousePressEvent(event);
    }

Добавляю потомка
Код

// Добавление потомка в категорию
void MainWindow::appendixWWW(QStandardItem*)
{

    childItem = new QStandardItem();
    childItem->setText(linkWWW->text());
    parentItem->setChild(parentItem->rowCount(),childItem);
  
}

Но потомок не добавляет в чем проблема??
PM MAIL   Вверх
chaos
Дата 15.7.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



Цитата(Baton2007 @  14.7.2010,  16:00 Найти цитируемый пост)
потом переопределяю mousePressEvent чтобы получить активный элемент с помощью internalPointer ().

а подключиться к сигналу
Код

void    activated ( const QModelIndex & index )
void    clicked ( const QModelIndex & index )

у модели слабо?
PM WWW   Вверх
Baton2007
Дата 21.7.2010, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Подключился вот так
Код

connect(ui->treeView, SIGNAL(activated(const QModelIndex)), this, SLOT(addChild()));

Но потомок так и не добавляется.
Код

void MainWindow::addChild()
{
    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;
    }
    for (int column = 0; column < model->columnCount(index); ++column)
    {
        QModelIndex child = model->index(0, column, index);
        model->setData(child, QVariant("[No data]"), Qt::EditRole);

        if (!model->headerData(column, Qt::Horizontal).isValid())
        {
            model->setHeaderData(column, Qt::Horizontal, QVariant("[No header]"),Qt::EditRole);
        }
    }
}

Слот не вызывается

Это сообщение отредактировал(а) Baton2007 - 21.7.2010, 18:39
PM MAIL   Вверх
_GRIN_
Дата 22.7.2010, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Baton2007, извини, всю суть темы не уяснил, но...

Код

connect(ui->treeView, SIGNAL(activated(const QModelIndex)), this, SLOT(addChild()));


тут не тока слот не вызовется - тут и коннекта не будет (проверь возвращаемое значение connect() и глянь лог) - т.к. сигнатуры функций не совпадают. у сигнала (читай указателя на функцию) есть входной параметр const QModelIndex, а у слота (читай вызываемой функции) - входных параметров нет

переопредели слот, что бы сигнатура совпадал - входной параметр в теле слота можно и не использывать

просто напиши 

Код

void MainWindow::addChild(const QModelIndex&)

ну и в хидере соответственно поменяй, остальное тело слота не трогай.

Да и коннект надо будет изменить

Код

connect(ui->treeView, SIGNAL(activated(const QModelIndex&)), this, SLOT(addChild(const QModelIndex&)));



Это сообщение отредактировал(а) _GRIN_ - 22.7.2010, 00:55


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Baton2007
Дата 22.7.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Все переопределил но результат тот же!
.cpp
Код

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "addfile.h"
#include "addModel.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model=new QStandardItemModel(0,4);

   ui->treeView->setModel(model);
   ui->treeView->setSelectionMode(QAbstractItemView::SingleSelection);
   ui->treeView->setSelectionBehavior(QAbstractItemView::SelectRows);


    QDomDocument docDoc;
    QFile file("BDwww.xml");
     if (!file.open(QIODevice::ReadOnly))
    {

     if (!docDoc.setContent(&file)) {
         QDomElement domElemNode= docDoc.documentElement();
         readFile(domElemNode);
     }
         file.close();

     }

 }



MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

// Создание формы для добавления ссылки

void MainWindow::on_pushButton_clicked()
{
    QFrame *messAdd_www = new QFrame;
    messAdd_www->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
    messAdd_www->setGeometry(QRect(QPoint(QCursor::pos().x(), QCursor::pos().y()), QSize(250, 250)));
    messAdd_www->setFrameStyle(QFrame::WinPanel | QFrame::Raised);
    messAdd_www->setLineWidth(2);
    closeButton= new QPushButton ("Closse",messAdd_www);
    closeButton->setGeometry(120,180,90,30);
    addButton=new QPushButton(tr("Add"),messAdd_www);
    addButton->setGeometry(20,180,90,30);
    linkWWW= new QLineEdit(messAdd_www);
    messAdd_www->show();
connect(ui->treeView, SIGNAL(activated(const QModelIndex&)), this, SLOT(addChild(const QModelIndex&)));
connect(addButton,SIGNAL(clicked()),messAdd_www,SLOT(close()));
connect(closeButton,SIGNAL(clicked()),messAdd_www,SLOT(close()));
}

// Создание формы для добавления категории
void MainWindow::on_pushButton_2_clicked()
{
 QFrame *categoryAdd = new QFrame;
 categoryAdd->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
 categoryAdd->setGeometry(QRect(QPoint(QCursor::pos().x(), QCursor::pos().y()), QSize(250, 250)));
 categoryAdd->setFrameStyle(QFrame::WinPanel | QFrame::Raised);
 categoryAdd->setLineWidth(2);
 closeCategory= new QPushButton ("Closse",categoryAdd);
 closeCategory->setGeometry(120,180,90,30);
 addCategory=new QPushButton(tr("Add"),categoryAdd);
 addCategory->setGeometry(20,180,90,30);
 nameCategory= new QLineEdit(categoryAdd);
 categoryAdd->show();


  connect(addCategory,SIGNAL(clicked()),this,SLOT(appendixCategory()));
 connect(addCategory,SIGNAL(clicked()),this,SLOT(addInFile()));
 connect(addCategory,SIGNAL(clicked()),categoryAdd,SLOT(close()));
 connect(closeCategory,SIGNAL(clicked()),categoryAdd,SLOT(close()));


}

void MainWindow::on_tabWidget_currentChanged(QWidget* )
{

}



.h
Код

#define ADDMODEL_H
#include "mainwindow.h"

// Добавление потомка в категорию
void MainWindow::appendixWWW(const QModelIndex&)
{
qDebug()<<"Slot activ";
    childItem = new QStandardItem();
    childItem->setText(linkWWW->text());
    parentItem->setChild(0,childItem);

}
//Добавление категории в модель
void MainWindow::appendixCategory()
{

    parentItem = new QStandardItem();
    parentItem->setText(nameCategory->text());
    model->setItem(model->rowCount(),0, parentItem);
}
// Второй вариант добавления потомка
void MainWindow::addChild(const QModelIndex&)
{
    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;
    }
    for (int column = 0; column < model->columnCount(index); ++column)
    {
        QModelIndex child = model->index(0, column, index);
        model->setData(child, QVariant("[No data]"), Qt::EditRole);

        if (!model->headerData(column, Qt::Horizontal).isValid())
        {
            model->setHeaderData(column, Qt::Horizontal, QVariant("[No header]"),Qt::EditRole);
        }
    }
}

#endif // ADDMODEL_H



Это сообщение отредактировал(а) Baton2007 - 22.7.2010, 17:54
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1250 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.