[Interest] Can't get menu with QWidgetAction to close after click! (Mac OS 10.6.8, Qt 4.8.3)

Jim Prouty jim at wavemetrics.com
Wed Oct 10 03:25:14 CEST 2012


On Oct 9, 2012, at 5:29 PM, Alex Malyushytskyy wrote:

> By the way try to call   QAction->trigger();
> in _onPushButton(bool b)
> 
> If MAC implementation depends on this signal it definitely should
> solve the problem.
> By default QWidgetAction does not call it:
> 
> "Note that it is up to the widget to activate the action, for example
> by reimplementing mouse event handlers and calling
> QAction::trigger()."
> 

This does not close the menu, either. Again, on Macintosh (using Cocoa menus).

Though I'm not using the signal from the QWidgetAction in the test case, I amended the code to try this idea out.

I stashed the SpinBoxAction (derived from QWidgetAction) in the application's _wAction3 member variable and called trigger() on it in the _onPushButton() slot:


     // Widget Action 3
    SpinBoxAction * spinBoxAction = new SpinBoxAction(QLatin1String("Done"),menu);
    app._wAction3= spinBoxAction;
    menu->addAction( spinBoxAction );

    if( QWidget *widget= spinBoxAction->requestWidget(menu) ) {
        if( QPushButton *button = widget->findChild<QPushButton *>() ) {
            QObject::connect(button, SIGNAL(clicked(bool)), &app, SLOT(_onPushButton(bool)));
        }
    }

...

  void SpinApplication::_onPushButton(bool b)
 {
     Q_UNUSED(b);
     if(_wAction3)
         _wAction3->trigger();  // doesn't help close the menu, but may have been necessary to propogate the trigger to receivers of the action.
     if(_menu) {
        _menu->hide();             // doesn't help
        bool closed= _menu->close(); // doesn't work
         qDebug() << "Closed:" << closed;
      }
 }


========================================================================

Jim "How does it work?" Prouty

Voice: (503) 620-3001, FAX: (503) 620-6754
Makers of IGOR Pro, scientific data analysis and graphing for Mac and PC
http://www.wavemetrics.com




More information about the Interest mailing list