Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > DockWidget и plug-in


Автор: anil 18.8.2009, 19:39
Здравствуйте! 

Проблема вот в чем. Есть несколько самописных плагинов, которые кидаются в дизайнере на QMainWindow. В конструкторе главного окна они "оборачиваются" в доквиджеты, все точно как http://doc.trolltech.com/4.2/mainwindows-dockwidgets-mainwindow-cpp.html. 

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

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

Автор: korbian 19.8.2009, 09:22
минимальный компилируемый пример приведи!

Автор: anil 19.8.2009, 17:41
чего тут компилировать?) 

ui_myproj.h
Код

...
Plugin1 * plugin1 = new Plugin1();
...


mainwindow.cpp
Код

MyMainWindow::MyMainWindow()
{
SetWidgetAsDockable( mUi.plugin1 ); // вылетает
}


mainwindow.cpp
Код

MyMainWindow::MyMainWindow()
{
SetWidgetAsDockable( new Plugin1() ); // нормально работает
}


Что-то вроде того) вопрос в том, почему созданный в уишнике объект отказывается работать, а создаваемый в конструкторе - нет.

Автор: korbian 20.8.2009, 08:29
Цитата(anil @  19.8.2009,  18:41 Найти цитируемый пост)
чего тут компилировать?) 

код
Цитата(anil @  19.8.2009,  18:41 Найти цитируемый пост)
Plugin1 * plugin1 = new Plugin1();

здесь, выделяется память под локальную переменную
Цитата(anil @  19.8.2009,  18:41 Найти цитируемый пост)
SetWidgetAsDockable( mUi.plugin1 ); // вылетает

здесь, методу передается переменная член структуры\класса. кода присваивания этому члену переменной, которой выделялась память я не увидел. проверте в отладчике, на что указывает mUi.plugin1 в момент передачи SetWidgetAsDockable.

повторю еще раз, привидите минимальный компилируемый пример, иллюстрирующий вашу проблему, а не выдержки, приведенные вами.

Автор: anil 20.8.2009, 17:32
Цитата

здесь, методу передается переменная член структуры\класса. кода присваивания этому члену переменной, которой выделялась память я не увидел.


странное видение у вас, товарищ специалист) киньте на формочку в дизайнере любой виджет, а потом посмотрите файлик "ui_<somename>.h", там вы многое для себя найдете)

собственно баг побежден, вылет был не связан ни с dockwidget, ни с использованием плагинов, однако факт остается фактом - при инстанцировании непосредственно в конструкторе главного окна все работает нормально, тогда как "уишные" объекты летят...

Автор: korbian 21.8.2009, 08:20
Цитата(anil @  20.8.2009,  18:32 Найти цитируемый пост)
странное видение у вас, товарищ специалист) киньте на формочку в дизайнере любой виджет, а потом посмотрите файлик "ui_<somename>.h", там вы многое для себя найдете)

не хамите!

Цитата(anil @  20.8.2009,  18:32 Найти цитируемый пост)
однако факт остается фактом - при инстанцировании непосредственно в конструкторе главного окна все работает нормально, тогда как "уишные" объекты летят

на это я вам и намекал! при отладке должно стать понятно почему! 
 
последний раз повторю, приведите минимальный компилируемый пример и, возможно, вам помогут.

Автор: anil 21.8.2009, 08:23
Да не нервничайте Вы так! Проблема решена, тема закрыта. Или за Вами всегда должно быть последнее слово? smile 

Автор: korbian 21.8.2009, 08:30
Цитата(anil @  21.8.2009,  09:23 Найти цитируемый пост)
Или за Вами всегда должно быть последнее слово? 

опять хамите!

Автор: anil 21.8.2009, 08:37
Простите пожалуйста! Всенепременно воспользуюсь Вашими советами! Благодарю за помощь! Нормально?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)