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

📄 qglobal.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            winver = QSysInfo::WV_98;        else            winver = QSysInfo::WV_95;        break;#ifdef Q_OS_TEMP    case VER_PLATFORM_WIN32_CE:#ifdef Q_OS_TEMP        if (qt_cever >= 400)            winver = QSysInfo::WV_CENET;        else#endif            winver = QSysInfo::WV_CE;        break;#endif    default: // VER_PLATFORM_WIN32_NT        if (osver.dwMajorVersion < 5) {            winver = QSysInfo::WV_NT;        } else if (osver.dwMajorVersion == 6) {            winver = QSysInfo::WV_VISTA;        } else if (osver.dwMinorVersion == 0) {            winver = QSysInfo::WV_2000;        } else if (osver.dwMinorVersion == 1) {            winver = QSysInfo::WV_XP;        } else if (osver.dwMinorVersion == 2) {            winver = QSysInfo::WV_2003;        } else {            qWarning("Qt: Untested Windows version detected!");            winver = QSysInfo::WV_NT_based;        }    }#ifdef QT_DEBUG    {        QByteArray override = qgetenv("QT_WINVER_OVERRIDE");        if (override.isEmpty())            return winver;        if (override == "Me")            winver = QSysInfo::WV_Me;        if (override == "95")            winver = QSysInfo::WV_95;        else if (override == "98")            winver = QSysInfo::WV_98;        else if (override == "NT")            winver = QSysInfo::WV_NT;        else if (override == "2000")            winver = QSysInfo::WV_2000;        else if (override == "2003")            winver = QSysInfo::WV_2003;        else if (override == "XP")            winver = QSysInfo::WV_XP;        else if (override == "VISTA")            winver = QSysInfo::WV_VISTA;    }#endif    return winver;}const QSysInfo::WinVersion QSysInfo::WindowsVersion = winVersion();#endif/*!    \macro void Q_ASSERT(bool test)    \relates <QtGlobal>    Prints a warning message containing the source code file name and    line number if \a test is false.    Q_ASSERT() is useful for testing pre- and post-conditions    during development. It does nothing if \c QT_NO_DEBUG was defined    during compilation.    Example:    \code        // File: div.cpp        #include <QtGlobal>        int divide(int a, int b)        {            Q_ASSERT(b != 0);            return a / b;        }    \endcode    If \c b is zero, the Q_ASSERT statement will output the following    message using the qFatal() function:    \code        ASSERT: "b == 0" in file div.cpp, line 7    \endcode    \sa Q_ASSERT_X(), qFatal(), {Debugging Techniques}*//*!    \macro void Q_ASSERT_X(bool test, const char *where, const char *what)    \relates <QtGlobal>    Prints the message \a what together with the location \a where,    the source file name and line number if \a test is false.    Q_ASSERT_X is useful for testing pre- and post-conditions during    development. It does nothing if \c QT_NO_DEBUG was defined during    compilation.    Example:    \code        // File: div.cpp        #include <QtGlobal>        int divide(int a, int b)        {            Q_ASSERT_X(b != 0, "divide", "division by zero");            return a / b;        }    \endcode    If \c b is zero, the Q_ASSERT_X statement will output the following    message using the qFatal() function:    \code        ASSERT failure in divide: "division by zero", file div.cpp, line 7    \endcode    \sa Q_ASSERT(), qFatal(), {Debugging Techniques}*//*!    \macro void Q_CHECK_PTR(void *pointer)    \relates <QtGlobal>    If \a pointer is 0, prints a warning message containing the source    code's file name and line number, saying that the program ran out    of memory.    Q_CHECK_PTR does nothing if \c QT_NO_DEBUG was defined during    compilation.    Example:    \code        int *a;        Q_CHECK_PTR(a = new int[80]);   // WRONG!        a = new (nothrow) int[80];      // Right        Q_CHECK_PTR(a);    \endcode    \sa qWarning(), {Debugging Techniques}*//*  The Q_CHECK_PTR macro calls this function if an allocation check  fails.*/void qt_check_pointer(const char *n, int l){    qWarning("In file %s, line %d: Out of memory", n, l);}/*  The Q_ASSERT macro calls this this function when the test fails.*/void qt_assert(const char *assertion, const char *file, int line){    qFatal("ASSERT: \"%s\" in file %s, line %d", assertion, file, line);}/*  The Q_ASSERT_X macro calls this this function when the test fails.*/void qt_assert_x(const char *where, const char *what, const char *file, int line){    qFatal("ASSERT failure in %s: \"%s\", file %s, line %d", where, what, file, line);}/*    Dijkstra's bisection algorithm to find the square root of an integer.    Deliberately not exported as part of the Qt API, but used in both    qsimplerichtext.cpp and qgfxraster_qws.cpp*/Q_CORE_EXPORT unsigned int qt_int_sqrt(unsigned int n){    // n must be in the range 0...UINT_MAX/2-1    if (n >= (UINT_MAX>>2)) {        unsigned int r = 2 * qt_int_sqrt(n / 4);        unsigned int r2 = r + 1;        return (n >= r2 * r2) ? r2 : r;    }    uint h, p= 0, q= 1, r= n;    while (q <= n)        q <<= 2;    while (q != 1) {        q >>= 2;        h= p + q;        p >>= 1;        if (r >= h) {            p += q;            r -= h;        }    }    return p;}#if defined(qMemCopy)#  undef qMemCopy#endif#if defined(qMemSet)#  undef qMemSet#endifvoid *qMalloc(size_t size) { return ::malloc(size); }void qFree(void *ptr) { ::free(ptr); }void *qRealloc(void *ptr, size_t size) { return ::realloc(ptr, size); }void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }static QtMsgHandler handler = 0;                // pointer to debug handlerstatic const int QT_BUFFER_LENGTH = 8192;       // internal buffer length#ifdef Q_CC_MWERKS#include <CoreServices/CoreServices.h>extern bool qt_is_gui_used;static void mac_default_handler(const char *msg){    if (qt_is_gui_used) {        Str255 pmsg;        qt_mac_to_pascal_string(msg, pmsg);        DebugStr(pmsg);    } else {        fprintf(stderr, msg);    }}#endif // Q_CC_MWERKSQString qt_error_string(int errorCode){    const char *s = 0;    QString ret;    if (errorCode == -1) {#if defined(Q_OS_WIN32)        errorCode = GetLastError();#else        errorCode = errno;#endif    }    switch (errorCode) {    case 0:        break;    case EACCES:        s = QT_TRANSLATE_NOOP("QIODevice", "Permission denied");        break;    case EMFILE:        s = QT_TRANSLATE_NOOP("QIODevice", "Too many open files");        break;    case ENOENT:        s = QT_TRANSLATE_NOOP("QIODevice", "No such file or directory");        break;    case ENOSPC:        s = QT_TRANSLATE_NOOP("QIODevice", "No space left on device");        break;    default: {#ifdef Q_OS_WIN        QT_WA({            unsigned short *string = 0;            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,                          NULL,                          errorCode,                          MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),                          (LPTSTR)&string,                          0,                          NULL);            ret = QString::fromUtf16(string);            LocalFree((HLOCAL)string);        }, {            char *string = 0;            FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,                           NULL,                           errorCode,                           MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),                           (LPSTR)&string,                           0,                           NULL);            ret = QString::fromLocal8Bit(string);            LocalFree((HLOCAL)string);        });#elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L        QByteArray buf(1024, '\0');        strerror_r(errorCode, buf.data(), buf.size());        ret = QString::fromLocal8Bit(buf.constData());#else        ret = QString::fromLocal8Bit(strerror(errorCode));#endif	break; }    }    if (s)        // ######## this breaks moc build currently//         ret = QCoreApplication::translate("QIODevice", s);        ret = QString::fromLatin1(s);    return ret.trimmed();}/*!    \fn QtMsgHandler qInstallMsgHandler(QtMsgHandler handler)    \relates <QtGlobal>    Installs a Qt message \a handler whis has been defined    previously. Returns a pointer to the message \a handler.    The message handler is a function that prints out debug messages,    warnings, critical and fatal error messages. The Qt library (debug    version) contains hundreds of warning messages that are printed    when internal errors (usually invalid function arguments)    occur. If you implement your own message handler, you get total    control of these messages.    The default message handler prints the message to the standard    output under X11 or to the debugger under Windows. If it is a    fatal message, the application aborts immediately.    Only one message handler can be defined, since this is usually    done on an application-wide basis to control debug output.    To restore the message handler, call \c qInstallMsgHandler(0).    Example:    \code        #include <qapplication.h>        #include <stdio.h>        #include <stdlib.h>        void myMessageOutput(QtMsgType type, const char *msg)        {            switch (type) {            case QtDebugMsg:                fprintf(stderr, "Debug: %s\n", msg);                break;            case QtWarningMsg:                fprintf(stderr, "Warning: %s\n", msg);                break;            case QtCriticalMsg:                fprintf(stderr, "Critical: %s\n", msg);                break;            case QtFatalMsg:                fprintf(stderr, "Fatal: %s\n", msg);                abort();            }        }        int main(int argc, char **argv)        {            qInstallMsgHandler(myMessageOutput);            QApplication app(argc, argv);            ...            return app.exec();        }    \endcode    \sa qDebug(), qWarning(), qCritical(), qFatal(), QtMsgType,    {Debugging Techniques}*/QtMsgHandler qInstallMsgHandler(QtMsgHandler h){    QtMsgHandler old = handler;    handler = h;    return old;}void qt_message_output(QtMsgType msgType, const char *buf){    if (handler) {        (*handler)(msgType, buf);    } else {#if defined(Q_CC_MWERKS)        mac_default_handler(buf);#elif defined(Q_OS_TEMP)        QString fstr(buf);        OutputDebugString((fstr + "\n").utf16());#else        fprintf(stderr, "%s\n", buf);        fflush(stderr);#endif    }    if (msgType == QtFatalMsg        || (msgType == QtWarningMsg            && (!qgetenv("QT_FATAL_WARNINGS").isNull())) ) {#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR)        // get the current report mode        int reportMode = _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);        _CrtSetReportMode(_CRT_ERROR, reportMode);        int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, buf);        if (ret == 0  && reportMode & _CRTDBG_MODE_WNDW)            return; // ignore        else if (ret == 1)            _CrtDbgBreak();#endif#if defined(Q_OS_UNIX) && defined(QT_DEBUG)        abort(); // trap; generates core dump#else        exit(1); // goodbye cruel world#endif    }}#undef qDebug/*!    \relates <QtGlobal>    Calls the message handler with the debug message \a msg. If no    message handler has been installed, the message is printed to    stderr. Under Windows, the message is sent to the debugger. This    function does nothing if \c QT_NO_DEBUG_OUTPUT was defined during    compilation.    If you pass the function a format string and a list of arguments,    it works in similar way to the C printf() function.    Example:    \code        qDebug("Items in list: %d", myList.size());    \endcode    If you include \c <QtDebug>, a more convenient syntax is also    available:    \code        qDebug() << "Brush:" << myQBrush << "Other value:" << i;    \endcode    This syntax automatically puts a single space between each item,    and outputs a newline at the end. It supports many C++ and Qt    types.    \warning The internal buffer is limited to 8192 bytes, including    the '\0'-terminator.    \warning Passing (const char *)0 as argument to qDebug might lead    to crashes on certain platforms due to the platform's printf() implementation.    \sa qWarning(), qCritical(), qFatal(), qInstallMsgHandler(),        {Debugging Techniques}*/void qDebug(const char *msg, ...){    char buf[QT_BUFFER_LENGTH];    buf[QT_BUFFER_LENGTH - 1] = '\0';    va_list ap;    va_start(ap, msg);                        // use variable arg list    qvsnprintf(buf, QT_BUFFER_LENGTH - 1, msg, ap);    va_end(ap);    qt_message_output(QtDebugMsg, buf);}#undef qWarning/*!    \relates <QtGlobal>    Calls the message handler with the warning message \a msg. If no    message handler has been installed, the message is printed to    stderr. Under Windows, the message is sent to the debugger. This    function does nothing if \c QT_NO_WARNING_OUTPUT was defined    during compilation; it exits if the environment variable \c    QT_FATAL_WARNINGS is defined.    This function takes a format string and a list of arguments,    similar to the C printf() function.    Example:    \code        void f(int c)        {            if (c > 200)                qWarning("f: bad argument, c == %d", c);        }    \endcode    \warning The internal buffer is limited to 8192 bytes, including    the '\0'-terminator.    \warning Passing (const char *)0 as argument to qWarning might lead    to crashes on certain platforms due to the platforms printf implementation.    \sa qDebug(), qCritical(), qFatal(), qInstallMsgHandler(),        {Debugging Techniques}*/void qWarning(const char *msg, ...){    char buf[QT_BUFFER_LENGTH];    buf[QT_BUFFER_LENGTH - 1] = '\0';    va_list ap;    va_start(ap, msg); // use variable arg list    qvsnprintf(buf, QT_BUFFER_LENGTH - 1, msg, ap);    va_end(ap);    qt_message_output(QtWarningMsg, buf);}/*!    \relates <QtGlobal>    Calls the message handler with the critical message \a msg. If no    message handler has been installed, the message is printed to    stderr. Under Windows, the message is sent to the debugger.    This function takes a format string and a list of arguments, similar    to the C printf() function.    Example:    \code        void load(const QString &fileName)        {            QFile file(fileName);            if (!file.exists())

⌨️ 快捷键说明

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