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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменить порядок айтемов с помощью мыши  (Прочитано 3030 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Ноябрь 29, 2013, 21:59 »

Добрый день

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

Спасибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Ноябрь 29, 2013, 22:09 »

это называется drag and drop, в букваре всё есть
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 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? Дороговато выходит, нет ли чего попроще?

Спасибо
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Ноябрь 30, 2013, 16:11 »

Если собираетесь использовать драгНдроп, то лучше QListView использовать + моделька. Там всё просто довольно, нужно - могу пример накатать )
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 30, 2013, 21:49 »

Если собираетесь использовать драгНдроп, то лучше QListView использовать + моделька. Там всё просто довольно, нужно - могу пример накатать )
Я не увидел никакой разницы DnD между QListView и QListWidget - а обоих случаях вызывается базовый QAbstractItemView::startDrag который все решает. К сожалению он имеет минусы (см мой предыдущий пост). Если Ваш пример внесет что-то новое - катайте, не откажусь, а иначе не тратьте время.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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