[Interest] Glueing widgets together

william.crocker at analog.com william.crocker at analog.com
Fri Jun 28 14:56:37 CEST 2013


List:

Any behavior which requires cooperation with the window manager
is a recipe for the insane asylum and the insanity factor is
order N-squared in the number different window managers on which
that behavior has to work. Avoid this like the plague.

:-)

Bill

On 06/28/2013 08:48 AM, Sensei wrote:
> On 6/28/13 10:54 AM, Tony Rietwyk wrote:
>> Hi Sensei,
>>
>> I have a master dialog with a slave dialog attached to one border.  This
>> was done using eventFilter in the slave to listen to the master Move and
>> Resize events - not MouseMove.  It's only 10 lines of code, works well
>> and there is no jerkiness.  It put the code in the slave, since it can
>> be attached to many different dialogs in my app.
>>
>> The same code should work for peer dialogs - but you must be careful to
>> prevent recursion by settings flags in the other dialog before moving it
>> so it doesn't try to move the first one.  The recursion could cause the
>> delays and high CPU usage.
>>
>> Can you show the code that isn't working?
>
> Sure!
>
> My code is as follows. It works, in the sense that, as I said, the
> follower moves to the right position. However, I can move the main
> window and the follower, visibly after a while, pops out where it should
> be. It's a very annoying visual glitch.
>
> I've tried two codes, one with overriding the event, one with a filter.
>
> =====================
> // The follower
> void SubContainer::followActivated(QMoveEvent *event)
> {
>       qWarning(">>  MOVE IT!");
>
>       // Move the follower where the options_ button is
>       QPoint local  = options_->pos();
>       QPoint global = mapToGlobal(local);
>
>       global.setX(global.x() + 0*options_->width());
>       global.setY(global.y() + options_->height());
>
>       qWarning("show on (%d, %d) (%d, %d)", local.x(), local.y(),
> global.x(), global.y());
>
>       follower_->move(global);
> }
>
>
>
> // Move event handler
> void MainWindow::moveEvent(QMoveEvent *event)
> {
>       qWarning("I LIKE TO MOVE IT");
>       container_->getSubContainer()->followActivated(event);
> }
> =====================
>
>
>
> I've tried also (of course not at the same time as the above code) to
> install an event filter, however, and the results are the same:
>
>
> =====================
> // Event filtering
> bool SubContainer::eventFilter(QObject *object, QEvent *event)
> {
>       // The target_ variable contains the MainWindow object
>       if ((object == target_)&&  (event->type() == QEvent::Move))
>       {
>           qWarning("=== filtering object %p / target %p", object, target_);
>           followActivated(NULL);
>       }
>       return true;
> }
> =====================
>
>
>
> There's always a delay in moving the MainWindow and the follower moving
> to its right position.
>
>
> I'm puzzled. How did you succeed in having these two dialogs move
> simultaneously? Can you post an excerpt?
>
>
>
> Thanks&  Cheers!
>
>
>
>
>
>
>
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
>




More information about the Interest mailing list