LINUX.ORG.RU

Перетащить виджет в другой layout

 


0

1

Привет. Как правильно переносить виджеты из одного лэйаута в другой? Есть несколько виджетов, в каждом из них свой лэйаут, нужно перетаскивать элементы из одного виджета в другой. Минимальный пример тут: https://github.com/twentypercentcooler/qtlayouts Проблема вот в чем - все нормально перетаскивается, но потом все ломается. Чтобы сломалось нужно - перетаскивать внутри одного виджета, потом перетащить в другой, а потом снова перетаскивать внутри первого. Должно получиться то, что на картинке в гитхабе. Тестировал на винде и линуксе, Qt5.4.

dropEvent, emptycolorwidget.cpp:

if (de->source() == this) {
        return;
    }
    
    EmptyColorWidget *v = qobject_cast<EmptyColorWidget *>(de->source());
    if (v != nullptr) {
        de->acceptProposedAction();
        emit swap(v, this);
        return;
    }
Далее ловлю этот сигнал в GridWidget::swap(EmptyColorWidget *w1, EmptyColorWidget *w2), если оба элемента в одном виджете, то тут же их и меняю, если нет, то посылаю сигнал дальше, чтобы поменять окна и обрабатываю уже тут:
void multiscreen::swap(EmptyColorWidget *v1, EmptyColorWidget *v2)
{
    if (v1 == nullptr || v2 == nullptr) {
        qDebug() << "widget is null";
        return;
    }

    auto pos1 = v1->getPosition();
    auto pos2 = v2->getPosition();

    auto gw1 = grid_widgets[pos1.display_number];
    auto gw2 = grid_widgets[pos2.display_number];

    gw2->remove(v2);
    gw1->remove(v1);

    gw2->add(v1, pos2);
    gw1->add(v2, pos1);

    v2->savePosition(pos1);
    v1->savePosition(pos2);
}

У тебя master не собирается

In file included from ../qtlayouts-master/multiscreen.cpp:5:0:
../qtlayouts-master/gridwidget.h:5:27: fatal error: ui_videoframe.h: No such file or directory
 #include "ui_videoframe.h"
grondek
()
Ответ на: комментарий от grondek

Да, там просто инклуд старый остался. Нужно заменить #include «ui_videoframe.h» #include «ui_gridwidget.h».

Проблема похоже решилась, если удалить лэйауты, а потом создать снова, добавив в них все виджеты.

twentypercentcooler
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.