crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Перенос строки из одного tableview в другой после двойного нажатия мышки, перенос данных из одного tableview в другой
lexflax
  опции профиля:
сообщение 8.2.2015, 15:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток.
Имеются 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
  опции профиля:
сообщение 8.2.2015, 17:46
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Вам нужно обновить таблицу в БД, а потом обновить модель. Т.е. физически с помощью SQL переносити запись между таблицами, а потом обновлять модель.
Либо использовать QSqlTableModel уоторая позволяет обновлять данные через setData.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lexflax
  опции профиля:
сообщение 9.2.2015, 14:41
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


а как через QSqlTableModel?
Есть пример по получению и передачи данных?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 9.2.2015, 15:23
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


http://doc.crossplatform.ru/qt/4.6.x/sql-model.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lexflax
  опции профиля:
сообщение 14.2.2015, 18:17
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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
  опции профиля:
сообщение 15.2.2015, 13:41
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Хелп ми плиз)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 17.2.2015, 0:20
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Что то по типу вложения:
Прикрепленные файлы
Прикрепленный файл  scratch2.zip ( 2.17 килобайт ) Кол-во скачиваний: 134
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lexflax
  опции профиля:
сообщение 17.2.2015, 17:20
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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
  опции профиля:
сообщение 17.2.2015, 19:27
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Переопределите свой класс наследник от QAbstractTableModel, я просто поленился.
http://doc.crossplatform.ru/qt/4.7.x/model...rogramming.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lexflax
  опции профиля:
сообщение 20.2.2015, 17:00
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 17.2.2015, 19:27) *
Переопределите свой класс наследник от QAbstractTableModel, я просто поленился.
http://doc.crossplatform.ru/qt/4.7.x/model...rogramming.html

А как дальше? покажите пожалуйста подобный пример(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.10.2020, 8:48