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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Собственный Алгоритм Выделения Итемов (работа с мышью)  (Прочитано 4889 раз)
0x0001
Гость
« : Апрель 17, 2010, 16:50 »

Здравствуйте!
Как сделать собственный алгоритм выделения множества Итемов, например у QTreeView ( надо для дальнейшего перетаскивания классом Drag ).
Стандартные Qt (ContiguousSelection,ExtendedSelection,..) мне, к сожалению, не подошли ( надо - чтобы Итемы в дереве выделялись обычно, к примеру как ContiguousSelection, но отмены выделения уже должны происходить по другому ...)

Спасибо.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Апрель 18, 2010, 23:07 »

А как должна происходить отмена выделения? Не совсем понятно, что вам нужно реализовать.
В принципе вам подойдет в ассистенте раздел Handling Selections in Item Views (я предполагаю).
На русском тут: http://doc.crossplatform.ru/qt/4.6.x/model-view-selection.html#using-a-selection-model.
« Последнее редактирование: Апрель 18, 2010, 23:12 от kibsoft » Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
0x0001
Гость
« Ответ #2 : Апрель 19, 2010, 12:28 »

А как должна происходить отмена выделения? Не совсем понятно, что вам нужно реализовать.
В принципе вам подойдет в ассистенте раздел Handling Selections in Item Views (я предполагаю).
На русском тут: http://doc.crossplatform.ru/qt/4.6.x/model-view-selection.html#using-a-selection-model.
К сожалению, та тема описывает немного не то..., мне надо изменить Алоритм работы с мышкой выделения элементов списка.
Конкретно - не должно быть отмены выделения при любых операциях мышкой на уже выделенных элементах(клик , 2x клик, и т.д.), стандартные методы Qt по мультивыделениям это не позволяют делать, а отмена выделения только при клике мышкой на другом элементе или клике Правой кнопкой....
Спасибо!
Записан
0x0001
Гость
« Ответ #3 : Апрель 19, 2010, 12:35 »

и ещё - отмена выделения чтоБ также происходила бы при клике LB только в опр. часте QTreeView
Записан
Kolobok
Гость
« Ответ #4 : Апрель 19, 2010, 14:06 »

Тебе надо наследоваться от QTreeView и переопределить метод
Код:
QItemSelectionModel::SelectionFlags QAbstractItemView::selectionCommand ( const QModelIndex & index, const QEvent * event = 0 ) const
Записан
0x0001
Гость
« Ответ #5 : Апрель 20, 2010, 10:55 »

Тебе надо наследоваться от QTreeView и переопределить метод
Код:
QItemSelectionModel::SelectionFlags QAbstractItemView::selectionCommand ( const QModelIndex & index, const QEvent * event = 0 ) const
Огромное Спасибо! то, что надо!!!
Код:
	virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, const QEvent *ev = 0) const
{
//ev->type(): 2/3/4/5 mouse: press/release/DblPress/move   ;  6,7: Keyboard
QList<int> mEvt;mEvt<<2<<3<<4<<5;
if (mEvt.contains( ev->type() )) {
const QMouseEvent* Mev = static_cast<const QMouseEvent*>(ev);
mEvt[0]= Mev->type(); //2/3/4/5 mouse: press/release/DblPress/move
mEvt[1]= Mev->buttons();//0/1/2/4 mouse: NoBtn/LB/RB/MB
mEvt[2]= Mev->x();mEvt[3]= Mev->y();//x,y
}
else
return QAbstractItemView::selectionCommand ( index, ev );

//--- Mouse event occur ----
// TEST {
QString str = QVariant(index.data()).toString();//QTreeView item data
str +="(";str +=QString::number(index.row());str +=",";str +=QString::number(index.column());str +=") event:";//Selected item (Column,Row)
for (int i=0;i<4;i++){
str += QString::number(mEvt[i]);str += ";";//Mouse: Function/Btn/(x,y)
}
emit SetTitle(str);//signal ...
// TEST }

if (((index.row()|index.column())<0) && mEvt[3] > 50)// out of index / out of (y)position - Clear All
return (QItemSelectionModel::Clear);
if (mEvt[1] & Qt::LeftButton)
return (QItemSelectionModel::Select|QItemSelectionModel::Rows);
if (mEvt[1] & (Qt::RightButton|Qt::MidButton))
return (QItemSelectionModel::Clear);
//default by Parent
return QAbstractItemView::selectionCommand ( index, ev ) ;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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