⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qmainwindow.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.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 GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qmainwindow.h"#include "qmainwindowlayout_p.h"#ifndef QT_NO_MAINWINDOW#include "qdockwidget.h"#include "qtoolbar.h"#include <qapplication.h>#include <qmenubar.h>#include <qstatusbar.h>#include <qevent.h>#include <qstyle.h>#include <qdebug.h>#include <private/qwidget_p.h>#include "qtoolbar_p.h"class QMainWindowPrivate : public QWidgetPrivate{    Q_DECLARE_PUBLIC(QMainWindow)public:    inline QMainWindowPrivate()        : layout(0), toolButtonStyle(Qt::ToolButtonIconOnly)    { }    QMainWindowLayout *layout;    QSize iconSize;    bool explicitIconSize;    Qt::ToolButtonStyle toolButtonStyle;    void init();};void QMainWindowPrivate::init(){    Q_Q(QMainWindow);    layout = new QMainWindowLayout(q);    const int metric = q->style()->pixelMetric(QStyle::PM_ToolBarIconSize);    iconSize = QSize(metric, metric);    explicitIconSize = false;}/*    The Main Window:    +----------------------------------------------------------+    | Menu Bar                                                 |    +----------------------------------------------------------+    | Tool Bar Area                                            |    |   +--------------------------------------------------+   |    |   | Dock Window Area                                 |   |    |   |   +------------------------------------------+   |   |    |   |   |                                          |   |   |    |   |   | Central Widget                           |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   +------------------------------------------+   |   |    |   |                                                  |   |    |   +--------------------------------------------------+   |    |                                                          |    +----------------------------------------------------------+    | Status Bar                                               |    +----------------------------------------------------------+*//*!    \class QMainWindow    \brief The QMainWindow class provides a main application window.    \ingroup application    \mainclass    QMainWindow provides a main application window, with a menu bar,    tool bars, dock widgets and a status bar around a large central    widget, such as a text edit, drawing canvas or QWorkspace (for MDI    applications).    Note that QMainWindow comes with its own customized layout and    that setting a layout on a QMainWindow, or creating a layout with    a QMainWindow as a parent is considered an error. You should set    your own layout on the \l{centralWidget()}{central widget}    instead.    Topics:    \tableofcontents    \section1 Saving and restoring state    The saveState() and restoreState() functions provide a means to    save and restore the layout of the QToolBars and QDockWidgets in    the QMainWindow.  These functions work by storing the \link    QObject::objectName objectName\endlink of each QToolBar and    QDockWidget together with information about placement, size, etc.    \section1 Behavior of Dock Widgets    \target dock-widget-separators    \section2 Dock Widget Separators    QMainWindow uses separators to separate QDockWidgets from each    other and the \l{centralWidget()}{central widget}. These    separators let the user control the size of QDockWidgets by    dragging the boundary between them.    A QDockWidget can be as large or as small as the user wishes,    between the minimumSizeHint() (or minimumSize()) and    maximumSize() of the QDockWidget. When a QDockWidget reaches its    minimum size, space will be taken from other QDockWidgets in the    direction of the user's drag, if possible. Once all QDockWidgets    have reached their minimum sizes, further dragging does nothing.    When a QDockWidget reaches its maximium size, space will be given    to other QDockWidgets in the opposite direction of the user's    drag, if possible. Once all QDockWidgets have reached their    minimum size, futher dragging does nothing.    \target dragging-dock-widgets    \section2 Dragging Dock Widgets    QDockWidget displays a title bar to let the user drag the dock    widget to a new location. A QDockWidget can be moved to any    location provided enough space is available. (QMainWindow won't    resize itself to a larger size in an attempt to provide more    space.)    A QRubberBand is shown while dragging the QDockWidget. This    QRubberBand provides an indication to the user about where the    QDockWidget will be placed when the mouse button is released.    \section2 Dragging over Neighbors    All un-nested QDockWidgets in the same dock area are considered    neighbors. When dragging a QDockWidget over its neighbor:    \list    \o QMainWindow will split the neighbor perpendicularly to the    direction of the QDockWidgets.    \o QMainWindow will swap the position of the QDockWidget being    dragged and its neighbor once the user has dragged the mouse past    the center point of the neighboring QDockWidget.    \endlist    The following diagram depicts this behavior:    \image dockwidget-neighbors.png Diagram    \section2 Dragging over other QDockWidgets    When dragging nested QDockWidgets, or when dragging to a    different dock area, QMainWindow will split the QDockWindow under    the mouse. Be aware that the QDockWidget under the mouse will    only be split by the QDockWidget being dragged if both can fit in    the space currently occupied by the QDockWidget under the mouse.    A QDockWidget can be split horizontally or vertically, with the    QDockWidget being dragged being placed in one of four possible    locations, as shown in the diagram below:    \image dockwidget-cross.png Diagram    \omit ### When dragging a nested QDockWidget \endomit    \section2 Dragging to a Different Qt::DockWidgetArea    The QDockWidget::floatable property influences feedback when the    user drags a QDockWidget over the central widget:    \list    \o If \l{QDockWidget::floating}{floating} is \c true,    QMainWindow chooses a dock area based on the position of the mouse    pointer. If the mouse is within 50 pixels of the    central widget's edge, the adjacent dock area is chosen.    When dragging into the corners of these 50 pixel regions, the    current corner() configuration is used to make the decision.    Otherwise, the QRubberBand is shown under the mouse pointer, as    above.    \o If \l{QDockWidget::floating}{floating} is \c false,    QMainWindow chooses a dock area based on the distance between the    mouse pointer and the center of the central widget. If the mouse    comes within 50 pixels of the central widget's edge, the adjacent    dock area is always chosen. When dragging into the corners of    these 50 pixel regions, the current corner() configuration is    used to make the decision.    \endlist    In either case, dragging the mouse over another QDockWidget causes    QMainWindow to choose the other QDockWidget's dock area.    When dragging outside the QMainWindow, the QDockWidget::floating    property again controls feedback during dragging. When the    property is \c false, dragging outside of the QMainWindow will show    the rubberband over the QDockWidget's current location. This    indicates that the QDockWidget cannot be moved outside of the    QMainWindow. When the QDockWidget::floatable property is \c true,    dragging outside of the QMainWindow will show the QRubberBand    under the mouse pointer. This indicates that the QDockWidget will    be floating when the mouse button is released.    \sa QMenuBar, QToolBar, QStatusBar, QDockWidget*//*!    \fn void QMainWindow::iconSizeChanged(const QSize &iconSize)    This signal is emitted when the size of the icons used in the    window is changed. The new icon size is passed in \a iconSize.    You can connect this signal to other components to help maintain    a consistent appearance for your application.    \sa setIconSize()*//*!    \fn void QMainWindow::toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)    This signal is emitted when the style used for tool buttons in the    window is changed. The new style is passed in \a toolButtonStyle.    You can connect this signal to other components to help maintain    a consistent appearance for your application.    \sa setToolButtonStyle()*//*!    Constructs a QMainWindow with the given \a parent and the specified    widget \a flags. */QMainWindow::QMainWindow(QWidget *parent, Qt::WFlags flags)    : QWidget(*(new QMainWindowPrivate()), parent, flags | Qt::Window){    d_func()->init();}#ifdef QT3_SUPPORT/*!    \obsolete    Constructs a QMainWindow with the given \a parent, \a name, and    with the specified widget \a flags. */QMainWindow::QMainWindow(QWidget *parent, const char *name, Qt::WFlags flags)    : QWidget(*(new QMainWindowPrivate()), parent, flags | Qt::WType_TopLevel){    setObjectName(QString::fromAscii(name));    d_func()->init();}#endif/*!    Destroys the main window. */QMainWindow::~QMainWindow(){ }/*! \property QMainWindow::iconSize    \brief size of toolbar icons in this mainwindow.    The default is the default tool bar icon size of the GUI style.*/QSize QMainWindow::iconSize() const{ return d_func()->iconSize; }void QMainWindow::setIconSize(const QSize &iconSize){    Q_D(QMainWindow);    QSize sz = iconSize;    if (!sz.isValid()) {        const int metric = style()->pixelMetric(QStyle::PM_ToolBarIconSize);        sz = QSize(metric, metric);    }    if (d->iconSize != sz) {        d->iconSize = sz;        emit iconSizeChanged(d->iconSize);    }    d->explicitIconSize = iconSize.isValid();}/*! \property QMainWindow::toolButtonStyle    \brief style of toolbar buttons in this mainwindow.    The default is Qt::ToolButtonIconOnly.*/Qt::ToolButtonStyle QMainWindow::toolButtonStyle() const{ return d_func()->toolButtonStyle; }void QMainWindow::setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle){    Q_D(QMainWindow);    if (d->toolButtonStyle == toolButtonStyle)        return;    d->toolButtonStyle = toolButtonStyle;    emit toolButtonStyleChanged(d->toolButtonStyle);}#ifndef QT_NO_MENUBAR/*!    Returns the menu bar for the main window. This function creates    and returns an empty menu bar if the menu bar does not exist.    \sa setMenuBar()*/QMenuBar *QMainWindow::menuBar() const{    QMenuBar *menuBar = qobject_cast<QMenuBar *>(d_func()->layout->menuBar());    if (!menuBar) {	QMainWindow *self = const_cast<QMainWindow *>(this);	menuBar = new QMenuBar(self);	self->setMenuBar(menuBar);    }    return menuBar;}/*!    Sets the menu bar for the main window to \a menuBar.    Note: QMainWindow takes ownership of the \a menuBar pointer and    deletes it at the appropriate time.    \sa menuBar()*/void QMainWindow::setMenuBar(QMenuBar *menuBar){    Q_D(QMainWindow);    if (d->layout->menuBar() && d->layout->menuBar() != menuBar)        delete d->layout->menuBar();    d->layout->setMenuBar(menuBar);}#endif // QT_NO_MENUBAR#ifndef QT_NO_STATUSBAR/*!    Returns the status bar for the main window. This function creates    and returns an empty status bar if the status bar does not exist.    \sa setStatusBar()*/QStatusBar *QMainWindow::statusBar() const{    QStatusBar *statusbar = d_func()->layout->statusBar();    if (!statusbar) {	QMainWindow *self = const_cast<QMainWindow *>(this);	statusbar = new QStatusBar(self);        statusbar->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);	self->setStatusBar(statusbar);    }    return statusbar;}/*!    Sets the status bar for the main window to \a statusbar.    Setting the status bar to 0 will remove it from the main window.    Note that QMainWindow takes ownership of the \a statusbar pointer    and deletes it at the appropriate time.    \sa statusBar()*/void QMainWindow::setStatusBar(QStatusBar *statusbar){    Q_D(QMainWindow);    if (d->layout->statusBar() && d->layout->statusBar() != statusbar)        delete d->layout->statusBar();    d->layout->setStatusBar(statusbar);}#endif // QT_NO_STATUSBAR/*!    Returns the central widget for the main window. This function    returns zero if the central widget has not been set.    \sa setCentralWidget()*/QWidget *QMainWindow::centralWidget() const{ return d_func()->layout->centralWidget(); }/*!    Sets the given \a widget to be the main window's central widget.    Note: QMainWindow takes ownership of the \a widget pointer and    deletes it at the appropriate time.    \sa centralWidget()*/void QMainWindow::setCentralWidget(QWidget *widget){    Q_D(QMainWindow);    if (d->layout->centralWidget() && d->layout->centralWidget() != widget)        delete d->layout->centralWidget();    d->layout->setCentralWidget(widget);}/*!    Sets the given dock widget \a area to occupy the specified \a    corner.    \sa corner()*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -