Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Danila_Bagrofff от Апрель 16, 2009, 10:05



Название: Перемещение виджета. Смена предка.
Отправлено: Danila_Bagrofff от Апрель 16, 2009, 10:05
есть 3 виджета:
Код:
QTableWidget *tbl = new QTableWidget(10,10,this);
QFrame *frm = new QFrame(this);
QWidget *wdg = new QWidget(frm);

QHBoxLayout *hbl = new QHBoxLayout(frame);
hbl->insertWidget(wdg);

//затем в процессе программы
hbl->removeWidget(wdg);
wdg->setParent(tbl);
tbl->setCellWidget(0,0, wdg);

в процессе программы wdg должен перемещаться между двумя виджетами. Соответственно менять родителя. Лэаут сам тоже устанавливает виджету родителя. То есть у wgt становится родителем frm после команды insertWidget().
есть команда setParent(). Но при смене родителя она ругается.
Если мы  перемещаем wdg возникает ошибка:
Цитировать
X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 25 (X_SendEvent)
  Resourse id: .....

Как правильно перемещать виджет между другими?


Название: Re: Перемещение виджета. Смена предка.
Отправлено: lit-uriy от Апрель 16, 2009, 10:57
глянь примерчик (http://www.forum.crossplatform.ru/index.php?showtopic=2577), может что-то для тебя прояснится


Название: Re: Перемещение виджета. Смена предка.
Отправлено: Danila_Bagrofff от Апрель 16, 2009, 11:58
в том то и дело, что setParent также вызывает такую ошибку.

В чем может быть проблема?


Название: Re: Перемещение виджета. Смена предка.
Отправлено: igor_bogomolov от Апрель 16, 2009, 14:46
http://www.forum.crossplatform.ru/index.php?s=&showtopic=2601&view=findpost&p=18622


Название: Re: Перемещение виджета. Смена предка.
Отправлено: lit-uriy от Апрель 16, 2009, 15:05
2 Danila_Bagrofff,
сдаётся мне, что смена родителя здесь - какой-то побочный эффект. А истинная цель видимо в "Перетаскивании" ("Drag-N-Drop") так или нет?
Если так, то подход принципиально другой.


Название: Re: Перемещение виджета. Смена предка.
Отправлено: Danila_Bagrofff от Апрель 16, 2009, 15:46
да, виджет  обладает драгом. таблица обладает дропом.
затем я хочу именно нужный мне виджет переместить. просто установив его в ячейку. драг\дроп напрямую для перемещения здесь не используется.