[Qt-interest] QWinWidget problem when using DeleteOnClose attribute

elizabeta petreska elizabeta.petreska at gmail.com
Thu Sep 24 08:23:14 CEST 2009


Hello
I am sorry for the confusion , but I forget to write setupUi in the
constructor, in the real code it is there. So this is not setupUi problem
for sure.

On Wed, Sep 23, 2009 at 11:41 AM, elizabeta petreska <
elizabeta.petreska at gmail.com> wrote:

> I found this one in Qt sources :
>
> bool QWinWidget::eventFilter(QObject *o, QEvent *e)
> {
> ..........................
> case QEvent::Hide:
>     if (reenable_parent) {
>         EnableWindow(hParent, true);
>         reenable_parent = false;
>     }
>     resetFocus();
>         if (w->testAttribute(Qt::WA_DeleteOnClose) && w->isWindow())
>         deleteLater();
> .....
> }
>
> The showMinimized () function send hide event.
>
> I am wondering what is the reason for making the QWinWidget to delete later
> when it receives hide event.
>
>
>
>
>
>
>
> On Wed, Sep 23, 2009 at 9:24 AM, elizabeta petreska <
> elizabeta.petreska at gmail.com> wrote:
>
>> Hello
>>
>> First of all, sorry if this is the wrong mailing list, just direct me
>> where to post my question if it is.
>>
>> I am using Mfc to Qt Solution for showing Qt widgets in plugin dlls that
>> are loaded in third party Mfc application.
>> I am using the function QMfcApp::pluginInstance in my DllMain function to
>> make the QApplication object.
>>
>> I reproduce the error on this very simple listing :
>>
>> class SimpleDlg : public QDialog,public Ui::Dlg
>> {
>> Q_OBJECT
>>
>> public:
>>     SimpleDlg(QWidget* parent=0);
>>     ~SimpleDlg(){}
>>     private slots:
>>     OnButtonClicked();
>> };
>>
>> and in the implementation file :
>>
>> SimpleDlg::SimpleDlg(QWidget* parent):QDialog(parent)
>> {
>>     this ->setAttribute(Qt::WA_DeleteOnClose);
>> }
>>
>> SimpleDlg::OnButtonClicked()
>> {
>>          1:      this->showMinimized();
>>
>>          2  :      MSG msg;
>>          3:          PeekMessage( &msg, NULL, 0, 0,0 );
>>
>>          4:         lineEdit->setText("Crash"); //crashes here. If I
>> comment line this->showMinimized() the crash doesnot happen
>>
>>          5:         this->showMaximized();
>>
>> }
>>
>> somewhere in the plugin dll :
>>
>> QWinWidget* win=new QWinWidget(MfcAppHandle);
>> win->showCentered();
>> SimpleDlg* dlg=new SimpleDlg(win);
>> dlg->show();
>>
>> The crash is occuring in line 4, since the dialog is already deleted when
>> the execution comes to that line.
>> Also note that if I uncomment line 1 i.e showMinimized() the crash is not
>> happening. The dialog is deleted after PeekMessage function, cause then the
>> Qt message hook which is
>> set with the Qt Mfc Migration Solution is executed.
>>
>> So the question is who is sending the DefferedDelete event, is it
>> showMinimized () ? I was thinking that this event will be sent only
>> when I close the dialog hence the name Qt::WA_DeleteOnClose.
>>
>> Also I don't think that the DefferedDelete event is send by
>> showMinimized() cause this doesnot make sense at all. So when the
>> DefferedDelete should be sent  normally and
>> what could be the problem in my example ?
>>
>> Note that the when I show my dialog from regular Qt application i.e not
>> Mfc everything is working as it should.
>>
>> Thank you for your time
>>
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20090924/fe771069/attachment.html 


More information about the Qt-interest-old mailing list