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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Определение текущей ячейки в QTableView  (Прочитано 6648 раз)
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« : Июль 05, 2018, 04:33 »

Добрый день.
В моём QTableView включено выделение целых строк (SelectionBehavior==SelectRows). Тем не менее, понятие выделенной ячейки, видимо, всё же присутствует. Например, если щёлкнуть по ячейке и нажать Ctrl+C, в буфер копируется текст именно выделенной ячейки, а не всей строки.
Теперь один из пользователей просит меня добавить то же действие в контекстное меню, т.е. я должен сделать аналог Ctrl+C программно. И вот тут вопрос. Я смотрю содержимое selectionModel - selectedRows возвращает строку правильную, столбец нулевой (что логично). selectedColumns пустой, selectedIndexes возвращает ВСЕ ячейки выбранной строки.
Да, в контексте SelectionBehavior==SelectRows это логичное поведение. Но ведь при Ctrl+C виджет как-то определяет не только строку, но и конкретную выделенную ячейку, можно ли это сделать программно?
Ну или просто можно вызвать метод копирования текущей ячейки в буфер, который использует сам класс таблицы. Или он утоплен глубоко в private?

Проверено на Qt 4.8.6 и Qt 5.10, Windows 8.1.
« Последнее редактирование: Июль 06, 2018, 22:25 от DarkHobbit » Записан

Мои проекты на Qt: DoubleContact, LInvert
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #1 : Июль 05, 2018, 09:24 »

определи по event->pos()
Код
C++ (Qt)
void Widget::customMenuRequested(QPoint pos){
   QModelIndex index=table->indexAt(pos);
   QMenu *menu=new QMenu(this);
   menu->addAction(new QAction("Action 1", this));
   menu->addAction(new QAction("Action 2", this));
   menu->addAction(new QAction("Action 3", this));
   menu->popup(table->viewport()->mapToGlobal(pos));
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Июль 05, 2018, 11:49 »

Зачем для контекстного меню текущая ячейка?
Используй найденную
Код
C++ (Qt)
QModelIndex index=table->indexAt(pos);
« Последнее редактирование: Июль 05, 2018, 13:22 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #3 : Июль 05, 2018, 12:30 »

Зачем для контекстного меню текущая ячейка?
чтобы копировать текст
Код
C++ (Qt)
   int row = view->indexAt(pos).row();
   int col = view->indexAt(pos).column();
qDebug() << view->model()->index(row,col).data().toString();
 
« Последнее редактирование: Июль 05, 2018, 13:04 от vic57 » Записан
zhbr
Гость
« Ответ #4 : Июль 05, 2018, 13:01 »

Код
C++ (Qt)
table->indexAt(pos).data().toString()
 
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #5 : Июль 06, 2018, 11:21 »

Поработаю кэпом ): выбранные ячейки это одно, а текущая (current в терминологии Qt-фреймворка) ячейка это другое. Выбранных ячеек может быть много, а текущей (та что в фокусе) - только одна.

Если необходимо програмно определить какая ячейка является текущей, следует использовать метод

Код
C++ (Qt)
QModelIndex QItemSelectionModel::currentIndex() const
 
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #6 : Июль 06, 2018, 22:24 »

Поработаю кэпом ): выбранные ячейки это одно, а текущая (current в терминологии Qt-фреймворка) ячейка это другое.

О! Я чувствовал, что здесь должны быть разные понятия, но что это именно current, не догадался.
QItemSelectionModel::currentIndex() в сочетании с qApp->clipboard()->setText() помог, спасибо.
« Последнее редактирование: Июль 06, 2018, 22:31 от DarkHobbit » Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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