Qt 4.0: main.cpp Example File (activeqt/comapp/main.cpp)

|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# main.cpp Example File
activeqt/comapp/main.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2003-2005 Trolltech AS. All rights reserved.
        **
        ** This file is part of the documentation 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 <qapplication.h>
        #include <qaxfactory.h>
        #include <qtabwidget.h>
        #include <qtimer.h>

        class Application;
        class DocumentList;

        class Document : public QObject
        {
            Q_OBJECT

            Q_CLASSINFO("ClassID", "{2b5775cd-72c2-43da-bc3b-b0e8d1e1c4f7}")
            Q_CLASSINFO("InterfaceID", "{2ce1761e-07a3-415c-bd11-0eab2c7283de}")

            Q_PROPERTY(Application *application READ application)
            Q_PROPERTY(QString title READ title WRITE setTitle)

        public:
            Document(DocumentList *list);
            ~Document();

            Application *application() const;

            QString title() const;
            void setTitle(const QString &title);

        private:
            QWidget *page;
        };

        class DocumentList : public QObject
        {
            Q_OBJECT

            Q_CLASSINFO("ClassID", "{496b761d-924b-4554-a18a-8f3704d2a9a6}")
            Q_CLASSINFO("InterfaceID", "{6c9e30e8-3ff6-4e6a-9edc-d219d074a148}")

            Q_PROPERTY(Application* application READ application)
            Q_PROPERTY(int count READ count)

        public:
            DocumentList(Application *application);

            int count() const;
            Application *application() const;

        public slots:
            Document *addDocument();
            Document *item(int index) const;

        private:
            QList<Document*> list;
        };

        class Application : public QObject
        {
            Q_OBJECT

            Q_CLASSINFO("ClassID", "{b50a71db-c4a7-4551-8d14-49983566afee}")
            Q_CLASSINFO("InterfaceID", "{4a427759-16ef-4ed8-be79-59ffe5789042}")
            Q_CLASSINFO("RegisterObject", "yes")

            Q_PROPERTY(DocumentList* documents READ documents)
            Q_PROPERTY(QString id READ id)
            Q_PROPERTY(bool visible READ isVisible WRITE setVisible)

        public:
            Application(QObject *parent = 0);
            DocumentList *documents() const;

            QString id() const { return objectName(); }

            void setVisible(bool on);
            bool isVisible() const;

            QTabWidget *window() const { return ui; }

        public slots:
            void quit();

        private:
            DocumentList *docs;

            QTabWidget *ui;
        };

        Document::Document(DocumentList *list)
        : QObject(list)
        {
            QTabWidget *tabs = list->application()->window();
            page = new QWidget(tabs);
            page->setWindowTitle("Unnamed");
            tabs->addTab(page, page->windowTitle());

            page->show();
        }

        Document::~Document()
        {
            delete page;
        }

        Application *Document::application() const
        {
            return qobject_cast<DocumentList*>(parent())->application();
        }

        QString Document::title() const
        {
            return page->windowTitle();
        }

        void Document::setTitle(const QString &t)
        {
            page->setWindowTitle(t);

            QTabWidget *tabs = application()->window();
            int index = tabs->indexOf(page);
            tabs->setTabText(index, page->windowTitle());
        }

        DocumentList::DocumentList(Application *application)
        : QObject(application)
        {
        }

        Application *DocumentList::application() const
        {
            return qobject_cast<Application*>(parent());
        }

        int DocumentList::count() const
        {
            return list.count();
        }

        Document *DocumentList::item(int index) const
        {
            if (index >= list.count())
                return 0;

            return list.at(index);
        }

        Document *DocumentList::addDocument()
        {
            Document *document = new Document(this);
            list.append(document);

            return document;
        }

        Application::Application(QObject *parent)
        : QObject(parent), ui(0)
        {
            ui = new QTabWidget;

            setObjectName("From QAxFactory");
            docs = new DocumentList(this);
        }

        DocumentList *Application::documents() const
        {
            return docs;
        }

        void Application::setVisible(bool on)
        {
            ui->setShown(on);
        }

        bool Application::isVisible() const
        {
            return ui->isVisible();
        }

        void Application::quit()
        {
            delete docs;
            docs = 0;

            delete ui;
            ui = 0;
            QTimer::singleShot(0, qApp, SLOT(quit()));
        }

        #include "main.moc"

        QAXFACTORY_BEGIN("{edd3e836-f537-4c6f-be7d-6014c155cc7a}", "{b7da3de8-83bb-4bbe-9ab7-99a05819e201}")
           QAXCLASS(Application)
           QAXTYPE(Document)
           QAXTYPE(DocumentList)
        QAXFACTORY_END()

        int main(int argc, char **argv)
        {
            QApplication app(argc, argv);
            app.setQuitOnLastWindowClosed(false);

            // started by COM - don't do anything
            if (QAxFactory::isServer())
                return app.exec();

            // started by user
            Application appobject(0);
            appobject.setObjectName("From Application");

            QAxFactory::startServer();
            QAxFactory::registerActiveObject(&appobject);

            appobject.setVisible(true);

            QObject::connect(qApp, SIGNAL(lastWindowClosed()), &appobject, SLOT(quit()));

            return app.exec();
        }