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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Движение виджетов  (Прочитано 7082 раз)
ammaximus
Гость
« : Января 27, 2012, 08:31 »

Я делаю таблицу, в которой по результатам сортировки должны меняться местами столбцы. Чтобы было более очевидно, что содержимое столбца изменилось, я хочу менять их с анимацией наплывом. Решил реализовывать столбцы с помощью QPixmap. Помогите поменять местами два столбца вот на таком простом примере:
Код:
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    a = new QPixmap(50,150);
    b = new QPixmap(50,150);
    a->fill(QColor(Qt::red));
    b->fill(QColor(Qt::green));
}

void Widget::paintEvent(QPaintEvent * e){
    QPainter *p = new QPainter(this);

    p->drawPixmap(0,0,*a);
    p->drawPixmap(50,0,*b);
}
Записан
interv
Гость
« Ответ #1 : Января 27, 2012, 09:40 »

Чегото я не понимаю, Вы наследуетесь от QWidget для тогочтобы сделать свой класс "Таблица"?
если нет, то зачем void Widget::paintEvent(QPaintEvent * e), надо переопределять класс QTableWidget или QTableView.
а если да то флаг вам в руки, создавать свой TableWidget это все равно что создавать велосипед...
Записан
ammaximus
Гость
« Ответ #2 : Января 27, 2012, 09:57 »

Боюсь что и при этом придется все полностью перерисовывать. Что то решение у меня как то смутно представляется
Записан
interv
Гость
« Ответ #3 : Января 27, 2012, 10:10 »

отнють, есть разные варианты, например использование делигатов (QItemDelegate) для отрисовки...
Записан
ammaximus
Гость
« Ответ #4 : Января 27, 2012, 11:33 »

оу, прошу прощения, Qt 3.3
Записан
ammaximus
Гость
« Ответ #5 : Января 27, 2012, 11:50 »

Вообщем я буду наследовать у QTableItem и делать свое отображение, у меня все равно нестандартный вид быть должен. Таким образом вопрос сохраняется, как плавно поменять местами два виджета, чтобы получилась анимация, т.е. один выходит на какое то место, а остальные двигаются.
Записан
ammaximus
Гость
« Ответ #6 : Января 27, 2012, 13:19 »

Как всегда, запутал народ деталями. Меня интересует как правильно сделать анимацию - перемещения группы виджетов по поверхности другого.
Записан
lighting
Гость
« Ответ #7 : Января 27, 2012, 13:32 »

QPropertyAnimation но поскольку у тебя Qt 3.3 то видимо делать ее придется вручную. Думаю move() + QTimer для этого должно быть достаточно.
Записан
Bepec
Гость
« Ответ #8 : Января 27, 2012, 17:26 »

Тебе придётся делать кучу жутких и совершенно "костыльных" действий.

Вариант с Move/QTimer не прокатит помоему, ибо компоновщики будут каждый раз перерасчитывать заново Улыбающийся

Можно отказаться от компоновщиков, но... это чревато.

PS не вижу простых вариантов без костылей этого сделать. Засим откланиваюсь.
Записан
BuRn
Гость
« Ответ #9 : Января 28, 2012, 12:33 »

QPropertyAnimation +QStateMashine уже не в моде нынче ?
Записан
lighting
Гость
« Ответ #10 : Января 29, 2012, 11:18 »

BuRn топикстартеру нужен Qt 3.3 так что мимо кассы.
Записан
ammaximus
Гость
« Ответ #11 : Февраля 02, 2012, 13:36 »

Компоновщики действительно мешают. Плакала моя анимация.
Записан
Bepec
Гость
« Ответ #12 : Февраля 02, 2012, 22:19 »

Есть интересная мысль. Если виджеты одной формы, то можно накладывать поверх них гифку и проигрывать. Будет так желанная вами анимация, а виджеты просто меняете местами в компоновщике.

PS конечн сумасшедшая, но идея !!! Веселый
Записан
andrew.k
Гость
« Ответ #13 : Февраля 02, 2012, 23:20 »

А давно ли QTableItem стал виджетом? Как ты его двигать собираешься?

Не мучай попу, бери qt4. Делай сцену и будет тебе счастье)

Как вариант. Грабить строчку - получаешь пиксмап, которую ты собираешься двигать.
Пихаешь его в виджет, QLabel видимо, показываешь его поверх своей строки (реальной строки в таблице).
Удаляешь строчку из таблицы. Двигаешь виджет с картинкой куда тебе надо.
Вставляешь строку. Скрываешь виджет.
Но это трындец. Проще просто выделить перемещенный элемент и поставить на него фокус (прокрутить таблицу, чтобы стал виден)
Если пользователь не даун, он вкурит.
« Последнее редактирование: Февраля 02, 2012, 23:23 от andrew.k » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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