Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2018-11

Order of OnCreate and OnActivate in Qt4

5 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Vojtěch Čihák

Hi,
 
I met strange bug today. I have these lines in .lpr: ...
Application.CreateForm(TFrmMain, FrmMain);
...
Application.CreateForm(TFrmContext, FrmContext);
...
 
and the order of events in Qt and GTk2 is:
FrmMain.Create
FrmContext.Create
FrmMain.Activate
 
Today I used tool qtconfig and changed style (Appearance) from Plastique to QtCurve. Now my code crashes, order of events is: FrmMain.Create
FrmMain.Activate
CRASH, because code in OnActivate assumes that FrmContext already exists.  
So, Qt4+Plastique has different order of events than Qt4+QtCurve. Unfortunately, I cannot reproduce with simple demo.  
What I'm doing wrong? Do I rely on something that is not guaranteed?  
Thanks.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20181125/1c38ab93/attachment.html>

Reply by email

zeljko
to Vojtěch Čihák
Vojtěch Čihák wrote 14 lines
Today I used tool qtconfig and changed style (Appearance) from Plastique to QtCurve. Now my code crashes, order of events is: FrmMain.Create FrmMain.Activate CRASH, because code in OnActivate assumes that FrmContext already exists. So, Qt4+Plastique has different order of events than Qt4+QtCurve. Unfortunately, I cannot reproduce with simple demo. What I'm doing wrong? Do I rely on something that is not guaranteed?

Afaik not, that should work w/o problems. Never seen such kind of problem with different themes. In any case, without example project I cannot help.

zeljko

Reply by email

zeljko
to Vojtěch Čihák:   I met strange bug today. I have these lines in .lpr: ...…
Vojtěch Čihák wrote 7 lines
CRASH, because code in OnActivate assumes that FrmContext already exists. So, Qt4+Plastique has different order of events than Qt4+QtCurve. Unfortunately, I cannot reproduce with simple demo. What I'm doing wrong? Do I rely on something that is not guaranteed?

Try to disable usage of QtNativeEventFilter in qtdefines.inc if it's enabled.

zeljko

Reply by email

Kostas Michalopoulos
to zeljko

I wouldn't rely on event order as anything between the creation to Application.Run could call Application.ProcessMessages - including some components/controls you may be using. As a rule of thumb you should assume that after calling a control (or form) that it can start receiving events.

In Qt4 styling is done through native code (QStyle subclasses) and it can alter widgets (QStyle::polish) so it isn't unthinkable that a theme could do something that generates events.

On Sun, Nov 25, 2018 at 6:47 PM zeljko via lazarus <

Show quoted text 22 lines
wrote: On 11/25/2018 04:43 PM, Vojtěch Čihák via lazarus wrote: > CRASH, because code in OnActivate assumes that FrmContext already exists. > > So, Qt4+Plastique has different order of events than Qt4+QtCurve. > > Unfortunately, I cannot reproduce with simple demo. > > What I'm doing wrong? Do I rely on something that is not guaranteed? Try to disable usage of QtNativeEventFilter in qtdefines.inc if it's enabled. zeljko -- _______________________________________________ lazarus mailing list https://lists.lazarus-ide.org/listinfo/lazarus

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20181126/6faf9ba6/attachment.html>

Reply by email

Vojtěch Čihák
to zeljko: Try to disable usage of QtNativeEventFilter in qtdefines.inc if it's enabled. zeljko

Thanks, Kostas, especially part about Qt styling.
 
I answered my solution yesterday, but it didn't appear in ML, it went to zejlko only - I noticed later. So here it is:  
I don't have QtNativeEventFilter in , I found simple workaround. I create main form with Visible:=False; and when all other forms are created I do FrmMain.Show; (in *.lpr). The order of events is as expected.  
Thanks.
 

Reply by email