summaryrefslogtreecommitdiffstats
path: root/doc/src/platforms/mac-differences.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/platforms/mac-differences.qdoc')
-rw-r--r--doc/src/platforms/mac-differences.qdoc339
1 files changed, 339 insertions, 0 deletions
diff --git a/doc/src/platforms/mac-differences.qdoc b/doc/src/platforms/mac-differences.qdoc
new file mode 100644
index 0000000..b911510
--- /dev/null
+++ b/doc/src/platforms/mac-differences.qdoc
@@ -0,0 +1,339 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \page mac-differences.html
+ \title Qt for Mac OS X - Specific Issues
+ \brief A description of issues with Qt that are specific to Mac OS X.
+ \ingroup platform-specific
+
+ This file outlines known issues and possible workarounds when
+ using Qt on Mac OS X. Contact Qt's technical support team if you find
+ additional issues which are not covered here. (See also the
+ document \l{qtmac-as-native.html} {Qt is Mac OS X Native}.)
+
+ \tableofcontents
+
+ \section1 GUI Applications
+
+ Mac OS X handles most applications as "bundles". A bundle is a
+ directory structure that groups related files together (e.g.,
+ widgets.app/). GUI applications in particular must be run from a
+ bundle or by using the open(1), because Mac OS X needs the bundle
+ to dispatch events correctly, as well as for accessing the menu
+ bar.
+
+ If you are using older versions of GDB you must run with the full
+ path to the executable. Later versions allow you to pass the
+ bundle name on the command line.
+
+ \section1 Painting
+
+ Mac OS X always double buffers the screen so the
+ Qt::WA_PaintOnScreen attribute has no effect. Also it is
+ impossible to paint outside of a paint event so
+ Qt::WA_PaintOutsidePaintEvent has no effect either.
+
+ \section1 Library Support
+
+ \section2 Qt libraries as frameworks
+
+ By default, Qt is built as a set of frameworks. Frameworks is the
+ Mac OS X "preferred" way of distributing libraries. There are
+ definite advantages to using them. See
+ \l{http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/index.html}
+ {Apple's Framework Programming Guide} for more information.
+
+ In general, this shouldn't be an issue because qmake takes care of
+ the specifics for you. The
+ \l{http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/index.html}
+ {Framework Programming Guide} discusses issues to keep in mind
+ when choosing frameworks over the more typical, dynamic libraries.
+ However, one point to remember is: \bold {Frameworks always link
+ with "release" versions of libraries}.
+
+ If you actually want to use a \e{debug} version of a Qt framework,
+ you must ensure that your application actually loads that debug
+ version. This is often done by using the DYLD_IMAGE_SUFFIX
+ environment variables, but that way often doesn't work so well.
+ Instead, you can temporarily swap your debug and release versions,
+ which is documented in
+ \l{http://developer.apple.com/technotes/tn2004/tn2124.html#SECJUSTONELIB}
+ {Apple's "Debugging Magic" technical note}.
+
+ If you don't want to use frameworks, simply configure Qt with
+ \c{-no-framework}.
+
+ \section2 Bundle-Based Libraries
+
+ If you want to use some dynamic libraries in your Mac OS X
+ application bundle (the application directory), create a
+ subdirectory named "Frameworks" in the application bundle
+ directory and place your dynamic libraries there. The application
+ will find a dynamic library if it has the install name
+ \e{@executable_path/../Frameworks/libname.dylib}.
+
+ If you use \c qmake and Makefiles, use the \c QMAKE_LFLAGS_SONAME setting:
+
+ \snippet doc/src/snippets/code/doc_src_mac-differences.qdoc 0
+
+ Alternatively, you can modify the install name using the
+ install_name_tool(1) on the command line. See its manpage for more
+ information.
+
+ Note that the \c DYLD_LIBRARY_PATH environment variable will
+ override these settings, and any other default paths, such as a
+ lookup of dynamic libraries inside \c /usr/lib and similar default
+ locations.
+
+ \section2 Combining Libraries
+
+ If you want to build a new dynamic library combining the Qt 4
+ dynamic libraries, you need to introduce the \c{ld -r} flag. Then
+ relocation information is stored in the output file, so that
+ this file could be the subject of another \c ld run. This is done
+ by setting the \c -r flag in the \c .pro file, and the \c LFLAGS
+ settings.
+
+ \section2 Initialization Order
+
+ dyld(1) calls global static initializers in the order they are
+ linked into your application. If a library links against Qt and
+ references globals in Qt (from global initializers in your own
+ library), be sure to link your application against Qt before
+ linking it against the library. Otherwise the result will be
+ undefined because Qt's global initializers have not been called
+ yet.
+
+ \section1 Compile-Time Flags
+
+ The follewing flags are helpful when you want to define Mac OS X specific
+ code:
+
+ \list
+
+ \o Q_OS_DARWIN is defined when Qt detects you are on a
+ Darwin-based system (including the Open Source version)
+
+ \o Q_WS_MAC is defined when the Mac OS X GUI is present.
+
+ \o QT_MAC_USE_COCOA is defined when Qt is built to use the Cocoa framework.
+ If it is not present, then Qt is using Carbon.
+
+ \endlist
+
+ A additional flag, Q_OS_MAC, is defined as a convenience whenever
+ Q_OS_DARWIN is defined.
+
+ If you want to define code for specific versions of Mac OS X, use
+ the availability macros defined in /usr/include/AvailabilityMacros.h.
+
+ See QSysInfo for information on runtime version checking.
+
+ \section1 Mac OS X Native API Access
+
+ \section2 Accessing the Bundle Path
+
+ The Mac OS X application is actually a directory (ending with \c
+ .app). This directory contains sub-directories and files. It may
+ be useful to place items (e.g. plugins, online-documentation,
+ etc.) inside this bundle. You might then want to find out where
+ the bundle resides on the disk. The following code returns the
+ path of the application bundle:
+
+ \snippet doc/src/snippets/code/doc_src_mac-differences.qdoc 1
+
+ Note: When OS X is set to use Japanese, a bug causes this sequence
+ to fail and return an empty string. Therefore, always test the
+ returned string.
+
+ For more information about using the CFBundle API, see
+ \l{http://developer.apple.com/documentation/CoreFoundation/Reference/CFBundleRef/index.html}
+ {Apple's Developer Website}.
+
+ \section2 Translating the Application Menu and Native Dialogs
+
+ The items in the Application Menu will be merged correctly for
+ your localized application, but they will not show up translated
+ until you
+ \l{http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFBundles/Concepts/BundleAnatomy.html#//apple_ref/doc/uid/20001119-105003-BAJFDAAG}
+ {add a localized resource folder} to the application bundle.
+ The main thing you need to do is create a file called
+ locversion.plist. Here is an example for Norwegian:
+
+ \snippet doc/src/snippets/code/doc_src_mac-differences.qdoc 2
+
+ Now when you run the application with your preferred language set
+ to Norwegian, you should see menu items like "Avslutt" instead of
+ "Quit".
+
+ \section1 User Interface
+
+ \section2 Right-Mouse Clicks
+
+ If you want to provide right-mouse click support for Mac OS X, use
+ the QContextMenuEvent class. This will map to a context menu
+ event, i.e., a menu that will display a pop-up selection. This is
+ the most common use of right-mouse clicks, and maps to a
+ control-click with the Mac OS X one-button mouse support.
+
+ \section2 Menu Bar
+
+ Qt will automatically detect your menu bars for you and turn
+ them into Mac native menu bars. Fitting this into your existing Qt
+ application will normally be automatic. However, if you have
+ special needs, the Qt implementation currently selects a menu
+ bar by starting at the active window
+ (i.e. QApplication::activeWindow()) and applying the following
+ tests:
+
+ \list 1
+
+ \i If the window has a QMenuBar, then it is used.
+
+ \i If the window is modal, then its menu bar is used. If no menu
+ bar is specified, then a default menu bar is used (as
+ documented below).
+
+ \i If the window has no parent, then the default menu bar is used
+ (as documented below).
+
+ \endlist
+
+ These tests are followed all the way up the parent window chain
+ until one of the above rules is satisifed. If all else fails, a
+ default menu bar will be created. Note the default menu bar on
+ Qt is an empty menu bar. However, you can create a different
+ default menu bar by creating a parentless QMenuBar. The first one
+ created will be designated the default menu bar and will be used
+ whenever a default menu bar is needed.
+
+ Note that using native menu bars introduces certain limitations on
+ Qt classes. See the \l{#Limitations}{list of limitations} below
+ for more information about these.
+
+ \section2 Special Keys
+
+ To provide the expected behavior for Qt applications on Mac OS X,
+ the Qt::Meta, Qt::MetaModifier, and Qt::META enum values
+ correspond to the Control keys on the standard Macintosh keyboard,
+ and the Qt::Control, Qt::ControlModifier, and Qt::CTRL enum values
+ correspond to the Command keys.
+
+ \section1 Limitations
+
+ \section2 Menu Actions
+
+ \list
+
+ \o Actions in a QMenu with accelerators that have more than one
+ keystroke (QKeySequence) will not display correctly, when the
+ QMenu is translated into a Mac native menu bar. The first key
+ will be displayed. However, the shortcut will still be
+ activated as on all other platforms.
+
+ \o QMenu objects used in the native menu bar are not able to
+ handle Qt events via the normal event handlers.
+ For Carbon, you will have to install a Carbon event handler on
+ the menu bar in order to receive Carbon events that are similar
+ to \l{QMenu::}{showEvent()}, \l{QMenu::}{hideEvent()}, and
+ \l{QMenu::}{mouseMoveEvent()}. For Cocoa, you will have to
+ install a delegate on the menu itself to be notified of these
+ changes. Alternatively, consider using the QMenu::aboutToShow()
+ and QMenu::aboutToHide() signals to keep track of menu visibility;
+ these provide a solution that should work on all platforms
+ supported by Qt.
+
+ \endlist
+
+ \section2 Native Widgets
+
+ Qt has support for sheets and drawers, represented in the
+ window flags by Qt::Sheet and Qt::Drawer respectiviely. Brushed
+ metal windows can also be created by using the
+ Qt::WA_MacMetalStyle window attribute.
+
+*/
+
+/*!
+ \page qt-mac-cocoa-licensing.html
+
+ \title Contributions to the Following QtGui Files: qapplication_cocoa_p.h, qapplication_mac.mm, qdesktopwidget_mac.mm qeventdispatcher_mac.mm qeventdispatcher_mac_p.h qmacincludes_mac.h qt_cocoa_helpers.mm qt_cocoa_helpers_p.h qwidget_mac.mm qsystemtrayicon_mac.mm
+
+ \contentspage {Other Licenses Used in Qt}{Contents}
+
+ \ingroup licensing
+ \brief License information for contributions by Apple, Inc. to specific parts of the Qt/Mac Cocoa port.
+
+ \legalese
+
+ Copyright (C) 2007-2008, Apple, Inc.
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ \list
+ \o Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ \o Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ \o Neither the name of Apple, Inc. nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+ \endlist
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \endlegalese
+*/