/*************************************************************************** ** ** This file is part of Qt Creator ** ** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** ** Non-Open Source Usage ** ** Licensees may use this file in accordance with the Qt Beta Version ** License Agreement, Agreement version 2.2 provided with the Software or, ** alternatively, in accordance with the terms contained in a written ** agreement between you and Nokia. ** ** GNU General Public License Usage ** ** Alternatively, this file may be used under the terms of the GNU General ** Public License versions 2.0 or 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 GNU ** General Public Licensing requirements will be met: ** ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and ** http://www.gnu.org/copyleft/gpl.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt GPL Exception ** version 1.2, included in the file GPL_EXCEPTION.txt in this package. ** ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef Q_OS_WIN #include #endif uint qHash(const QMap &) { return 0; } uint qHash(const double & f) { return int(f); } class Foo { public: Foo(int i=0) : a(i), b(2) { int s = 1; int t = 2; b = 2 + s + t; a += 1; } void doit() { static QObject ob; m["1"] = "2"; h[&ob] = m.begin(); a += 1; --b; //s += 'x'; } struct Bar { Bar() : ob(0) {} QObject *ob; }; public: int a, b; char x[6]; private: //QString s; typedef QMap Map; Map m; QHash h; }; void testArray() { QString x[4]; x[0] = "a"; x[1] = "b"; x[2] = "c"; x[3] = "d"; Foo foo[10]; //for (int i = 0; i != sizeof(foo)/sizeof(foo[0]); ++i) { for (int i = 0; i < 5; ++i) { foo[i].a = i; foo[i].doit(); } } void testByteArray() { QByteArray ba = "Hello"; ba += '"'; ba += "World"; ba += char(0); ba += 1; ba += 2; } void testHash() { QHash hgg0; hgg0[11] = 11.0; hgg0[22] = 22.0; QHash hgg1; hgg1["22.0"] = 22.0; QHash hgg2; hgg2[22] = "22.0"; QHash hgg3; hgg3["22.0"] = Foo(22); hgg3["33.0"] = Foo(33); QObject ob; QHash > hash; hash.insert("Hallo", QPointer(&ob)); hash.insert("Welt", QPointer(&ob)); hash.insert(".", QPointer(&ob)); } void testImage() { QImage im(QSize(200, 200), QImage::Format_RGB32); im.fill(QColor(200, 100, 130).rgba()); QPainter pain; pain.begin(&im); pain.drawLine(2, 2, 130, 130); pain.drawLine(4, 2, 130, 140); pain.drawRect(30, 30, 80, 80); pain.end(); } void testIO() { qDebug() << "qDebug() 1"; qDebug() << "qDebug() 2"; qDebug() << "qDebug() 3"; std::cout << "std::cout @@ 1" << std::endl; std::cout << "std::cout @@ 2\n"; std::cout << "std::cout @@ 3" << std::endl; std::cerr << "std::cerr 1\n"; std::cerr << "std::cerr 2\n"; std::cerr << "std::cerr 3\n"; } void testList() { #if 1 QList li; QList lu; for (int i = 0; i != 3; ++i) { li.append(i); } li.append(101); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); li.append(102); for (int i = 0; i != 3; ++i) { lu.append(i); } lu.append(101); lu.append(102); lu.append(102); lu.append(102); lu.append(102); lu.append(102); lu.append(102); lu.append(102); lu.append(102); QList i; i.append(42); i.append(43); i.append(44); i.append(45); QList l; l.append(42); l.append(43); l.append(44); l.append(45); QList f; f.append(Foo(1)); f.append(Foo(2)); #endif QList v; v.push_back("aa"); v.push_back("bb"); v.push_back("cc"); v.push_back("dd"); } void testMap() { QMap ggl; ggl[11] = QStringList() << "11"; ggl[22] = QStringList() << "22"; typedef QMap T; T ggt; ggt[11] = QStringList() << "11"; ggt[22] = QStringList() << "22"; #if 0 QMap gg0; gg0[11] = 11.0; gg0[22] = 22.0; QMap gg1; gg1["22.0"] = 22.0; QMap gg2; gg2[22] = "22.0"; QMap gg3; gg3["22.0"] = Foo(22); gg3["33.0"] = Foo(33); QObject ob; QMap > map; map.insert("Hallo", QPointer(&ob)); map.insert("Welt", QPointer(&ob)); map.insert(".", QPointer(&ob)); #endif } void testObject(int &argc, char *argv[]) { QApplication app(argc, argv); QAction act("xxx", &app); QString t = act.text(); t += "y"; /* QObject ob(&app); ob.setObjectName("An Object"); QObject ob1; ob1.setObjectName("Another Object"); QObject::connect(&ob, SIGNAL(destroyed()), &ob1, SLOT(deleteLater())); QObject::connect(&app, SIGNAL(lastWindowClosed()), &ob, SLOT(deleteLater())); QList obs; obs.append(&ob); obs.append(&ob1); obs.append(0); obs.append(&app); ob1.setObjectName("A Subobject"); */ QLabel l("XXXXXXXXXXXXXXXXX"); l.show(); app.exec(); } void testPixmap() { QImage im(QSize(200, 200), QImage::Format_RGB32); im.fill(QColor(200, 100, 130).rgba()); QPainter pain; pain.begin(&im); pain.drawLine(2, 2, 130, 130); pain.end(); QPixmap pm = QPixmap::fromImage(im); int i = 1; Q_UNUSED(i); } void testPlugin() { QString dir = QDir::currentPath(); #ifdef Q_OS_LINUX QLibrary lib(dir + "/libplugin.so"); #endif #ifdef Q_OS_MAC dir = QFileInfo(dir + "/../..").canonicalPath(); QLibrary lib(dir + "/libplugin.dylib"); #endif #ifdef Q_OS_WIN QLibrary lib(dir + "/plugin.dll"); #endif int (*foo)() = (int(*)()) lib.resolve("pluginTest"); qDebug() << "library resolve: " << foo; if (foo) { int res = foo(); res += 1; } else { qDebug() << lib.errorString(); } } void stringRefTest(const QString &refstring) { Q_UNUSED(refstring); } int F(int a, int b) { return a + b; } int add(int i) { return i + 2; } int mul(int i) { return i * 2; } void testStdVector() { int x = F(add(1), mul(2)); Q_UNUSED(x); std::vector plist1; plist1.push_back(new int(1)); plist1.push_back(0); plist1.push_back(new int(2)); std::vector flist2; flist2.push_back(1); flist2.push_back(2); flist2.push_back(3); flist2.push_back(4); int a = 1; int b = 0; while (0) { a += 1; if (b) break; } flist2.push_back(1); flist2.push_back(2); flist2.push_back(3); flist2.push_back(4); std::vector plist; plist.push_back(new Foo(1)); plist.push_back(0); plist.push_back(new Foo(2)); std::vector flist; flist.push_back(1); flist.push_back(2); flist.push_back(3); flist.push_back(4); //flist.takeFirst(); //flist.takeFirst(); std::vector vec; vec.push_back(true); vec.push_back(false); } void testStdString() { QString foo; std::string str; std::wstring wstr; std::vector v; foo += "a"; str += "b"; wstr += wchar_t('e'); foo += "c"; str += "d"; foo += "e"; wstr += wchar_t('e'); str += "e"; foo += "a"; str += "b"; foo += "c"; str += "d"; str += "e"; wstr += wchar_t('e'); wstr += wchar_t('e'); str += "e"; QList l; l.push_back(str); l.push_back(str); l.push_back(str); l.push_back(str); v.push_back(str); v.push_back(str); v.push_back(str); v.push_back(str); } void testString() { QString str = "Hello "; str += " big, "; str += " fat "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; str += " World "; } void testString3() { QString str = "Hello "; str += " big, "; str += " fat "; str += " World "; QString string("String Test"); QString *pstring = new QString("Pointer String Test"); stringRefTest(QString("Ref String Test")); string = "Hi"; string += "Du"; qDebug() << string; delete pstring; } void testStringList() { QStringList l; l << "Hello "; l << " big, "; l << " fat "; l << " World "; } void testStruct() { Foo f(2); f.doit(); f.doit(); f.doit(); } class Thread : public QThread { public: Thread(int id) : m_id(id) {} void run() { for (int i = 0; i != 100000; ++i) { //sleep(1); std::cerr << m_id; } } private: int m_id; }; void testThreads() { Thread thread1(1); Thread thread2(2); thread1.start(); thread2.start(); thread1.wait(); thread2.wait(); } void testVariant1() { QVariant v; v = 1; v = 1.0; v = "string"; v = 1; } void testVariant2() { QVariant var; #if 0 QVariant var3; QHostAddress ha("127.0.0.1"); qVariantSetValue(var, ha); var3 = var; var3 = var; var3 = var; var3 = var; QHostAddress ha1 = var.value(); #endif typedef QMap MyType; MyType my; my[1] = (QStringList() << "Hello"); my[3] = (QStringList() << "World"); var.setValue(my); QString type = var.typeName(); var.setValue(my); var.setValue(my); var.setValue(my); var.setValue(my); } void testVariant3() { QList list; list << 1 << 2 << 3; QVariant variant = qVariantFromValue(list); list.clear(); list = qVariantValue >(variant); } void testVector() { QVector plist; plist.append(new Foo(1)); plist.append(0); plist.append(new Foo(2)); QVector flist; flist.append(1); flist.append(2); flist.append(3); flist.append(4); //flist.takeFirst(); //flist.takeFirst(); QVector vec; vec.append(true); vec.append(false); } void testVectorOfList() { QVector > v; QVector > *pv = &v; v.append(QList() << 1); v.append(QList() << 2 << 3); Q_UNUSED(pv); } void foo() {} void foo(int) {} void foo(QList) {} void foo(QList >) {} void foo(QList *>) {} void foo(QList *>) {} template void foo(QList *>) {} namespace { namespace A { int barz() { return 42;} } namespace B { int barz() { return 43;} } } namespace somespace { class MyBase : public QObject { public: MyBase() {} virtual void doit(int i) { n = i; } protected: int n; }; namespace nested { class MyFoo : public MyBase { public: MyFoo() {} virtual void doit(int i) { n = i; } protected: int n; }; class MyBar : public MyFoo { public: virtual void doit(int i) { n = i + 1; } }; namespace { class MyAnon : public MyBar { public: virtual void doit(int i) { n = i + 3; } }; namespace baz { class MyBaz : public MyAnon { public: virtual void doit(int i) { n = i + 5; } }; } // namespace baz } // namespace anon } // namespace nested } // namespace somespace void testNamespace() { using namespace somespace; using namespace nested; MyFoo foo; MyBar bar; MyAnon anon; baz::MyBaz baz; baz.doit(1); anon.doit(1); foo.doit(1); bar.doit(1); bar.doit(1); bar.doit(1); bar.doit(1); bar.doit(1); bar.doit(1); bar.doit(1); } int main(int argc, char *argv[]) { testIO(); //QString s; //s = "hallo"; //QList *> vi; //QList *> vd; //int n = A::barz(); int n = 1; n = 2; n = 3; n = 3; n = 3; n = 3; n = 3; n = 3; n = 3; { QString n = "2"; n = "3"; n = "4"; { double n = 3.5; ++n; ++n; } n = "3"; n = "4"; } ++n; ++n; testArray(); testStdVector(); testStdString(); testPlugin(); testList(); testNamespace(); //return 0; testByteArray(); testHash(); testImage(); testMap(); testString(); testStringList(); testStruct(); //testThreads(); testVariant1(); testVariant2(); testVariant3(); testVector(); testVectorOfList(); testObject(argc, argv); //QColor color(255,128,10); //QFont font; while(true) ; return 0; } //Q_DECLARE_METATYPE(QHostAddress) Q_DECLARE_METATYPE(QList) //#define COMMA , //Q_DECLARE_METATYPE(QMap) QT_BEGIN_NAMESPACE template <> struct QMetaTypeId { enum { Defined = 1 }; static int qt_metatype_id() { static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); if (!metatype_id) metatype_id = qRegisterMetaType("myns::QHostAddress"); return metatype_id; \ } \ }; template <> struct QMetaTypeId< QMap > { enum { Defined = 1 }; static int qt_metatype_id() { static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); if (!metatype_id) metatype_id = qRegisterMetaType< QMap >("myns::QMap"); return metatype_id; \ } \ }; QT_END_NAMESPACE