crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> [РЕШЕНО] QTableView, как бы так запросто скопировать все
Litkevich Yuriy
  опции профиля:
сообщение 29.1.2009, 20:30
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Есть стандартное табличное представление, но в нем по умолчанию нет возможности скопировать все, просто, например, как текст с разделителями, чтобы потом воткнуть в эксель или текстовый файл. Можно ли как-то просто это реализовать?

П.С. В модели выделения я тоже ничего подходящего не нашел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 29.1.2009, 20:35
Сообщение #2


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

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

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




Репутация:   5  


Что-то наподобие описывалось в книге Бланшета и Саммерфилда
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.1.2009, 20:47
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(molchanoviv @ 29.1.2009, 23:35) *
Что-то наподобие описывалось в книге Бланшета и Саммерфилда
это я уже посмотрел, там все ручками.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.1.2009, 13:39
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Вот моя поделка на тему копирования:
код
void Browser::Copy()
{
  QModelIndexList     indexes;
  QModelIndex        index;
  unsigned int        row, column;
  unsigned int        minrow, mincolumn;
  unsigned int        maxrow, maxcolumn;
  bool                 init = true;  
    
    indexes = table->selectionModel()->selectedIndexes();

    // Ищем минимумы и максимумы
    minrow = 0;    maxrow = 0;
    mincolumn = 0; maxcolumn = 0;
    foreach (index, indexes) {
        
        row = index.row();
        column = index.column();
        if (init)
        {
            minrow = row;
            mincolumn = column;
            init = false;
        }
        if (row < minrow) minrow = row;
        if (row > maxrow) maxrow = row;
        
        if (column < mincolumn) mincolumn = column;
        if (column > maxcolumn) maxcolumn = column;
    }
    qDebug() << "Copy, FROM" << QString("(%1,%2)").arg(minrow).arg(mincolumn)
             << "TO" << QString("(%1,%2)").arg(maxrow).arg(maxcolumn);
    
    // Само копирование
  unsigned int    i, j;
  QString        str;

    qDebug() << " i from" << minrow << "to" << maxrow;
    qDebug() << " j from" << mincolumn << "to" << maxcolumn;
    for (i=minrow; i <= maxrow; ++i)
    {
        qDebug() << "FOR i=" << i;
        if (i>minrow)
            str += "\n";
        for (j=mincolumn; j <= maxcolumn; ++j)
        {
            qDebug() << "FOR j=" << j;
            if (j>mincolumn)
                str += "\t";
            index = table->model()->index(i, j, QModelIndex());
            qDebug() << "index" << index;
            QString t = table->model()->data(index).toString();
            qDebug() << "Copy cell" << QString("(%1,%2)").arg(index.row()).arg(index.column())
                     << t;
            str += t;
        }
    }
    qDebug() << "Copy:\n" << str;
    QApplication::clipboard()->setText(str);
}

надо как-то рационализировать определение диаппазона.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.1.2009, 21:15
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


рационализировал определение границ диаппазона, но использую только первый выделенный диаппазон:
код
void Browser::Copy()
{
  QModelIndex    index;
  unsigned int    minrow, mincolumn;
  unsigned int    maxrow, maxcolumn;
  unsigned int    i, j;
  QString        str;


    // Ищем минимумы и максимумы
    const QItemSelection ranges = table->selectionModel()->selection();
    // используем только первую выделенную область
    minrow = ranges.at(0).top();
    mincolumn = ranges.at(0).left();
    maxrow = ranges.at(0).bottom();
    maxcolumn = ranges.at(0).right();

    qDebug() << "Copy, FROM" << QString("(%1,%2)").arg(minrow).arg(mincolumn)
             << "TO" << QString("(%1,%2)").arg(maxrow).arg(maxcolumn);
    
    // Само копирование
    for (i=minrow; i <= maxrow; ++i)
    {
        if (i>minrow)
            str += "\n";
        for (j=mincolumn; j <= maxcolumn; ++j)
        {
            if (j>mincolumn)
                str += "\t";
            index = table->model()->index(i, j, QModelIndex());
            QString t = table->model()->data(index).toString();
            str += t;
        }
    }
    qDebug() << "Copy:\n" << str;
    QApplication::clipboard()->setText(str);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.4.2009, 14:01
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Сваял вспомогательный класс TableViewBuddy, цепляющийся к табличному представлению, чтобы код всякий раз не копировать.
Прикрепленный файл  TableViewBuddy.zip ( 10.25 килобайт ) Кол-во скачиваний: 325

Используется так
pro-файл:
#========= Dependency ==============
#    --- Qt ---
...
#    --- External ---
include(./TableViewBuddy/tableviewbuddy.pri)
В данном примере в каталоге с иходником лежит катлог с TableViewBuddy

В коде:
#include "tableviewbuddy.h"
TableViewBuddy *buddy = new TableViewBuddy(ui->tableView);


Пока работает только копирование, в планах есть развивать это дело.

Внимание!
!!!!!!!!! Меняет поведение контекстного меню представления !!!!!!!!!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 13.4.2009, 14:40
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Это Qt надо пересобирать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.4.2009, 15:10
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(SABROG @ 13.4.2009, 18:40) *
Это Qt надо пересобирать?
нет, если ты про замечание, то речь идет об изменении поведения твоего представления после установки пртнёра. См. Исходник его.
Там еще надо выяснить насчет неудаляемого ручную объекта TableViewBuddy. Но пока времени нет. Я вон какой фигнёй занимаюсь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 13.4.2009, 18:56
Сообщение #9


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

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

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




Репутация:   9  


Немного офтопик, но не могу удержаться..
Это жесть.. нарисовать такое в автокаде.. А почему нельзя было задействовать KiCAD или PCAD?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.4.2009, 19:34
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Kagami @ 13.4.2009, 22:56) *
Это жесть.. нарисовать такое в автокаде.. А почему нельзя было задействовать KiCAD или PCAD?
Ха-Ха.
Это сделано в P-CAD'е, просто теперь делаю КДшку (Конструкторскую Документацию), вот в Автокадоподобной софтине делаю сборочный чертёж.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 18.4.2024, 6:06