Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: DarkHobbit от Июль 05, 2018, 04:33



Название: [РЕШЕНО] Определение текущей ячейки в QTableView
Отправлено: DarkHobbit от Июль 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.


Название: Re: Определение текущей ячейки в QTableView
Отправлено: vic57 от Июль 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));


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


Название: Re: Определение текущей ячейки в QTableView
Отправлено: vic57 от Июль 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();
 


Название: Re: Определение текущей ячейки в QTableView
Отправлено: zhbr от Июль 05, 2018, 13:01
Код
C++ (Qt)
table->indexAt(pos).data().toString()
 


Название: Re: Определение текущей ячейки в QTableView
Отправлено: kai666_73 от Июль 06, 2018, 11:21
Поработаю кэпом ): выбранные ячейки это одно, а текущая (current в терминологии Qt-фреймворка) ячейка это другое. Выбранных ячеек может быть много, а текущей (та что в фокусе) - только одна.

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

Код
C++ (Qt)
QModelIndex QItemSelectionModel::currentIndex() const
 


Название: Re: Определение текущей ячейки в QTableView
Отправлено: DarkHobbit от Июль 06, 2018, 22:24
Поработаю кэпом ): выбранные ячейки это одно, а текущая (current в терминологии Qt-фреймворка) ячейка это другое.

О! Я чувствовал, что здесь должны быть разные понятия, но что это именно current, не догадался.
QItemSelectionModel::currentIndex() в сочетании с qApp->clipboard()->setText() помог, спасибо.