[Qt-interest] QWidget and QThread ?

Patric userqt at gmail.com
Fri Jun 5 22:32:23 CEST 2009


Yes... runtime error...

----- Original Message ----- 
From: "Eric Clark" <eclark at ara.com>
To: <qt-interest at trolltech.com>
Sent: Friday, June 05, 2009 11:25 PM
Subject: Re: [Qt-interest] QWidget and QThread ?


> Did you try to hide it?
>
> -----Original Message-----
> From: Patric [mailto:userqt at gmail.com]
> Sent: Friday, June 05, 2009 3:24 PM
> To: Eric Clark; qt-interest at trolltech.com
> Subject: Re: [Qt-interest] QWidget and QThread ?
>
> It's QLineEdit. But I don't use signals&slots, I'm just calling the method
> of the object from different thread. It's QLineEdit in my custom widget.
>
> Patric
>
> ----- Original Message ----- 
> From: "Eric Clark" <eclark at ara.com>
> To: <qt-interest at trolltech.com>
> Sent: Friday, June 05, 2009 11:12 PM
> Subject: Re: [Qt-interest] QWidget and QThread ?
>
>
>> Are you sure that it is coming from a different thread? Try hiding the
>> widget. What type of widget is it? Is it your own special widget, or is 
>> it
>> a QLineEdit or something?
>>
>> -----Original Message-----
>> From: Patric [mailto:userqt at gmail.com]
>> Sent: Friday, June 05, 2009 3:01 PM
>> To: Eric Clark; qt-interest at trolltech.com
>> Subject: Re: [Qt-interest] QWidget and QThread ?
>>
>> Hm, it's strange. I just did it 5 minutes ago.
>> I set the text of a line in my widget from a different thread trought the
>> *ui variable.
>> There was so error message and the text changed...
>>
>> Patric
>> ----- Original Message ----- 
>> From: "Eric Clark" <eclark at ara.com>
>> To: <qt-interest at trolltech.com>
>> Sent: Friday, June 05, 2009 10:50 PM
>> Subject: Re: [Qt-interest] QWidget and QThread ?
>>
>>
>>> It really depends on what you are doing. Most of the time, you cannot
>>> manipulate a QWidget anywhere other than the GUI thread. This is a
>>> requirement of Qt and if you attempt to do it, Qt will crash and report
>>> an
>>> error saying something along the lines of "Cannot manipulate QWidget
>>> outside of the GUI thread," it's been a while since I have had one
>>> because
>>> I know better now. It is difficult to know whether or not the action is
>>> allowed, but I would say that you are best off never allowing
>>> manipulation
>>> to happen on a different thread. I know, for example, that you cannot
>>> hide/show/enable/disable widgets from any thread other than the GUI
>>> thread. Setting text, checking boxes, creating widgets!!! Is not allowed
>>> outside of the GUI thread. If you make an attempt at doing it, you will
>>> know that you have done something wrong because Qt will tell you.
>>>
>>> I think this limitation is common among GUI frameworks, including MFC. I
>>> am not a platform developer like those that work at Trolltech, so I do
>>> not
>>> know the software or hardware reasons for this limitation, you would 
>>> have
>>> to ask someone on Trolltech's team to know the details.
>>>
>>> Eric
>>>
>>> -----Original Message-----
>>> From: Patric [mailto:userqt at gmail.com]
>>> Sent: Friday, June 05, 2009 1:44 PM
>>> To: Eric Clark; qt-interest at trolltech.com
>>> Subject: Re: [Qt-interest] QWidget and QThread ?
>>>
>>> Hm, I see. But Eric, why is that needed ? Why the data should be
>>> manipulated
>>> only from the main thread ?
>>>
>>> Patric
>>>
>>> ----- Original Message ----- 
>>> From: "Eric Clark" <eclark at ara.com>
>>> To: <qt-interest at trolltech.com>
>>> Sent: Friday, June 05, 2009 6:21 PM
>>> Subject: Re: [Qt-interest] QWidget and QThread ?
>>>
>>>
>>>> Patric,
>>>>
>>>> We do some similar stuff in our application. This can be pretty tricky
>>>> though and you need to be very careful with the functions that
>>>> manipulate
>>>> the data. Basically, when a function needs to manipulate the QWidget's
>>>> data, it needs to be done from the GUI thread. Here is our approach:
>>>>
>>>> void Foo()
>>>> {
>>>>   If this is not the main thread
>>>>   {
>>>>     Push the call to Foo onto the GUI thread
>>>>     Return;
>>>>   }
>>>>
>>>>   // Operate on the data of the widget
>>>> }
>>>>
>>>> Basically, if you have a function, Foo, that operates on the widget,
>>>> when
>>>> the function is called, check to see if it was called from the main GUI
>>>> thread. If it was not, then you need to post an event to the GUI thread
>>>> to
>>>> call this function. How you post the event is up to you. We have a
>>>> special
>>>> Custom event to handle these calls and we also implemented a macro
>>>> called
>>>> ThreadCheck that checks to see if the call was made on the GUI thread,
>>>> and
>>>> if it wasn't, it posts the event to the GUI thread, and returns out of
>>>> the
>>>> function.
>>>>
>>>> This approach can be somewhat tricky, and sometimes you may need to 
>>>> wait
>>>> for the event to get processed before returning from the function. If
>>>> you
>>>> need to wait, use some kind of static or global variable that gets set
>>>> when the function is done running and sit in a while loop until the
>>>> variable says it has been called. Inside the while loop you can sleep
>>>> the
>>>> thread periodically.
>>>>
>>>> Eric
>>>>
>>>> -----Original Message-----
>>>> From: qt-interest-bounces at trolltech.com
>>>> [mailto:qt-interest-bounces at trolltech.com] On Behalf Of Patric
>>>> Sent: Friday, June 05, 2009 5:11 AM
>>>> To: Sean Harmer; qt-interest at trolltech.com
>>>> Subject: Re: [Qt-interest] QWidget and QThread ?
>>>>
>>>> Well, I have an application. With tabs. Every tab have some fields and
>>>> every
>>>> tab is different widget, created with QT Designer. I use the multiple
>>>> inheritance approach here.
>>>>
>>>> The GUI is generated from the main thread. But I want the data in each
>>>> tab
>>>> (i.e. the fields in the tabs) to be managed by different threads, so 
>>>> the
>>>> GUI
>>>> not freeze if there is a problem or a slower operation.
>>>> And I'm wondering how to design this situation. It's all about.
>>>>
>>>> I didn't know I can't multiple inherite QObject.
>>>>
>>>> Regards,
>>>> Patric
>>>>
>>>>
>>>> ----- Original Message ----- 
>>>> From: "Sean Harmer" <sean.harmer at maps-technology.com>
>>>> To: <qt-interest at trolltech.com>
>>>> Sent: Friday, June 05, 2009 1:03 PM
>>>> Subject: Re: [Qt-interest] QWidget and QThread ?
>>>>
>>>>
>>>>> Hi,
>>>>>
>>>>> On Friday 05 Jun 2009 10:56:35 Patric wrote:
>>>>>> Hi all,
>>>>>> I have a form, which i generate in a widget using the multiple
>>>>>> inheritance
>>>>>> approach. I need a thread that operates on the data of this widget.
>>>>>> I'm
>>>>>> wondering, is it a good idea to make my widget thread also (i.e.
>>>>>> multiple
>>>>>> inheritance from QWidget and QThread), so it'll be more convinient to
>>>>>> operate on the data. What do you think about it ?
>>>>> In general no. You can only inherit from QObject once and both QWidget
>>>>> and
>>>>> QThread are derived from QObject.
>>>>>
>>>>> Also all GUI operations must be performed in the main thread (the one
>>>>> in
>>>>> which
>>>>> QApplication lives).
>>>>>
>>>>> I would go even further and suggest that you redesign your application
>>>>> to
>>>>> separate out the data and processing side from the GUI side. It will
>>>>> make
>>>>> things cleaner in the long run.
>>>>>
>>>>> What is it you are trying to achieve? We may be able to give you some
>>>>> nudges
>>>>> in suitable directions?
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Sean
>>>>>
>>>>> _______________________________________________
>>>>> Qt-interest mailing list
>>>>> Qt-interest at trolltech.com
>>>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>>>
>>>>>
>>>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>>>> signature database 4098 (20090522) __________
>>>>>
>>>>> The message was checked by ESET NOD32 Antivirus.
>>>>>
>>>>> http://www.eset.com
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>>> signature database 4098 (20090522) __________
>>>>
>>>> The message was checked by ESET NOD32 Antivirus.
>>>>
>>>> http://www.eset.com
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Qt-interest mailing list
>>>> Qt-interest at trolltech.com
>>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>>
>>>> _______________________________________________
>>>> Qt-interest mailing list
>>>> Qt-interest at trolltech.com
>>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>>
>>>>
>>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>>> signature database 4098 (20090522) __________
>>>>
>>>> The message was checked by ESET NOD32 Antivirus.
>>>>
>>>> http://www.eset.com
>>>>
>>>>
>>>>
>>>
>>>
>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>> signature database 4098 (20090522) __________
>>>
>>> The message was checked by ESET NOD32 Antivirus.
>>>
>>> http://www.eset.com
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Qt-interest mailing list
>>> Qt-interest at trolltech.com
>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>
>>>
>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>> signature database 4098 (20090522) __________
>>>
>>> The message was checked by ESET NOD32 Antivirus.
>>>
>>> http://www.eset.com
>>>
>>>
>>>
>>
>>
>> __________ Information from ESET NOD32 Antivirus, version of virus
>> signature database 4098 (20090522) __________
>>
>> The message was checked by ESET NOD32 Antivirus.
>>
>> http://www.eset.com
>>
>>
>>
>>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>
>>
>> __________ Information from ESET NOD32 Antivirus, version of virus
>> signature database 4098 (20090522) __________
>>
>> The message was checked by ESET NOD32 Antivirus.
>>
>> http://www.eset.com
>>
>>
>>
>
>
> __________ Information from ESET NOD32 Antivirus, version of virus 
> signature database 4098 (20090522) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.eset.com
>
>
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>
> __________ Information from ESET NOD32 Antivirus, version of virus 
> signature database 4098 (20090522) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.eset.com
>
>
> 


__________ Information from ESET NOD32 Antivirus, version of virus signature database 4098 (20090522) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com






More information about the Qt-interest-old mailing list