Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: daimon от Ноябрь 17, 2009, 12:22



Название: [решено] Выделение несколько ячеек таблицы с зажатым Ctrl - помогите!
Отправлено: daimon от Ноябрь 17, 2009, 12:22
Как проверить нажатие Ctrl клавиши в своем слоте?
Код:
void Spreadsheet::keyPressEvent(QKeyEvent *event_)
{
if( QApplication::keyboardModifiers() & Qt::ControlModifier)
setSelectionMode ( QAbstractItemView::MultiSelection );

}
void Spreadsheet::keyReleaseEvent(QKeyEvent *event_)
{

setSelectionMode ( QAbstractItemView::SingleSelection );
}
Можна написать лучше.


Название: Re: Как проверить нажатие клавиши в своем слоте?
Отправлено: pastor от Ноябрь 17, 2009, 13:03
QApplication::keyboardModifiers() ?


Название: Re: Как проверить нажатие клавиши в своем слоте?
Отправлено: Павел_F. от Ноябрь 17, 2009, 13:47
Именно! если точнее:
Код:
if( QApplication::keyboardModifiers() == Qt::ControlModifier) printf("YaHoooo!!! Ctrl key is pressed!!!");


Название: Re: Как проверить нажатие клавиши в своем слоте?
Отправлено: pastor от Ноябрь 17, 2009, 15:06
А если еще точнее, то

Код
C++ (Qt)
if( QApplication::keyboardModifiers() & Qt::ControlModifier) printf("YaHoooo!!! Ctrl key is pressed!!!");


Название: Re: Как проверить нажатие клавиши в своем слоте?
Отправлено: MoPDoBoPoT от Ноябрь 17, 2009, 15:12
А если еще точнее, то

Код
C++ (Qt)
if( QApplication::keyboardModifiers() & Qt::ControlModifier) printf("YaHoooo!!! Ctrl key is pressed!!!");
+1
Накладываем маску, ибо вместе с Ctrl могут и другие клавиши-модификаторы зажаты.


Название: Re: Как проверить нажатие клавиши в своем слоте?
Отправлено: Павел_F. от Ноябрь 17, 2009, 15:23
Да, не подумал...


Название: Re: Выделение несколько ячеек таблицы с зажатым Ctrl
Отправлено: Авварон от Ноябрь 17, 2009, 15:52
а почему нельзя воспользоваться стандартными флагами QTreeView и QTableView (ExtendedSelection который). Используется какая-то самописная таблица?


Название: Re: Выделение несколько ячеек таблицы с зажатым Ctrl
Отправлено: daimon от Ноябрь 17, 2009, 15:57
а почему нельзя воспользоваться стандартными флагами QTreeView и QTableView (ExtendedSelection который). Используется какая-то самописная таблица?
Да пишу свою таблицу. Зажимая Ctrl должны выделятся любые ячейки, наоборот- только одна, выделение строк и колонок не отменял. Появилась проблема, переопределив методы событий я закрыл события для клавиш стрелок.
Что делать?


Название: Re: Выделение несколько ячеек таблицы с зажатым Ctrl
Отправлено: daimon от Ноябрь 17, 2009, 17:26
Извените, что всех побеспокоил нашел в асистанте  setSelectionMode(ExtendedSelection);


Название: Re: Выделение несколько ячеек таблицы с зажатым Ctrl
Отправлено: daimon от Ноябрь 17, 2009, 17:28
Извените, что всех побеспокоил нашел в асистанте  setSelectionMode(ExtendedSelection);
setSelection ( const QRect &, QItemSelectionModel::SelectionFlags )
setSelectionBehavior ( QAbstractItemView::SelectionBehavior )
setSelectionMode ( QAbstractItemView::SelectionMode )


Название: Re: [решено] Выделение несколько ячеек таблицы с зажатым Ctrl - помогите!
Отправлено: MoPDoBoPoT от Ноябрь 17, 2009, 17:58
Если бы сразу поставил правильно свой вопрос, то быстрей бы получил ответ.
Да и доку надо читать с большим пристрастием :)


Название: Re: Выделение несколько ячеек таблицы с зажатым Ctrl
Отправлено: panAlexey от Ноябрь 18, 2009, 14:58
а почему нельзя воспользоваться стандартными флагами QTreeView и QTableView (ExtendedSelection который). Используется какая-то самописная таблица?
Да пишу свою таблицу. Зажимая Ctrl должны выделятся любые ячейки, наоборот- только одна, выделение строк и колонок не отменял. Появилась проблема, переопределив методы событий я закрыл события для клавиш стрелок.
Что делать?
Посмотри на реализацию подобной таблицы: http://code.google.com/p/unnstudioreport/
там вроде есть класс обрабатывающий выделения. Вроде даже работает.