Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перенос строки из одного tableview в другой после двойного нажатия мышки
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
lexflax
Доброго времени суток.
Имеются 2 компонента tableview.
В первом выгружаются данную по товарам его название и цена.
Нужно при двойном нажатии на любую строку первого tableview чтоб эта строка появлялась во втором.
Соответственно если по очереди выбрали несколько строк то в такой же последовательности одна за другой они должны появится во втором tableview.

В обоих случаях используется модель типа
QSqlQueryModel


код сейчас

#include "sozdinie_rashodnoi_nakladnoi.h"
#include "ui_sozdinie_rashodnoi_nakladnoi.h"
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QDebug>
Sozdinie_Rashodnoi_Nakladnoi::Sozdinie_Rashodnoi_Nakladnoi(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Sozdinie_Rashodnoi_Nakladnoi)
{
    ui->setupUi(this);
    QSqlQueryModel *nomenclatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenclatura->setQuery(query);
    ui->tableView->setModel(nomenclatura);
    connect(this->ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(Copy_pozihion(const QModelIndex &index)));
}

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

QWidget *Sozdinie_Rashodnoi_Nakladnoi::widget()
{
    return this;
}

QString Sozdinie_Rashodnoi_Nakladnoi::windowTitle() const
{
    return QWidget::windowTitle();
}

void Sozdinie_Rashodnoi_Nakladnoi::Copy_pozihion(const QModelIndex &index)

{
QVariant v = this->ui->tableView->model()->data(index, Qt::DisplayRole);

}


на данный момент нашел только как получать данные о выбранной ячейки.

QVariant v = this->ui->tableView->model()->data(index, Qt::DisplayRole);

как их дальше через модель передать в tableview_2?

Теоритического материала много нашел, но программно применить не смог( помогите пожалуйста как это все проделать?
lanz
Вам нужно обновить таблицу в БД, а потом обновить модель. Т.е. физически с помощью SQL переносити запись между таблицами, а потом обновлять модель.
Либо использовать QSqlTableModel уоторая позволяет обновлять данные через setData.
lexflax
а как через QSqlTableModel?
Есть пример по получению и передачи данных?
lexflax
Цитата(lanz @ 9.2.2015, 15:23) *

По ссылке все равно не разобрался(
Попытался сделать так
#include "sozdinie_rashodnoi_nakladnoi.h"
#include "ui_sozdinie_rashodnoi_nakladnoi.h"
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QDebug>
Sozdinie_Rashodnoi_Nakladnoi::Sozdinie_Rashodnoi_Nakladnoi(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Sozdinie_Rashodnoi_Nakladnoi)
{
    ui->setupUi(this);
    QSqlQueryModel *nomenclatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenclatura->setQuery(query);
    ui->tableView->setModel(nomenclatura);

    connect(this->ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(Copy_pozihion(QModelIndex)));
}

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

QWidget *Sozdinie_Rashodnoi_Nakladnoi::widget()
{
    return this;
}

QString Sozdinie_Rashodnoi_Nakladnoi::windowTitle() const
{
    return QWidget::windowTitle();
}

void Sozdinie_Rashodnoi_Nakladnoi::Copy_pozihion(const QModelIndex &index)

{
QVariant v = this->ui->tableView->model()->data(index, Qt::DisplayRole);
ui->tableView_2->model()->setData(index,v);
}


Пытаюсь так во второй tableview передать значение из переменной v, но программа неожиданно завершается на строчке
ui->tableView_2->model()->setData(index,v);


void Sozdinie_Rashodnoi_Nakladnoi::Copy_pozihion(const QModelIndex &index)

{
QVariant v = this->ui->tableView->model()->data(index, Qt::DisplayRole);
ui->tableView_2->model()->setData(index,v);
}


Я пока не могу до конца понять как правильно все сделать, от сайта к сайту перехожу в поисках разных примерах но точного примера пока не могу найти прям как для меня, подскажите почему вылетает программа?
lexflax
Хелп ми плиз)
lanz
Что то по типу вложения:
lexflax
Цитата(lanz @ 17.2.2015, 0:20) *
Что то по типу вложения:


ОГРОМНОЕ СПАСИБО))))!!!

Подскажите еще один момент
В этом коде я получаю значение из столбца name_pozicii, а можно дописать код так чтоб я мог не только брать из таблицы данные, но и вручную вписать их.
Тоесть прям в коде прописать чтоб после данных которые я взял из столбца, рядом стоял столбец который я бы называл kolichestvo и сразу значение присвоить.
И когда дважды бы нажал на строку в первом tableview у меня бы во втором появился столбец который я запрашиваю а рядом после него столбец который я сам описал, который отсутствует в таблицы этой.
QSqlRecord rec = nomenclatura->record( idx.row() );
    strings.append( QString( "%1, %2" ).arg( rec.value("name_pozicii").toString() )
                                       .arg( rec.value("name_pozicii").toString() ) );
    this->model_2->setStringList( strings );


Цитата(lexflax @ 17.2.2015, 17:12) *
Цитата(lanz @ 17.2.2015, 0:20) *
Что то по типу вложения:


ОГРОМНОЕ СПАСИБО))))!!!

Подскажите еще один момент
В этом коде я получаю значение из столбца name_pozicii, а можно дописать код так чтоб я мог не только брать из таблицы данные, но и вручную вписать их.
Тоесть прям в коде прописать чтоб после данных которые я взял из столбца, рядом стоял столбец который я бы называл kolichestvo и сразу значение присвоить.
И когда дважды бы нажал на строку в первом tableview у меня бы во втором появился столбец который я запрашиваю а рядом после него столбец который я сам описал, который отсутствует в таблицы этой.
QSqlRecord rec = nomenclatura->record( idx.row() );
    strings.append( QString( "%1, %2" ).arg( rec.value("name_pozicii").toString() )
                                       .arg( rec.value("name_pozicii").toString() ) );
    this->model_2->setStringList( strings );


И в данном примере все запрашиваемые значение добавляются в один столбец, а можно как то вразные столбцы их помещать, то есть информацию с названием в отдельном столбце, с ценой в другом столбце...
lanz
Переопределите свой класс наследник от QAbstractTableModel, я просто поленился.
http://doc.crossplatform.ru/qt/4.7.x/model...rogramming.html
lexflax
Цитата(lanz @ 17.2.2015, 19:27) *
Переопределите свой класс наследник от QAbstractTableModel, я просто поленился.
http://doc.crossplatform.ru/qt/4.7.x/model...rogramming.html

А как дальше? покажите пожалуйста подобный пример(
lanz
http://doc.crossplatform.ru/qt/4.7.x/model...ting-new-models
Отсюда и ниже.
lexflax
Цитата(lanz @ 21.2.2015, 13:26) *

Блин там столько функций разных как это собрать все в едино? просто нажал на строку она скопировалась аналогично во вторую модель.
lexflax
Цитата(lexflax @ 21.2.2015, 15:46) *
Цитата(lanz @ 21.2.2015, 13:26) *

Блин там столько функций разных как это собрать все в едино? просто нажал на строку она скопировалась аналогично во вторую модель.



Какие конкретно мне функции нужны и как их правильно реализовать?
lanz
Вот здесь
http://doc.qt.io/qt-5/qabstracttablemodel.html#details
под заголовком Subclassing перечисленны те методы, которые надо реализовать.

Вот тут простой пример реализации:
http://doc.qt.digia.com/4.6/itemviews-addressbook.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.