Qt: окно с подвижными виджетами - PullRequest
2 голосов
/ 09 ноября 2011

Я хочу создать окно с переменным количеством пользовательских виджетов, каждый из которых может быть группой из нескольких простых объектов.Виджеты должны вести себя аналогично диалоговым окнам: их можно перемещать куда угодно внутри родительского окна , могут перекрываться и т. Д. Однако их нельзя перемещать из окна.Что было бы наиболее подходящим способом реализовать что-то подобное в QT3?Я попытался создать окна / диалоговые окна с основным окном в качестве родительского, но таким образом виджеты могут быть перемещены из окна.

1 Ответ

2 голосов
/ 10 ноября 2011

Возможно, вы сможете использовать функцию перетаскивания.Это единственное, о чем я могу думать.

Есть пример, который поставляется с Qt, называемый Магниты на холодильник.По сути, они создали класс DragWidget, который является хостом для всех других виджетов.В этом примере они создают множество QLabels со словами, которые пользователь может перетаскивать для создания предложений.

Основная задача заключается в реализации следующих функций.

void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
void mousePressEvent(QMouseEvent *event);

Этот примербыл введен с Qt4, но он должен дать вам идею, код: здесь

По сути, при нажатии мыши элемент управления под мышью скрыт, а изображение помещается вданные перетаскивания.Когда пользователь удаляет его где-то в элементе управления, пример закрывает его в предыдущем месте, создает новый QLabel и помещает его туда, куда упал пользователь.Вам, вероятно, следует изменить это, чтобы просто переместить свой элемент управления в это место.

В примере используются несколько концепций, которые немного отличаются от того, что было доступно в 3.3, поэтому здесь являетсяпример перетаскивания из 3.3

Основная проблема - что показать, когда пользователь перетаскивает.В первом примере они используют хороший трюк для создания изображения метки, поэтому действительно похоже, что пользователь перетаскивает виджет.

Очевидно, что было бы намного проще использовать функциональность MDI вQt4, но если это не вариант, я думаю только об этом.

Надеюсь, это поможет.

...