crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как сохранить расположение столбцов в QTableWidget?
RazrFalcon
  опции профиля:
сообщение 14.3.2011, 22:29
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


При перемещении столбцов, их порядковый номер не меняется.
Беру так:
table->horizontalHeaderItem(0)->text());
Как бы я не двигал, но как выдавало "один", так и выдает.
Можно отловить перемещение через
void QTableView::columnMoved ( int column, int oldIndex, int newIndex ) [protected slot]
но для этого нужно создавать субкласс.

В инете ничего подобного не нашел, на форуме, только это.

"Как сохранить расположение столбцов в QTableWidget?"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 14.3.2011, 22:33
Сообщение #2


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Есть же сигнал:
void QHeaderView::sectionMoved ( int logicalIndex, int oldVisualIndex, int newVisualIndex ) [signal]

ну и:
int QHeaderView::visualIndex ( int logicalIndex ) const
int QHeaderView::logicalIndex ( int visualIndex ) const
int QHeaderView::sectionPosition ( int logicalIndex ) const


Сообщение отредактировал BRE - 14.3.2011, 22:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей
  опции профиля:
сообщение 15.3.2011, 12:47
Сообщение #3


Студент
*

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

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




Репутация:   0  


QTableView и QTableWidget разные вещи!

ПС QTableView работает на модели (рекомендую изучить http://doc.crossplatform.ru/qt/4.6.x/model...troduction.html ) - можешь посмотреть стандартный пример в креаторе Basic Sort/Filter Model Example. для использования модели можешь создать объект QStandardItemModel, загрузить в QTableView::setModel и ловишь сигнал модели QStandardItemModel::columnsMoved после забирать из модели нужный QStandardItemModel::headerData (и никаких классов не придётся создавать/наследовать)

ППС void QTableView::columnMoved ( int column, int oldIndex, int newIndex ) [protected slot] так же предназначен для отлавливания сигнала от моделей QAbstractItemModel::columnsMoved, поэтому чтоб в унаследованном классе его обрабатывать, тебе сначала нужно будет на него так же подписаться

Сообщение отредактировал Алексей - 15.3.2011, 12:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.3.2011, 12:57
Сообщение #4


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

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

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




Репутация:   94  


Цитата(Алексей @ 15.3.2011, 14:47) *
QTableView и QTableWidget разные вещи!
один у другого наследник. Так что он в правильном направлении копает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 4.4.2011, 13:56
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Что вообще не пойму как этот класс задействовать.

В хедер добавил:
class header : public QHeaderView
{
    Q_OBJECT

private slots:
    void sectionMoved ( int logicalIndex, int oldVisualIndex, int newVisualIndex );
};
Ну и в соурс:
void header::sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)
{
    MainWindow my;
    qDebug()<<my.table->horizontalHeader()->visualIndex(0);
    qDebug()<<"Hello";
}

В итоге вообще ничего не выводит в консоль! Я не силен в классах, в чем ошибка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 4.4.2011, 14:18
Сообщение #6


Участник
**

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

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




Репутация:   4  


ты повторяешь ошибку, о которой у нас уже был разговор
Цитата(RazrFalcon @ 4.4.2011, 14:56) *
MainWindow my; //ты создаёшь новый объект, а не обращаешься к существующему!
qDebug()<<my.table->horizontalHeader()->visualIndex(0);


а объект класса header ты где-нибудь создал? установил его объекту тэйблвью?

почему ты не силён в классах? как ты с ними знакомился?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 4.4.2011, 15:29
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Цитата
MainWindow my; //ты создаёшь новый объект, а не обращаешься к существующему!
А как нужно? Или где можно почитать об этом?

Цитата
а объект класса header ты где-нибудь создал? установил его объекту тэйблвью?
Не понял - значит нет.

Цитата
как ты с ними знакомился?
Из книг/сайтов. Но многое осталось непонятным.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 4.4.2011, 21:33
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Кто не будь может разжевать в чем проблема?
Я застопорился на этом, ни как не могу понять как правильно сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 5.4.2011, 11:55
Сообщение #9


Участник
**

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

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




Репутация:   4  


Вот ты написал код класса. Теперь создай его экземпляр в конструкторе MainWindow, и установи свой header в tableView:
MainWindow::MainWindow
{
      ui->tableView->setHorizontalHeader(new Header)
}

Касаемо того, что у тебя написано, правильно написать так, хотя я не знаю, что ты пытаешься сделать, я просто показываю, как это нужно было написать:
void header::sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)
{
    qDebug()<<visualIndex(0);
    qDebug()<<"Hello";
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 5.4.2011, 12:19
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Сам класс:
class header : public QHeaderView
{
private slots:
    void sectionMoved ( int logicalIndex, int oldVisualIndex, int newVisualIndex );
};

Соурс:
MainWindow::MainWindow()
{
    table->setHorizontalHeader(new header);
}


In constructor ‘header::header()’:
error: no matching function for call to ‘QHeaderView::QHeaderView()’

и тд.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.11.2024, 0:40