Tim-

On Macintosh, cmd-. is the cancel signal, like ctrl-break in Windows, or Ctrl-C 
for Linux. In fact, when building with Qt and Cocoa, you don't get it at all 
because Cocoa eats it up. We went to somewhat extreme lengths to intercept 
cmd-. so that we can use it to cancel user programs (our application includes a 
user programming language).

You really should NOT use cmd-. as anything other than a cancel signal.

Here is what we did to get access to cmd-. key events:

In a .mm file:

 bool WMNSEventIsCmdPeriodKeyDown(void * event)
{
        NSEvent * nsevent = reinterpret_cast<NSEvent *>(event);
        if ([nsevent type] == NSKeyDown)
        {
                if ([nsevent modifierFlags] & NSCommandKeyMask)
                {
                        NSString * chars = [nsevent 
charactersIgnoringModifiers];
                        return [chars characterAtIndex:0] == 0x2E;              
                        // Unicode encoding for period
                }
        }
        return false;
}

bool WMNSEventIsCmdPeriodKeyUp(void * event)
{
        NSEvent * nsevent = reinterpret_cast<NSEvent *>(event);
        if ([nsevent type] == NSKeyUp)
        {
                if ([nsevent modifierFlags] & NSCommandKeyMask)
                {
                        NSString * chars = [nsevent 
charactersIgnoringModifiers];
                        return [chars characterAtIndex:0] == 0x2E;
                }
        }
        return false;
}

Then, with Qt 5, we define a macintosh event filter class:

                class macEventFilterClass : public QObject, public 
QAbstractNativeEventFilter
                {
                        Q_OBJECT

                        public:
                                bool                            
nativeEventFilter(const QByteArray&, void* message, long*);

                        signals:
                                void                            
caughtCancelEvent(bool isDown);
                };

 bool macEventFilterClass::nativeEventFilter(const QByteArray &, void * 
message, long *)
{
        bool result = false;

        if (WMNSEventIsCmdPeriodKeyDown(reinterpret_cast<void *>(message)))
        {
                emit caughtCancelEvent(true);
                result = true;
        }
        else if (WMNSEventIsCmdPeriodKeyUp(reinterpret_cast<void *>(message)))
        {
                emit caughtCancelEvent(false);
                result = true;
        }

        return result;
}

and in our QApplication-derived class constructor, we install it on the 
application:

                        _macEventFilterObject = new macEventFilterClass;
                        connect(_macEventFilterObject, 
SIGNAL(caughtCancelEvent(bool)), this, SLOT(_caughtMacCancelEvent(bool)));
                        installNativeEventFilter(_macEventFilterObject);


On Sep 3, 2014, at 2:38 PM, Tim Blechmann <t...@klingt.org> wrote:

> hi all,
> 
> i wonder, does ctrl-. (as in cmd-.) have any special treatment in qt5?
> i'd like to use it a shortcut of an action which is available from the
> menu bar, but it does not get triggered. otoh, in QFileDialog and the
> like get seem to trigger the "cancel" button.
> 
> any idea how use it for application-defined shortcuts?
> 
> thnx,
> tim
> 
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

Regards,
John Weeks

WaveMetrics, Inc.
Phone (503) 620-3001
Fax   (503) 620-6754
email   supp...@wavemetrics.com

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to