crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Хитрый способ захвата данных из QTableView
Raks123
  опции профиля:
сообщение 16.4.2012, 21:26
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

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




Репутация:   0  


Проблем несколько:
1. Необходимо взять данные из ячейки, причем выделена только строка (не важно какой элемент в ней), а колонка известна. Для ячейки под номером (0,0), (0,1), .... (0,n) это работает, если выделена именно она:
qDebug() << ui->tableView->currentIndex().data().toInt();

но очень бы хотелось для красоты, чтобы без разницы было, а возвращало первую ячейку любой строки.

2. Интересно можно ли как нибудь сделать, чтобы при присоединении модели (QSqlTableModel) QTableView и Форма (Widget) автоматически удлинялись, чтобы не было нижнего скрола, а то растягивать это дело ваще, ну очень позорно как-то.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 16.4.2012, 23:28
Сообщение #2


Zombie Mod
*****

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

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




Репутация:   212  


1) Ячейку из первого столбца выделенной строки?
int row = selectionModel()->selectedRows().first().row();
tableView->model()->data(tableView->model()->index(row, 0)).toInt();


2) Автоматически - вряд ли (на то она и таблица, были бы QLabel - растянулось бы автоматом). Можно посчитать width колонок и растянуть виджет в коде.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 17.4.2012, 8:00
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


1. поиграйся с QHeaderView::setResizeMode( QHeaderView::ResizeMode )
2. переопредели sizeHint() для вьювера или виджета и суммируй QHeaderView::sectionSizeHint( int index ) и отталкивайся от этого значения.
3. поиграйся еще с sizePolicy() для QTableView.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Raks123
  опции профиля:
сообщение 17.4.2012, 11:02
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

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




Репутация:   0  


На счет первого избавился так:

ui->tableView->model()->index( ui->tableView->currentIndex().row(), 0 ).data().toInt();


А вот со вторым беда - от скрола я избавился, но надписи сварачиваются:

 
    ui->tableView->resizeColumnsToContents();
    ui->tableView->horizontalHeader()->setResizeMode( QHeaderView::Stretch );
    ui->tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);


Надо как то приспособить, чтобы форма растягивалась в ширину
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.4.2012, 12:49
Сообщение #5


Zombie Mod
*****

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

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




Репутация:   212  


Цитата(Raks123 @ 17.4.2012, 11:02) *
Надо как то приспособить, чтобы форма растягивалась в ширину

Цитата
Можно посчитать width колонок и растянуть виджет в коде.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Raks123
  опции профиля:
сообщение 17.4.2012, 13:25
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

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




Репутация:   0  


Проблема решилась))))

Спасибо, GreatSnake с другого форума))))) Ответ оказался таким:

    ui->tableView->resizeColumnsToContents();
    ui->tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);

    ui->tableView->setMinimumWidth(
            ui->tableView->frameWidth() * 4 +
            ui->tableView->visualRect(
                    ui->tableView->model()->index( 0, ui->tableView->model()->columnCount() - 1 ) ).right() +
            ui->tableView->verticalHeader()->width() );



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Raks123
  опции профиля:
сообщение 19.4.2012, 9:57
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

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




Репутация:   0  


Блин, появилась новая проблема))) Нашел косяк: когда переключаю qTableView на другую таблицу, то там тоже все нормально (рис2), но вот переключение на более мелкую косячно (рис1)
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Raks123
  опции профиля:
сообщение 19.4.2012, 11:27
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 2.10.2011
Пользователь №: 2920

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




Репутация:   0  


Почти получилось ;D Кое-что еще не так - когда со второй таблицы на первую переходишь, то таблица то сжимается, но форма остается такой же (рис1). Я уже и спейсер добавил и авторазмер в QtDesiner'e, опять что-то не то (рис2).
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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