Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Ноябрь 29, 2013, 21:59



Название: Изменить порядок айтемов с помощью мыши
Отправлено: Igors от Ноябрь 29, 2013, 21:59
Добрый день

Ну допустим в QListWidget. Можно конечно кнопочки со стрелочками - но не стильно, не по-маковски. А как мышаком?

Спасибо


Название: Re: Изменить порядок айтемов с помощью мыши
Отправлено: kambala от Ноябрь 29, 2013, 22:09
это называется drag and drop, в букваре всё есть


Название: Re: Изменить порядок айтемов с помощью мыши
Отправлено: Igors от Ноябрь 30, 2013, 12:49
это называется drag and drop, в букваре всё есть
Ой спасибо что объяснили как называется!!  :)
А если серьезно, то хочется воспользоваться готовым, а не городить DnD с нуля. Флажки я подобрал
Код
C++ (Qt)
#include <QtGui>
 
int main( int argc, char** argv )
{
QApplication app(argc, argv);
 
QDialog * dlg = new QDialog();
QListWidget * lst = new QListWidget(dlg);
for (int i = 0; i < 100; ++i)
lst->addItem("item " + QString::number(i + 1));
QVBoxLayout * layout = new QVBoxLayout(dlg);
layout->addWidget(lst);
dlg->resize(320, 240);
 
lst->setDragDropMode(QAbstractItemView::InternalMove);
lst->setMovement(QListView::Free);
 
dlg->exec();
 
      return 0;
}
 
Работает, но выглядит неопрятно

1) таскаемый айтем рисуется так же как и оригигал, (грубый renderToPixmap), а надо только чтобы рамочка.

2) Чего это он вовсю показывается где угодно, я четко сказал флажками что он "местный", никаких планов дропать его куда-то еще не имею

3) autoScroll бычит, но надо попасть в начало/конец листа - слишком интимно

Как это порешать? Перекрывать startDrag и там свой наследник QDrag? Дороговато выходит, нет ли чего попроще?

Спасибо


Название: Re: Изменить порядок айтемов с помощью мыши
Отправлено: Kurles от Ноябрь 30, 2013, 16:11
Если собираетесь использовать драгНдроп, то лучше QListView использовать + моделька. Там всё просто довольно, нужно - могу пример накатать )


Название: Re: Изменить порядок айтемов с помощью мыши
Отправлено: Igors от Ноябрь 30, 2013, 21:49
Если собираетесь использовать драгНдроп, то лучше QListView использовать + моделька. Там всё просто довольно, нужно - могу пример накатать )
Я не увидел никакой разницы DnD между QListView и QListWidget - а обоих случаях вызывается базовый QAbstractItemView::startDrag который все решает. К сожалению он имеет минусы (см мой предыдущий пост). Если Ваш пример внесет что-то новое - катайте, не откажусь, а иначе не тратьте время.