Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Програмирование платформенно-независимых систем > Trolltech Qt
Перезагрузить страницу перенос строки по двойному клику из одного tableview в другой
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию перенос строки по двойному клику из одного tableview в другой - 06.02.2015, 16:44

Доброго времени суток.
Имеются 2 компонента tableview.
В первом выгружаются данную по товарам его название и цена.
Нужно при двойном нажатии на любую строку первого tableview чтоб эта строка появлялась во втором.
Соответственно если по очереди выбрали несколько строк то в такой же последовательности одна за другой они должны появится во втором tableview.

Помогите в решении данной проблемы, может кто уже делал подобное?
Ответить с цитированием
  (#2 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,398
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 06.02.2015, 19:13

Сигнал для двойного клика даже есть: QAbstractItemView Class | Qt Widgets 5.4
Нет никакой проблемы.
Ответить с цитированием
  (#3 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 07.02.2015, 05:35

как поймать сигнал двойного клика я знаю.

cpp Код:
connect(ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(insertRecord()));

В слоте insertRecord получаю индекс

cpp Код:
ui->TableView->currentIndex(); //получить индекс

Как далее по этому индексу можно строку передать во второй tableview?

Желательно чтоб предварительно строка помещалась в переменную чтоб далее я мог это переменную так же использовать для записи в таблицу через sql запрос.

Под переменными я имею ввиду что то на подобии такого

cpp Код:
query.bindValue(":fio_voditela", ui->lineEdit_2->text());
           query.bindValue(":kategoria_prav", ui->lineEdit_3->text());

Чтоб потом эти переменные использовать для записи в таблицу.
Ответить с цитированием
  (#4 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,398
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.02.2015, 10:02

Надо по индексу вытащить данные из модели, привязанной к QTableView.
Ответить с цитированием
  (#5 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 07.02.2015, 11:44

загружаю данные так
cpp Код:
QSqlQueryModel *nomenclatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenclatura->setQuery(query);
    ui->tableView->setModel(nomenclatura);

Я понимаю что по индексу надо я не понимаю как это программно делается.
Не могли бы простой пример привести?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,398
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.02.2015, 12:18

Получение даных по индексу:
https://github.com/riuson/lcd-image-...bfont.cpp#L103
Отдача данных по индексу:
https://github.com/riuson/lcd-image-...model.cpp#L127
Ответить с цитированием
Пользователь сказал cпасибо:
Lexflax (07.02.2015)
  (#7 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 07.02.2015, 12:33

Все равно плохо понимаю как это все объединить((

В примере при изъятии модель объявляется типа QItemSelectionModel
А у меня QSqlQueryModel.

С ней получится тоже самое проделать?

Сейчас у меня так
cpp Код:
#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(ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(Copy_pozihion()));
}

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()

{
QModelIndex current  = ui->tableView->currentIndex();
model = new QStandardItemModel(this);
//qDebug()<<ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0);

model->
ui->tableView_2->setModel(model);

}

В функции void Sozdinie_Rashodnoi_Nakladnoi::Copy_pozihion() я и должен все описать но пока так и не знаю как это правильно сделать
Ответить с цитированием
  (#8 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,398
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.02.2015, 15:44

Эти методы идут от QAbstractItemModel, так что они общие.

void Copy_pozihion(const QModelIndex &index)
{
// вытаскивает отображаемое значение ячейки данных/модели
QVariant v = this->ui->tableView->model()->data(index, Qt::DisplayRole);
}

Макса Шлее почитайте, там всё уже описано.
Ответить с цитированием
Пользователь сказал cпасибо:
Lexflax (07.02.2015)
  (#9 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 07.02.2015, 17:24

Скачал данную книгу, очень большая, не подскажите в какой графе искать нужную информацию?
Ответить с цитированием
  (#10 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 07.02.2015, 18:23

после того как добавил в аргументы const QModelIndex &index

cpp Код:
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);

}

cpp Код:
#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)));
}

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

QObject::connect: No such slot Sozdinie_Rashodnoi_Nakladnoi::Copy_pozihion(const QModelIndex &index) in ..\my_diplom\sozdinie_rashodnoi_nakladnoi.cpp:16
QObject::connect: (sender name: 'tableView')
QObject::connect: (receiver name: 'Sozdinie_Rashodnoi_Nakladnoi')
Вложения
Тип файла: zip my_diplom.zip (20.1 Кб, 6 просмотров)
Ответить с цитированием
  (#11 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,398
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.02.2015, 18:45

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

В книге глава 42. Ответ на главный вопрос жизни, вселенной и всего такого.

Последний раз редактировалось Rius; 07.02.2015 в 18:50
Ответить с цитированием
  (#12 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 08.02.2015, 07:48

Доброго времени суток.
Прочитал 42 главу но так и не понял как мне по полученному индексу передать информацию во второй tableview и почему теперь не связывается слот с сигналом(
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,398
Сказал(а) спасибо: 22
Поблагодарили 937 раз(а) в 921 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 08.02.2015, 10:37

По полученному индексу данные не передать! Данные можно получить из модели по полученному индексу, или установить их. У каждой модели есть метод data(), принимающий индекс и роль. Текстовое значение обычно имеет роль Qt::DisplayRole.

Почему не соединяется - в connect() слоты определяются не так.

Вот ещё пример https://github.com/riuson/lcd-image-...elect.cpp#L326
Ответить с цитированием
Пользователь сказал cпасибо:
Lexflax (08.02.2015)
  (#14 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 08.02.2015, 12:27

Со слотом посмотрел увидел разницу, подправил.
А вот с моделями этими все равно понять не могу, не хватает мне знаний столько всего пересмотрел уже и окончательно запутался.
Ответить с цитированием
  (#15 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 10.02.2015, 18:34

Попытался сделать с помощью
cpp Код:
QStandardItemModel
.
Но вообще перестала выгружаться таблица.
cpp Код:
#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 *nomenklatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenklatura->setQuery(query);
    ui->tableView->setModel(nomenklatura);
 
    QStandardItemModel main_model, test_model;
    ui->tableView->setModel(&main_model);//не забываем привязать модель к таблице
    ui->tableView_2->setModel(&test_model);
    connect(this->ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(Copy_pozihion()));
}
 
Sozdinie_Rashodnoi_Nakladnoi::~Sozdinie_Rashodnoi_Nakladnoi()
{
    delete ui;
}
 
QWidget *Sozdinie_Rashodnoi_Nakladnoi::widget()
{
    return this;
}

Сейчас вообще не выгружается таблица в table_view, полагаю что после этой строки перестает выгрузка

cpp Код:
ui->tableView->setModel(&main_model);

cpp Код:
Потому что в main_model не подгружена таблица, я не знаю как ее подгрузить.
С QSqlQueryModel я подгружаю так

cpp Код:
QSqlQueryModel *nomenklatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenklatura->setQuery(query);
    ui->tableView->setModel(nomenklatura);

А как тут быть не знаю, помогите исправить и понять.
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение сигнала после выбора строки в tableview Lexflax Trolltech Qt 63 27.01.2015 17:49
Перенос ОС с одного жесткого диска на другой pijon39 Операционная система Windows 6 02.09.2013 09:48
С :запись из одного файла в другой только часть строки alfa88 Вопросы начинающих программистов 1 08.07.2013 09:39
Перенос БД MySQL на другой компьютер Montysson MySQL 0 12.06.2012 16:43
как переместить память с одного диска на другой! kam Память 12 07.11.2011 19:00
Перенос программы на другой компьютер Studentka11 Delphi 6 09.06.2011 10:57
Строки. Добавление части строки внутрь другой frikorsar Prolog 2 21.01.2009 19:58
Interbase перенос БД на другой компьютер и работа с датами DIMM20 Другие СУБД 2 11.05.2006 15:23
Как значение из одного типа перевести в другой simmm C++ Builder 5 28.10.2005 07:00
Перенос реализации предикатов из одного модуля в другой imported_MasterX Prolog 1 29.05.2005 14:09
Работа с базами данных как сделать что бы по двойному клику открывался файл Gold_Dreamer Delphi 2 23.09.2004 22:37
Как послать сообщения из одного класса в другой в С++ Anonymous Visual C++ 1 12.08.2002 14:20



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов