#include <qapplication.h> #include <qmainwindow.h> int main(int argc, char *argv[]) { QApplication app(argc,argv); QMainWindow *window = new QMainWindow(); app.setMainWidget(window); window->show(); return app.exec(); }
#include <qapplication.h>
此头文件为类QApplication,此类用于控制图形界面的应用程序,并设置图形环境,启动事件循环。
/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation ([email protected]) ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** 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.1, 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. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QAPPLICATION_H #define QAPPLICATION_H #include <QtCore/qcoreapplication.h> #include <QtGui/qwindowdefs.h> #include <QtCore/qpoint.h> #include <QtCore/qsize.h> #include <QtGui/qcursor.h> #ifdef QT_INCLUDE_COMPAT # include <QtGui/qdesktopwidget.h> #endif #ifdef QT3_SUPPORT # include <QtGui/qwidget.h> # include <QtGui/qpalette.h> #endif #ifdef Q_WS_QWS # include <QtGui/qrgb.h> # include <QtGui/qtransportauth_qws.h> #endif QT_BEGIN_HEADER #if defined(Q_OS_SYMBIAN) class CApaApplication; #endif QT_BEGIN_NAMESPACE QT_MODULE(Gui) class QSessionManager; class QDesktopWidget; class QStyle; class QEventLoop; class QIcon; class QInputContext; template <typename T> class QList; class QLocale; #if defined(Q_WS_QWS) class QDecoration; #elif defined(Q_WS_QPA) class QPlatformNativeInterface; #endif #if defined(Q_OS_SYMBIAN) class QSymbianEvent; #endif class QApplication; class QApplicationPrivate; #if defined(qApp) #undef qApp #endif #define qApp (static_cast<QApplication *>(QCoreApplication::instance())) class Q_GUI_EXPORT QApplication : public QCoreApplication { Q_OBJECT Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection) Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon) Q_PROPERTY(int cursorFlashTime READ cursorFlashTime WRITE setCursorFlashTime) Q_PROPERTY(int doubleClickInterval READ doubleClickInterval WRITE setDoubleClickInterval) Q_PROPERTY(int keyboardInputInterval READ keyboardInputInterval WRITE setKeyboardInputInterval) #ifndef QT_NO_WHEELEVENT Q_PROPERTY(int wheelScrollLines READ wheelScrollLines WRITE setWheelScrollLines) #endif Q_PROPERTY(QSize globalStrut READ globalStrut WRITE setGlobalStrut) Q_PROPERTY(int startDragTime READ startDragTime WRITE setStartDragTime) Q_PROPERTY(int startDragDistance READ startDragDistance WRITE setStartDragDistance) Q_PROPERTY(bool quitOnLastWindowClosed READ quitOnLastWindowClosed WRITE setQuitOnLastWindowClosed) #ifndef QT_NO_STYLE_STYLESHEET Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet) #endif #ifdef Q_WS_WINCE Q_PROPERTY(int autoMaximizeThreshold READ autoMaximizeThreshold WRITE setAutoMaximizeThreshold) #endif Q_PROPERTY(bool autoSipEnabled READ autoSipEnabled WRITE setAutoSipEnabled) public: enum Type { Tty, GuiClient, GuiServer }; #ifdef Q_OS_SYMBIAN typedef CApaApplication * (*QS60MainApplicationFactory)(); #endif #ifndef qdoc QApplication(int &argc, char **argv, int = ApplicationFlags); QApplication(int &argc, char **argv, bool GUIenabled, int = ApplicationFlags); QApplication(int &argc, char **argv, Type, int = ApplicationFlags); #if defined(Q_WS_X11) QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0, int = ApplicationFlags); QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0, int = ApplicationFlags); #endif #if defined(Q_OS_SYMBIAN) QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv, int = ApplicationFlags); #endif #endif virtual ~QApplication(); static Type type(); static QStyle *style(); static void setStyle(QStyle*); static QStyle *setStyle(const QString&); enum ColorSpec { NormalColor=0, CustomColor=1, ManyColor=2 }; static int colorSpec(); static void setColorSpec(int); static void setGraphicsSystem(const QString &); #ifndef QT_NO_CURSOR static QCursor *overrideCursor(); static void setOverrideCursor(const QCursor &); static void changeOverrideCursor(const QCursor &); static void restoreOverrideCursor(); #endif static QPalette palette(); static QPalette palette(const QWidget *); static QPalette palette(const char *className); static void setPalette(const QPalette &, const char* className = 0); static QFont font(); static QFont font(const QWidget*); static QFont font(const char *className); static void setFont(const QFont &, const char* className = 0); static QFontMetrics fontMetrics(); static void setWindowIcon(const QIcon &icon); static QIcon windowIcon(); #ifdef QT3_SUPPORT static QT3_SUPPORT QWidget *mainWidget(); static QT3_SUPPORT void setMainWidget(QWidget *); #endif static QWidgetList allWidgets(); static QWidgetList topLevelWidgets(); static QDesktopWidget *desktop(); static QWidget *activePopupWidget(); static QWidget *activeModalWidget(); #ifndef QT_NO_CLIPBOARD static QClipboard *clipboard(); #endif static QWidget *focusWidget(); static QWidget *activeWindow(); static void setActiveWindow(QWidget* act); static QWidget *widgetAt(const QPoint &p); static inline QWidget *widgetAt(int x, int y) { return widgetAt(QPoint(x, y)); } static QWidget *topLevelAt(const QPoint &p); static inline QWidget *topLevelAt(int x, int y) { return topLevelAt(QPoint(x, y)); } static void syncX(); static void beep(); static void alert(QWidget *widget, int duration = 0); static Qt::KeyboardModifiers keyboardModifiers(); static Qt::KeyboardModifiers queryKeyboardModifiers(); static Qt::MouseButtons mouseButtons(); static void setDesktopSettingsAware(bool); static bool desktopSettingsAware(); static void setCursorFlashTime(int); static int cursorFlashTime(); static void setDoubleClickInterval(int); static int doubleClickInterval(); static void setKeyboardInputInterval(int); static int keyboardInputInterval(); #ifndef QT_NO_WHEELEVENT static void setWheelScrollLines(int); static int wheelScrollLines(); #endif static void setGlobalStrut(const QSize &); static QSize globalStrut(); static void setStartDragTime(int ms); static int startDragTime(); static void setStartDragDistance(int l); static int startDragDistance(); static void setLayoutDirection(Qt::LayoutDirection direction); static Qt::LayoutDirection layoutDirection(); static inline bool isRightToLeft() { return layoutDirection() == Qt::RightToLeft; } static inline bool isLeftToRight() { return layoutDirection() == Qt::LeftToRight; } static bool isEffectEnabled(Qt::UIEffect); static void setEffectEnabled(Qt::UIEffect, bool enable = true); #if defined(Q_WS_MAC) virtual bool macEventFilter(EventHandlerCallRef, EventRef); #endif #if defined(Q_WS_X11) virtual bool x11EventFilter(XEvent *); virtual int x11ClientMessage(QWidget*, XEvent*, bool passive_only); int x11ProcessEvent(XEvent*); #endif #if defined(Q_OS_SYMBIAN) int symbianProcessEvent(const QSymbianEvent *event); virtual bool symbianEventFilter(const QSymbianEvent *event); #endif #if defined(Q_WS_QWS) virtual bool qwsEventFilter(QWSEvent *); int qwsProcessEvent(QWSEvent*); void qwsSetCustomColors(QRgb *colortable, int start, int numColors); #ifndef QT_NO_QWS_MANAGER static QDecoration &qwsDecoration(); static void qwsSetDecoration(QDecoration *); static QDecoration *qwsSetDecoration(const QString &decoration); #endif #endif #if defined(Q_WS_QPA) static QPlatformNativeInterface *platformNativeInterface(); #endif #if defined(Q_WS_WIN) void winFocus(QWidget *, bool); static void winMouseButtonUp(); #endif #ifndef QT_NO_SESSIONMANAGER // session management bool isSessionRestored() const; QString sessionId() const; QString sessionKey() const; virtual void commitData(QSessionManager& sm); virtual void saveState(QSessionManager& sm); #endif #ifndef QT_NO_IM void setInputContext(QInputContext *); QInputContext *inputContext() const; #endif static QLocale keyboardInputLocale(); static Qt::LayoutDirection keyboardInputDirection(); static int exec(); bool notify(QObject *, QEvent *); static void setQuitOnLastWindowClosed(bool quit); static bool quitOnLastWindowClosed(); #ifdef QT_KEYPAD_NAVIGATION static Q_DECL_DEPRECATED void setKeypadNavigationEnabled(bool); static bool keypadNavigationEnabled(); static void setNavigationMode(Qt::NavigationMode mode); static Qt::NavigationMode navigationMode(); #endif Q_SIGNALS: void lastWindowClosed(); void focusChanged(QWidget *old, QWidget *now); void fontDatabaseChanged(); #ifndef QT_NO_SESSIONMANAGER void commitDataRequest(QSessionManager &sessionManager); void saveStateRequest(QSessionManager &sessionManager); #endif #ifdef Q_OS_SYMBIAN void aboutToReleaseGpuResources(); void aboutToUseGpuResources(); #endif public: QString styleSheet() const; public Q_SLOTS: #ifndef QT_NO_STYLE_STYLESHEET void setStyleSheet(const QString& sheet); #endif #ifdef Q_WS_WINCE void setAutoMaximizeThreshold(const int threshold); int autoMaximizeThreshold() const; #endif void setAutoSipEnabled(const bool enabled); bool autoSipEnabled() const; static void closeAllWindows(); static void aboutQt(); protected: #if defined(Q_WS_QWS) void setArgs(int, char **); #endif bool event(QEvent *); bool compressEvent(QEvent *, QObject *receiver, QPostEventList *); #ifdef QT3_SUPPORT public: static inline QT3_SUPPORT void setReverseLayout(bool b) { setLayoutDirection(b?Qt::RightToLeft:Qt::LeftToRight); } static inline bool QT3_SUPPORT reverseLayout() { return layoutDirection() == Qt::RightToLeft; } static QT3_SUPPORT Qt::Alignment horizontalAlignment(Qt::Alignment align); typedef int ColorMode; enum { NormalColors = NormalColor, CustomColors = CustomColor }; static inline QT3_SUPPORT ColorMode colorMode() { return static_cast<ColorMode>(colorSpec()); } static inline QT3_SUPPORT void setColorMode(ColorMode mode) { setColorSpec(int(mode)); } #if defined(Q_OS_WIN32) || defined(Q_OS_CYGWIN) static QT3_SUPPORT Qt::WindowsVersion winVersion() { return (Qt::WindowsVersion)QSysInfo::WindowsVersion; } #endif #if defined(Q_OS_MAC) static QT3_SUPPORT Qt::MacintoshVersion macVersion() { return (Qt::MacintoshVersion)QSysInfo::MacintoshVersion; } #endif # ifndef QT_NO_CURSOR inline static QT3_SUPPORT void setOverrideCursor(const QCursor &cursor, bool replace) { if (replace) changeOverrideCursor(cursor); else setOverrideCursor(cursor); } # endif inline static QT3_SUPPORT bool hasGlobalMouseTracking() {return true;} inline static QT3_SUPPORT void setGlobalMouseTracking(bool) {} inline static QT3_SUPPORT void flushX() { flush(); } static inline QT3_SUPPORT void setWinStyleHighlightColor(const QColor &c) { QPalette p(palette()); p.setColor(QPalette::Highlight, c); setPalette(p); } static inline QT3_SUPPORT const QColor &winStyleHighlightColor() { return palette().color(QPalette::Active, QPalette::Highlight); } static inline QT3_SUPPORT void setPalette(const QPalette &pal, bool, const char* className = 0) { setPalette(pal, className); } static inline QT3_SUPPORT void setFont(const QFont &font, bool, const char* className = 0) { setFont(font, className); } static inline QT3_SUPPORT QWidget *widgetAt(int x, int y, bool child) { QWidget *w = widgetAt(x, y); return child ? w : (w ? w->window() : 0); } static inline QT3_SUPPORT QWidget *widgetAt(const QPoint &p, bool child) { QWidget *w = widgetAt(p); return child ? w : (w ? w->window() : 0); } #endif // QT3_SUPPORT #if defined(Q_INTERNAL_QAPP_SRC) || defined(qdoc) QApplication(int &argc, char **argv); QApplication(int &argc, char **argv, bool GUIenabled); QApplication(int &argc, char **argv, Type); #if defined(Q_WS_X11) QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0); #endif #if defined(Q_OS_SYMBIAN) || defined(qdoc) QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv); #endif #endif private: Q_DISABLE_COPY(QApplication) Q_DECLARE_PRIVATE(QApplication) friend class QGraphicsWidget; friend class QGraphicsItem; friend class QGraphicsScene; friend class QGraphicsScenePrivate; friend class QWidget; friend class QWidgetPrivate; friend class QETWidget; friend class Q3AccelManager; friend class QTranslator; friend class QWidgetAnimator; #ifndef QT_NO_SHORTCUT friend class QShortcut; friend class QLineEdit; friend class QTextControl; #endif friend class QAction; friend class QFontDatabasePrivate; #if defined(Q_WS_QWS) friend class QInputContext; friend class QWSDirectPainterSurface; friend class QDirectPainter; friend class QDirectPainterPrivate; #endif #ifndef QT_NO_GESTURES friend class QGestureManager; #endif #if defined(Q_WS_MAC) || defined(Q_WS_X11) Q_PRIVATE_SLOT(d_func(), void _q_alertTimeOut()) #endif #if defined(QT_RX71_MULTITOUCH) Q_PRIVATE_SLOT(d_func(), void _q_readRX71MultiTouchEvents()) #endif #if defined(Q_OS_SYMBIAN) Q_PRIVATE_SLOT(d_func(), void _q_aboutToQuit()) #endif }; QT_END_NAMESPACE QT_END_HEADER #endif // QAPPLICATION_H
#include <qmainwindow.h>
此为QMainWindow类的头文件,应用程序的主窗口。
/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation ([email protected]) ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** 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.1, 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. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QDYNAMICMAINWINDOW_H #define QDYNAMICMAINWINDOW_H #include <QtGui/qwidget.h> #include <QtGui/qtabwidget.h> QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Gui) #ifndef QT_NO_MAINWINDOW class QDockWidget; class QMainWindowPrivate; class QMenuBar; class QStatusBar; class QToolBar; class QMenu; class Q_GUI_EXPORT QMainWindow : public QWidget { Q_OBJECT Q_ENUMS(DockOption) Q_FLAGS(DockOptions) Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle) #ifndef QT_NO_DOCKWIDGET Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated) #ifndef QT_NO_TABBAR Q_PROPERTY(bool documentMode READ documentMode WRITE setDocumentMode) #endif // QT_NO_TABBAR #ifndef QT_NO_TABWIDGET Q_PROPERTY(QTabWidget::TabShape tabShape READ tabShape WRITE setTabShape) #endif // QT_NO_TABWIDGET Q_PROPERTY(bool dockNestingEnabled READ isDockNestingEnabled WRITE setDockNestingEnabled) #endif // QT_NO_DOCKWIDGET Q_PROPERTY(DockOptions dockOptions READ dockOptions WRITE setDockOptions) #ifndef QT_NO_TOOLBAR Q_PROPERTY(bool unifiedTitleAndToolBarOnMac READ unifiedTitleAndToolBarOnMac WRITE setUnifiedTitleAndToolBarOnMac) #endif public: enum DockOption { AnimatedDocks = 0x01, AllowNestedDocks = 0x02, AllowTabbedDocks = 0x04, ForceTabbedDocks = 0x08, // implies AllowTabbedDocks, !AllowNestedDocks VerticalTabs = 0x10 // implies AllowTabbedDocks }; Q_DECLARE_FLAGS(DockOptions, DockOption) explicit QMainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0); ~QMainWindow(); QSize iconSize() const; void setIconSize(const QSize &iconSize); Qt::ToolButtonStyle toolButtonStyle() const; void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle); #ifndef QT_NO_DOCKWIDGET bool isAnimated() const; bool isDockNestingEnabled() const; #endif #ifndef QT_NO_TABBAR bool documentMode() const; void setDocumentMode(bool enabled); #endif #ifndef QT_NO_TABWIDGET QTabWidget::TabShape tabShape() const; void setTabShape(QTabWidget::TabShape tabShape); QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const; void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition); #endif // QT_NO_TABWIDGET void setDockOptions(DockOptions options); DockOptions dockOptions() const; bool isSeparator(const QPoint &pos) const; #ifndef QT_NO_MENUBAR QMenuBar *menuBar() const; void setMenuBar(QMenuBar *menubar); QWidget *menuWidget() const; void setMenuWidget(QWidget *menubar); #endif #ifndef QT_NO_STATUSBAR QStatusBar *statusBar() const; void setStatusBar(QStatusBar *statusbar); #endif QWidget *centralWidget() const; void setCentralWidget(QWidget *widget); #ifndef QT_NO_DOCKWIDGET void setCorner(Qt::Corner corner, Qt::DockWidgetArea area); Qt::DockWidgetArea corner(Qt::Corner corner) const; #endif #ifndef QT_NO_TOOLBAR void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea); void insertToolBarBreak(QToolBar *before); void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar); void addToolBar(QToolBar *toolbar); QToolBar *addToolBar(const QString &title); void insertToolBar(QToolBar *before, QToolBar *toolbar); void removeToolBar(QToolBar *toolbar); void removeToolBarBreak(QToolBar *before); void setUnifiedTitleAndToolBarOnMac(bool set); bool unifiedTitleAndToolBarOnMac() const; Qt::ToolBarArea toolBarArea(QToolBar *toolbar) const; bool toolBarBreak(QToolBar *toolbar) const; #endif #ifndef QT_NO_DOCKWIDGET void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget); void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation); void splitDockWidget(QDockWidget *after, QDockWidget *dockwidget, Qt::Orientation orientation); void tabifyDockWidget(QDockWidget *first, QDockWidget *second); QList<QDockWidget*> tabifiedDockWidgets(QDockWidget *dockwidget) const; void removeDockWidget(QDockWidget *dockwidget); bool restoreDockWidget(QDockWidget *dockwidget); Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const; #endif // QT_NO_DOCKWIDGET QByteArray saveState(int version = 0) const; bool restoreState(const QByteArray &state, int version = 0); #ifndef QT_NO_MENU virtual QMenu *createPopupMenu(); #endif #ifdef QT3_SUPPORT QT3_SUPPORT_CONSTRUCTOR QMainWindow(QWidget *parent, const char *name, Qt::WindowFlags flags = 0); #endif #ifndef QT_NO_DOCKWIDGET public Q_SLOTS: void setAnimated(bool enabled); void setDockNestingEnabled(bool enabled); #endif Q_SIGNALS: void iconSizeChanged(const QSize &iconSize); void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle); protected: #ifndef QT_NO_CONTEXTMENU void contextMenuEvent(QContextMenuEvent *event); #endif bool event(QEvent *event); private: Q_DECLARE_PRIVATE(QMainWindow) Q_DISABLE_COPY(QMainWindow) }; Q_DECLARE_OPERATORS_FOR_FLAGS(QMainWindow::DockOptions) #endif // QT_NO_MAINWINDOW QT_END_NAMESPACE QT_END_HEADER #endif // QDYNAMICMAINWINDOW_H
QApplication app(argc,argc);
创建一个QApplication对象,对象app输入两个参数。
QMainWindow *window=new QMainWindow();
创建一个主窗口window。
app.setMainWidget(window);
Qt 3 Support Members for QApplication:
void QApplication::setMainWidget ( QWidget * mainWidget ) [static]
Sets the application‘s main widget to mainWidget.
In most respects the main widget is like any other widget, except that if it is closed, the application exits. QApplication does not take ownership of the mainWidget, so if you create your main widget on the heap you must delete it yourself.
You need not have a main widget; connecting lastWindowClosed() to quit() is an alternative.
On X11, this function also resizes and moves the main widget according to the -geometry command-line option, so you should set the default geometry (using QWidget::setGeometry()) before calling setMainWidget().
Porting to Qt 4:
QApplication::setMainWidget() is no longer used. When all an application‘s windows are closed, the application will exit normally.
window->show();
显示窗口
编译这个程序
$ g++ -o qt qt.cpp