Russian Qt Forum

Qt => Общие вопросы => Тема начата: UVV от Июль 31, 2009, 09:24



Название: Один и тот же код в windows и linux
Отправлено: UVV от Июль 31, 2009, 09:24
Есть приложение используещее плагины. В плагине вызывается функция из основного приложения.
Под linux всё обрабатывается без проблем. В windows же функция возвращает ноль и приложение падает.
Кто-нибудь сталкивался с подобным?

Да, та же самая функция ещё используется в статическом плагине и нормально отрабатывает и под linux и под windows.


Название: Re: Один и тот же код в windows и linux
Отправлено: f-r-o-s-t от Июль 31, 2009, 09:40
А тебе qt на  windows случайно не в статической сборке ?


Название: Re: Один и тот же код в windows и linux
Отправлено: UVV от Июль 31, 2009, 09:46
Не, статика вообще с плагинами не умеет работать.
Да, на обоих системах Qt 4.5.1.


Название: Re: Один и тот же код в windows и linux
Отправлено: f-r-o-s-t от Июль 31, 2009, 09:49
Ну тогда расскажи хоть примерно что за функция.


Название: Re: Один и тот же код в windows и linux
Отправлено: UVV от Июль 31, 2009, 09:56
Код
C++ (Qt)
QString myClass::getCurrentText() const
{
   FileEditor* pActiveEditor = activeEditor();
   return pActiveEditor->toPlainText();
}
 

FileEditor - наследник от QTextEdit.


Название: Re: Один и тот же код в windows и linux
Отправлено: BRE от Июль 31, 2009, 10:01
Код
C++ (Qt)
QString myClass::getCurrentText() const
{
   FileEditor* pActiveEditor = activeEditor();
   return pActiveEditor->toPlainText();
}
 

FileEditor - наследник от QTextEdit.
Боюсь спросить, а в activeEditor() что написано.  ;)


Название: Re: Один и тот же код в windows и linux
Отправлено: UVV от Июль 31, 2009, 10:40
:)
Код
C++ (Qt)
QMdiArea*       m_workspace;
...
FileEditor* myClass::activeEditor() const
{
   QMdiSubWindow* activeSubWin = m_workspace->activeSubWindow();
   if (activeSubWin)
       return fileEditor(activeSubWin);
 
   return 0;
}
 
FileEditor* myClass::fileEditor(const QMdiSubWindow* w) const
{
   return qobject_cast<FileEditor*>(w->widget());
}
 


Название: Re: Один и тот же код в windows и linux
Отправлено: SASA от Июль 31, 2009, 14:25
Какая функция возвращает 0 m_workspace->activeSubWindow() или  myClass::fileEditor?


Название: Re: Один и тот же код в windows и linux
Отправлено: developer от Июль 31, 2009, 15:43
Код:
C++ (QT)
QString myClass::getCurrentText() const
{
    FileEditor* pActiveEditor = activeEditor();
    return pActiveEditor->toPlainText();
}

Вот здесь мне что-то не нравится:  если activeEditor() возвратит 0 то все равно призойдет вызов pActiveEditor->toPlainText(), вот тут то оно и падает, просто по разному обрабатывается на разных системах.


Название: Re: Один и тот же код в windows и linux
Отправлено: UVV от Июль 31, 2009, 18:02
Итак, проблема была в qobject_cast().
Решение здесь http://www.qtcentre.org/forum/f-qt-programming-2/t-casting-result-of-qwidgetstack-currentwidget-5037.html


Название: Re: Один и тот же код в windows и linux
Отправлено: SASA от Август 04, 2009, 16:40
Так чё нужно сделать сделать, чтобы qobject_cast() для классов из длл срабатывал в основной проге?
P.S. из http://www.qtcentre.org/forum/f-qt-programming-2/t-casting-result-of-qwidgetstack-currentwidget-5037.html не понял.