[Qt-interest] Can't post a user event from compute thread to GUI thread
Louai Al-Khanji
louai.khanji at gmail.com
Wed Nov 11 00:03:26 CET 2009
Hi again,
Here's a slightly cleaner version.
-- Louai
On Tue, Nov 10, 2009 at 5:43 PM, Louai Al-Khanji <louai.khanji at gmail.com> wrote:
> Hi
>
> The attached works for me.
>
> -- Louai
>
> On Tue, Nov 10, 2009 at 8:48 AM, Moinier, Pierre (UK)
> <Pierre.Moinier at baesystems.com> wrote:
>> Hi!
>>
>> I have done what you suggested, but the behaviour is the same. Nothing seems
>> to go to event()...
>>
>> So I commented out the call to installEventFilter and to evenFilter and here
>> is my reimplementation of event():
>>
>> bool UpdateView::event(QEvent *event)
>> {
>> std::cout << "hello" << std::endl;
>> if (event->type() == QEvent::User) {
>> std::cout << "hello ... found the event!" << std::endl;
>> return true;
>> }
>>
>> else
>> return false;
>> }
>> If it is easier, I could tar up the couple of files and send it to you...
>>
>> Regards,
>>
>> -Pierre.
>> ________________________________
>> From: Mihail Naydenov [mailto:mlists at ymail.com]
>> Sent: 10 November 2009 12:35
>> To: Moinier, Pierre (UK); qt-interest at trolltech.com
>> Subject: Re: [Qt-interest] Can't post a user event from compute thread to
>> GUI thread
>>
>> *** WARNING ***
>>
>> This message has originated outside your organisation,
>> either from an external partner or the Global Internet.
>> Keep this in mind if you answer this message.
>>
>> After just a quick look, why do you use an event filter, when you are
>> sending events directly to that object?
>> Just reimplement event() in UpdateView and you will be ok.
>>
>> Also note that your implementation of instance() is NOT thread safe. You can
>> Q_GLOBAL_STATIC macro to help you out in that.
>> (no how to use it, look at QThreadPool or some other singleton in qt's src)
>>
>> MihailNaydenov
>>
>> From: "Moinier, Pierre (UK)" <Pierre.Moinier at baesystems.com>
>> To: qt-interest at trolltech.com
>> Sent: Tue, November 10, 2009 1:14:03 PM
>> Subject: [Qt-interest] Can't post a user event from compute thread to GUI
>> thread
>>
>> Hi!
>>
>> I am trying to figure out how to send an event fom a thread to the main
>> visualisation thread using postEvent, installEventFilter and eventFilter.
>> I am pasting parts of the test code I am using, which compiles, but somehow,
>> the event is probably not reaching the filter, beause I am not geting any
>> messages from eventFilter.
>>
>> Could anyone tell me what I am doing wrong?
>>
>> Regards,
>>
>> -Pierre.
>>
>> ------------------------------------------------------------- Test Code
>> ------------------------------------------------------------------
>> main.cpp:
>>
>> #include <QApplication>
>>
>> #include "ComputeThread.h"
>> #include <qpushbutton.h>
>>
>> int main(int argc, char* argv[])
>> {
>> QApplication app(argc, argv);
>> ComputeThread thread;
>> thread.start();
>>
>> QPushButton hello("Hello world!");
>> hello.resize(100, 30);
>>
>> hello.show();
>> return app.exec();
>> }
>> ComputeThread.cpp:
>>
>> #include <iostream>
>> #include <QApplication>
>> #include <QEvent>
>>
>> #include "ComputeThread.h"
>> #include "UpdateView.h"
>>
>> void ComputeThread::run()
>> {
>> for (int i=0;i<100;i++)
>> {
>> sleep(1);
>> std::cout << "sending Event...." << UpdateView::UPDATE_EV1 <<
>> std::endl;
>> QEvent *e = new QEvent(QEvent::User);
>> QApplication::postEvent(&UpdateView::instance(), e);
>> // QCoreApplication::postEvent(&UpdateView::instance(), new
>> QEvent(static_cast<QEvent::Type>(UpdateView::UPDATE_EV1)));
>> }
>> }
>> UpdateView.cpp:
>>
>> #include <iostream>
>> #include <QEvent>
>>
>> #include "UpdateView.h"
>>
>> UpdateView::UpdateView()
>> {
>> std::cout << "hello sailor" << std::endl;
>> installEventFilter(this);
>> }
>>
>> bool UpdateView::eventFilter(QObject *obj, QEvent *event)
>> {
>> std::cout << "hello" << std::endl; !!! I
>> should get Hello on the sceen.....
>> const Event ev = static_cast<Event>(event->type());
>> switch(ev)
>> {
>> case UPDATE_EV1:
>> std::cout << "Updating the scene..." << std::endl;
>> break;
>>
>> default:
>> return false;
>> }
>> return true;
>> }
>> UpdateView.h:
>>
>> #ifndef UPDATEVIEW_H
>> #define UPDATEVIEW_H
>>
>> #include <QEvent>
>> #include <QObject>
>>
>> class UpdateView : public QObject
>> {
>> Q_OBJECT
>> public:
>> UpdateView();
>> static UpdateView& instance()
>> {
>> static UpdateView theinstance;
>> return theinstance;
>> }
>>
>> enum Event {UPDATE_EV1 = 1000 , UPDATE_EV2 = 1001};
>>
>> bool eventFilter(QObject *obj, QEvent *event);
>>
>> };
>>
>> #endif
>>
>> ********************************************************************
>> This email and any attachments are confidential to the intended
>> recipient and may also be privileged. If you are not the intended
>> recipient please delete it from your system and notify the sender.
>> You should not copy it or use it for any purpose nor disclose or
>> distribute its contents to any other person.
>> ********************************************************************
>>
>>
>>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>
>>
>
>
>
> --
> - Louai Al-Khanji
>
--
- Louai Al-Khanji
-------------- next part --------------
A non-text attachment was scrubbed...
Name: main.cpp
Type: text/x-c++src
Size: 1748 bytes
Desc: not available
Url : http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20091110/7865853e/attachment.bin
More information about the Qt-interest-old
mailing list