Russian Qt Forum
Ноябрь 18, 2024, 22:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Хитрый способ захвата данных из QTableView  (Прочитано 6570 раз)
Raks123
Гость
« : Апрель 16, 2012, 21:25 »

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

2. Интересно можно ли как нибудь сделать, чтобы при присоединении модели (QSqlTableModel) QTableView и Форма (Widget) автоматически удлинялись, чтобы не было нижнего скрола, а то растягивать это дело ваще, ну очень позорно как-то.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 17, 2012, 07:51 »

но очень бы хотелось для красоты, чтобы без разницы было, а возвращало первую ячейку любой строки.
Код
C++ (Qt)
ui->tableView->model()->index( ui->tableView->currentIndex().row(), 0 ).data().toInt();
 
Цитировать
2. Интересно можно ли как нибудь сделать, чтобы при присоединении модели (QSqlTableModel) QTableView и Форма (Widget) автоматически удлинялись, чтобы не было нижнего скрола, а то растягивать это дело ваще, ну очень позорно как-то.
Код
C++ (Qt)
ui->tableView->horizontalHeader()->setResizeMode( QHeaderView::Stretch );
« Последнее редактирование: Апрель 17, 2012, 08:24 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Raks123
Гость
« Ответ #2 : Апрель 17, 2012, 08:51 »

Спасибо большое, первое отлично работает))))) А вот во втором убирается скрол, но форма остается такой же, как её поменять под ширину столбцов?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 17, 2012, 10:32 »

Спасибо большое, первое отлично работает))))) А вот во втором убирается скрол, но форма остается такой же, как её поменять под ширину столбцов?
Попробуй так:
Код
C++ (Qt)
ui->tableView->setMinimumWidth( ui->tableView->sizeHint().width() );
Записан

Qt 5.11/4.8.7 (X11/Win)
Raks123
Гость
« Ответ #4 : Апрель 17, 2012, 10:58 »

Попробуй так:
Код
C++ (Qt)
ui->tableView->setMinimumWidth( ui->tableView->sizeHint().width() );

ничего не поменялось))
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Апрель 17, 2012, 12:19 »

Тогда так:
Код
C++ (Qt)
ui->tableView->setMinimumWidth(
ui->tableView->frameWidth() * 3 +
ui->tableView->visualRect(
ui->tableView->model()->index( 0, ui->tableView->model()->columnCount() - 1 ) ).right() +
ui->tableView->verticalHeader()->width() );
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Raks123
Гость
« Ответ #6 : Апрель 17, 2012, 12:44 »

Код:
Получится, если сделать вот так:

//    ui->tableView->resizeColumnsToContents();
//    ui->tableView->horizontalHeader()->setResizeMode( QHeaderView::Stretch );
//    ui->tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
    ui->tableView->setMinimumWidth(
            ui->tableView->frameWidth() * 3 +
            ui->tableView->visualRect(
                    ui->tableView->model()->index( 0, ui->tableView->model()->columnCount() - 1 ) ).right() +
            ui->tableView->verticalHeader()->width() );

Но без первых трех выраниваний получается уж очень некрасиво (рис 2) по сравнению с тем, что получалось (рис 1)
« Последнее редактирование: Апрель 17, 2012, 13:22 от Raks123 » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Апрель 17, 2012, 12:51 »

Ну а зачем убрал:
Код
C++ (Qt)
ui->tableView->resizeColumnsToContents();
?
Записан

Qt 5.11/4.8.7 (X11/Win)
Raks123
Гость
« Ответ #8 : Апрель 17, 2012, 13:21 »

Вооооот! Смеющийся Вот так просто идеально)))))

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

Поменял в ширение множитель на 4, надо было самое последнее изменение убрать. Огромное спасибо за помощь))))))
« Последнее редактирование: Апрель 18, 2012, 07:35 от Raks123 » Записан
Raks123
Гость
« Ответ #9 : Апрель 18, 2012, 07:33 »

блин не поверишь))) Нашел косяк: когда переключаю qTableView на другую таблицу, то там тоже все нормально (рис1), но вот переключение на более мелкую косячно (рис2)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Апрель 18, 2012, 10:19 »

блин не поверишь))) Нашел косяк: когда переключаю qTableView на другую таблицу, то там тоже все нормально (рис1), но вот переключение на более мелкую косячно (рис2)
И в чём косяк? Как задал resizeMode() так себя и ведёт.
Задавай для "узких" таблиц QHeaderView::Stretch.
Записан

Qt 5.11/4.8.7 (X11/Win)
Raks123
Гость
« Ответ #11 : Апрель 19, 2012, 09:50 »

И в чём косяк? Как задал resizeMode() так себя и ведёт.
Задавай для "узких" таблиц QHeaderView::Stretch.

Да я уже всяко пробовал, поигрался с
Код:
ui->tableView->horizontalHeader()->setResizeMode( QHeaderView::ResizeToContents );
ui->tableView->horizontalHeader()->setResizeMode( QHeaderView::Stretch);
ui->tableView->setMinimumWidth();
ui->tableView->setMaximumWidth();

Не получается и все тут, более того QHeaderView::Stretch Возвращает ранную проблему со свертыванием записей в таблице
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Апрель 19, 2012, 10:14 »

Установка другого resizeMode() напрочь убивает лейаут предыдущего. Поэтому устанавливать один и сразу менять на другой кроме тормозов ничего не даст. Не нравится автоматическое поведение выставляй ширину колонок сам через QTableView::setColumnWidth().
Записан

Qt 5.11/4.8.7 (X11/Win)
Raks123
Гость
« Ответ #13 : Апрель 19, 2012, 11:25 »

Почти получилось  Смеющийся Кое-что еще не так - когда со второй таблицы на первую переходишь, то таблица то сжимается, но форма остается такой же (рис1). Я уже и спейсер добавил и авторазмер в QtDesiner'e, опять что-то не то (рис2).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.208 секунд. Запросов: 22.