diff options
author | A-Team <ateam@pad.test.qt.nokia.com> | 2010-11-05 23:00:12 (GMT) |
---|---|---|
committer | A-Team <ateam@pad.test.qt.nokia.com> | 2010-11-05 23:00:12 (GMT) |
commit | 84de3d47a2fd5400920ad570b443b6bb95c8c766 (patch) | |
tree | 5fa4a5ff143e96a2b75831cf4c0f6f7bc623fb0a | |
parent | 915aa77e130e4722173df10e7bb6816c54a2c4e4 (diff) | |
parent | 6ac4bc5cb7ac7500b39ea6828fdf76e95a2c2f0b (diff) | |
download | Qt-84de3d47a2fd5400920ad570b443b6bb95c8c766.zip Qt-84de3d47a2fd5400920ad570b443b6bb95c8c766.tar.gz Qt-84de3d47a2fd5400920ad570b443b6bb95c8c766.tar.bz2 |
Merge branch '4.7-upstream' into 4.7-doc
64 files changed, 2678 insertions, 438 deletions
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index decec14..6d1f708 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -79,7 +79,6 @@ QMAKE_LIBS_OPENGL_ES2_QT = -llibglesv2 -lcone -lws32 QMAKE_LIBS_OPENVG = -llibOpenVG -lfbscli -lbitgdi -lgdi QMAKE_LIBS_THREAD = -llibpthread QMAKE_LIBS_COMPAT = -QMAKE_LIBS_QT_ENTRY = -llibcrt0.lib QMAKE_LIBS_S60 = -lavkon -leikcoctl exists($${EPOCROOT}epoc32/include/platform/sgresource/sgimage.h) { @@ -127,6 +126,8 @@ QT_ARCH = symbian load(qt_config) +QMAKE_LIBS_QT_ENTRY = -lqtmain$${QT_LIBINFIX}.lib + # These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins QT_IMPORTS_BASE_DIR = /resource/qt/imports diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index 0564e9b..348c366 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -3,9 +3,6 @@ load(default_post) contains(TEMPLATE, ".*app") { contains(CONFIG, stdbinary) { QMAKE_LIBS += - } else:contains(QT, gui):contains(CONFIG,qt) { - S60MAIN_LIBS = -leuser - QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib $$S60MAIN_LIBS } else { QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY } diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 1a51cb2..20bc3a3 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -187,26 +187,16 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { linux-armcc: { QMAKE_LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\) - contains(CONFIG, "qt"):contains(QT, "gui") { #if linking with QtCore - QMAKE_LIBS -= -lqtmain$${QT_LIBINFIX}.lib - QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib - } else { - QMAKE_LIBS -= -llibcrt0.lib - QMAKE_LIBS += -llibcrt0.lib - } + QMAKE_LIBS -= $$QMAKE_LIBS_QT_ENTRY + QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY } else :linux-gcce { # notice that we can't merge these as ordering of arguments is important. QMAKE_LIBS += \ -l:eexe.lib \ -l:usrt2_2.lib - contains(CONFIG, "qt"):contains(QT, "gui") { #if linking with QtCore - QMAKE_LIBS -= -l:qtmain$${QT_LIBINFIX}.lib - QMAKE_LIBS += -l:qtmain$${QT_LIBINFIX}.lib - } else { - QMAKE_LIBS -= -l:libcrt0.lib - QMAKE_LIBS -= -l:libcrt0_gcce.lib - QMAKE_LIBS += -l:libcrt0_gcce.lib - } + modified_entry = $$replace(QMAKE_LIBS_QT_ENTRY, "^-l", "-l:") + QMAKE_LIBS -= $$modified_entry + QMAKE_LIBS += $$modified_entry QMAKE_LIBS += \ -l:dfpaeabi.dso \ -l:drtaeabi.dso \ diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 8ee42e7..e6c5fb9 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -88,6 +88,12 @@ #define CSIDL_APPDATA 0x001a // <username>\Application Data #endif +#ifdef Q_AUTOTEST_EXPORT +# define Q_AUTOTEST_EXPORT_HELPER Q_AUTOTEST_EXPORT +#else +# define Q_AUTOTEST_EXPORT_HELPER static +#endif + // ************************************************************************ // QConfFile @@ -134,7 +140,7 @@ QT_BEGIN_INCLUDE_NAMESPACE # include <sys/mount.h> QT_END_INCLUDE_NAMESPACE -static bool isLikelyToBeNfs(int handle) +Q_AUTOTEST_EXPORT_HELPER bool qIsLikelyToBeNfs(int handle) { struct statfs buf; if (fstatfs(handle, &buf) != 0) @@ -160,7 +166,7 @@ QT_END_INCLUDE_NAMESPACE # define AUTOFSNG_SUPER_MAGIC 0x7d92b1a0 # endif -static bool isLikelyToBeNfs(int handle) +Q_AUTOTEST_EXPORT_HELPER bool qIsLikelyToBeNfs(int handle) { struct statfs buf; if (fstatfs(handle, &buf) != 0) @@ -177,7 +183,7 @@ QT_BEGIN_INCLUDE_NAMESPACE # include <sys/statvfs.h> QT_END_INCLUDE_NAMESPACE -static bool isLikelyToBeNfs(int handle) +Q_AUTOTEST_EXPORT_HELPER bool qIsLikelyToBeNfs(int handle) { struct statvfs buf; if (fstatvfs(handle, &buf) != 0) @@ -189,7 +195,7 @@ static bool isLikelyToBeNfs(int handle) #endif } #else -static inline bool isLikelyToBeNfs(int /* handle */) +Q_AUTOTEST_EXPORT_HELPER inline bool qIsLikelyToBeNfs(int /* handle */) { return true; } @@ -203,7 +209,7 @@ static bool unixLock(int handle, int lockType) now is to disable locking when we detect NFS (or AutoFS or CacheFS, which are probably wrapping NFS). */ - if (isLikelyToBeNfs(handle)) + if (qIsLikelyToBeNfs(handle)) return false; struct flock fl; diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp index abaaa49..ce27bd3 100644 --- a/src/gui/dialogs/qinputdialog.cpp +++ b/src/gui/dialogs/qinputdialog.cpp @@ -561,6 +561,9 @@ void QInputDialog::setLabelText(const QString &text) } else { d->label->setText(text); } +#ifdef Q_OS_SYMBIAN + d->label->setWordWrap(true); +#endif } QString QInputDialog::labelText() const diff --git a/src/gui/image/qxbmhandler.cpp b/src/gui/image/qxbmhandler.cpp index 0dd4e99..f9c2e0c 100644 --- a/src/gui/image/qxbmhandler.cpp +++ b/src/gui/image/qxbmhandler.cpp @@ -66,27 +66,36 @@ static inline int hex2byte(register char *p) static bool read_xbm_header(QIODevice *device, int& w, int& h) { const int buflen = 300; + const int maxlen = 4096; char buf[buflen + 1]; QRegExp r1(QLatin1String("^#define[ \t]+[a-zA-Z0-9._]+[ \t]+")); QRegExp r2(QLatin1String("[0-9]+")); qint64 readBytes = 0; + qint64 totalReadBytes = 0; - // "#define .._width <num>" - readBytes = device->readLine(buf, buflen); - if (readBytes <= 0) - return false; - buf[readBytes - 1] = '\0'; + buf[0] = '\0'; // skip initial comment, if any - while (buf[0] != '#' && (readBytes = device->readLine( buf, buflen )) > 0) {} + while (buf[0] != '#') { + readBytes = device->readLine(buf, buflen); + + // if readBytes >= buflen, it's very probably not a C file + if (readBytes <= 0 || readBytes >= buflen -1) + return false; + + // limit xbm headers to the first 4k in the file to prevent + // excessive reads on non-xbm files + totalReadBytes += readBytes; + if (totalReadBytes >= maxlen) + return false; + } - if (readBytes <= 0) - return false; buf[readBytes - 1] = '\0'; QString sbuf; sbuf = QString::fromLatin1(buf); + // "#define .._width <num>" if (r1.indexIn(sbuf) == 0 && r2.indexIn(sbuf, r1.matchedLength()) == r1.matchedLength()) w = QByteArray(&buf[r1.matchedLength()]).trimmed().toInt(); diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 6c4004e..a4ae46b 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -1430,10 +1430,18 @@ QStyle *QApplication::style() // Compile-time search for default style // QString style; - if (!QApplicationPrivate::styleOverride.isEmpty()) +#ifdef QT_BUILD_INTERNAL + QString envStyle = QString::fromLocal8Bit(qgetenv("QT_STYLE_OVERRIDE")); +#else + QString envStyle; +#endif + if (!QApplicationPrivate::styleOverride.isEmpty()) { style = QApplicationPrivate::styleOverride; - else + } else if (!envStyle.isEmpty()) { + style = envStyle; + } else { style = QApplicationPrivate::desktopStyleKey(); + } QStyle *&app_style = QApplicationPrivate::app_style; app_style = QStyleFactory::create(style); diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index a4cc5a3..7c68170 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -2334,6 +2334,30 @@ void qt_init(QApplicationPrivate *priv, int, X11->desktopEnvironment = DE_4DWM; break; } + + if (XGetWindowProperty(X11->display, QX11Info::appRootWindow(), + ATOM(_NET_SUPPORTING_WM_CHECK), + 0, 1024, False, XA_WINDOW, &type, + &format, &length, &after, &data) == Success) { + if (type == XA_WINDOW && format == 32) { + Window windowManagerWindow = *((Window*) data); + XFree(data); + data = 0; + + if (windowManagerWindow != XNone) { + Atom utf8atom = ATOM(UTF8_STRING); + if (XGetWindowProperty(QX11Info::display(), windowManagerWindow, ATOM(_NET_WM_NAME), + 0, 1024, False, utf8atom, &type, + &format, &length, &after, &data) == Success) { + if (type == utf8atom && format == 8) { + if (qstrcmp((const char *)data, "MCompositor") == 0) + X11->desktopEnvironment = DE_MEEGO_COMPOSITOR; + } + } + } + } + } + } while(0); if (data) diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h index d62d9c3..56c8094 100644 --- a/src/gui/kernel/qt_x11_p.h +++ b/src/gui/kernel/qt_x11_p.h @@ -338,6 +338,7 @@ enum DesktopEnvironment { DE_KDE, DE_GNOME, DE_CDE, + DE_MEEGO_COMPOSITOR, DE_4DWM }; diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 53ca28c..f3fb2f5 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -112,8 +112,6 @@ const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = { // *** End of generated data *** }; -QSet<const QWidget *> *QS60StylePrivate::m_autoFillDisabledWidgets = 0; - const short *QS60StylePrivate::m_pmPointer = QS60StylePrivate::data[0]; // theme background texture @@ -154,8 +152,6 @@ const double KTabFontMul = 0.72; QS60StylePrivate::~QS60StylePrivate() { - delete m_autoFillDisabledWidgets; - m_autoFillDisabledWidgets = 0; clearCaches(); //deletes also background image deleteThemePalette(); #ifdef Q_WS_S60 @@ -3188,13 +3184,6 @@ void QS60Style::polish(QWidget *widget) } d->setThemePalette(widget); d->setFont(widget); - - if (widget->autoFillBackground()) { - if (!d->m_autoFillDisabledWidgets) - d->m_autoFillDisabledWidgets = new QSet<const QWidget *>; - widget->setAutoFillBackground(false); - d->m_autoFillDisabledWidgets->insert(widget); - } } /*! @@ -3229,13 +3218,6 @@ void QS60Style::unpolish(QWidget *widget) if (widget) widget->setPalette(QPalette()); - - if (d->m_autoFillDisabledWidgets && - !d->m_autoFillDisabledWidgets->isEmpty() && - d->m_autoFillDisabledWidgets->contains(widget)) { - widget->setAutoFillBackground(true); - d->m_autoFillDisabledWidgets->remove(widget); - } #if defined(Q_WS_S60) && !defined(QT_NO_PROGRESSBAR) if (QProgressBar *bar = qobject_cast<QProgressBar *>(widget)) { diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 3d66c40..b46f75e 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -625,7 +625,6 @@ private: static qint64 m_webPaletteKey; static QPointer<QWidget> m_pressedWidget; - static QSet<const QWidget *> *m_autoFillDisabledWidgets; #ifdef Q_WS_S60 //list of progress bars having animation running diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 4e5de53..02daa50 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -412,7 +412,9 @@ void QHttpNetworkConnectionChannel::_q_receiveReply() } case QHttpNetworkReplyPrivate::ReadingDataState: { QHttpNetworkReplyPrivate *replyPrivate = reply->d_func(); - if (replyPrivate->downstreamLimited && !replyPrivate->responseData.isEmpty() && replyPrivate->shouldEmitSignals()) { + if (socket->state() == QAbstractSocket::ConnectedState && + replyPrivate->downstreamLimited && !replyPrivate->responseData.isEmpty() && replyPrivate->shouldEmitSignals()) { + // (only do the following when still connected, not when we have already been disconnected and there is still data) // We already have some HTTP body data. We don't read more from the socket until // this is fetched by QHttpNetworkAccessHttpBackend. If we would read more, // we could not limit our read buffer usage. @@ -421,7 +423,6 @@ void QHttpNetworkConnectionChannel::_q_receiveReply() // to the read buffer maximum size, but we don't care since they should be small. return; } - if (!replyPrivate->isChunked() && !replyPrivate->autoDecompress && replyPrivate->bodyLength > 0) { // bulk files like images should fulfill these properties and diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index bc5a025..84f9517 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -426,7 +426,8 @@ template<> void QSharedDataPointer<QNetworkProxyPrivate>::detach() QNetworkProxy::QNetworkProxy() : d(0) { - globalNetworkProxy()->init(); + if (QGlobalNetworkProxy *globalProxy = globalNetworkProxy()) + globalProxy->init(); } /*! @@ -441,7 +442,8 @@ QNetworkProxy::QNetworkProxy(ProxyType type, const QString &hostName, quint16 po const QString &user, const QString &password) : d(new QNetworkProxyPrivate(type, hostName, port, user, password)) { - globalNetworkProxy()->init(); + if (QGlobalNetworkProxy *globalProxy = globalNetworkProxy()) + globalProxy->init(); } /*! diff --git a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp index 559a6fd..167a7d2 100644 --- a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp +++ b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp @@ -63,8 +63,9 @@ QGLRect QGL2PEXVertexArray::boundingRect() const void QGL2PEXVertexArray::addClosingLine(int index) { - if (QPointF(vertexArray.at(index)) != QPointF(vertexArray.last())) - vertexArray.add(vertexArray.at(index)); + QPointF point(vertexArray.at(index)); + if (point != QPointF(vertexArray.last())) + vertexArray.add(point); } void QGL2PEXVertexArray::addCentroid(const QVectorPath &path, int subPathIndex) diff --git a/src/plugins/bearer/icd/maemo_icd.cpp b/src/plugins/bearer/icd/maemo_icd.cpp index 4f879e3..57ab0a8 100644 --- a/src/plugins/bearer/icd/maemo_icd.cpp +++ b/src/plugins/bearer/icd/maemo_icd.cpp @@ -508,6 +508,7 @@ uint IcdPrivate::state(QList<IcdStateResult>& state_results) mInterface.clear(); while ((time(0)<=(started+timeout_secs)) && mInterface.isEmpty()) { mDBus->synchronousDispatch(1000); + QCoreApplication::sendPostedEvents(icd, QEvent::MetaCall); } if (time(0)>(started+timeout_secs)) { @@ -685,6 +686,7 @@ uint IcdPrivate::addrinfo(QList<IcdAddressInfoResult>& addr_results) mInterface.clear(); while ((time(0)<=(started+timeout_secs)) && mInterface.isEmpty()) { mDBus->synchronousDispatch(1000); + QCoreApplication::sendPostedEvents(icd, QEvent::MetaCall); } if (time(0)>(started+timeout_secs)) { diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index 37434e3..8d0f587 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -679,7 +679,7 @@ void QNetworkSessionPrivateImpl::open() if (serviceConfig.isValid()) { lastError = QNetworkSession::OperationNotSupportedError; emit QNetworkSessionPrivate::error(lastError); - } else if (!isOpen) { + } else if (!opened) { if (publicConfig.type() == QNetworkConfiguration::UserChoice) { /* Caller is trying to connect to default IAP. * At this time we will not know the IAP details so we just diff --git a/tests/auto/platformquirks.h b/tests/auto/platformquirks.h new file mode 100644 index 0000000..06d23d7 --- /dev/null +++ b/tests/auto/platformquirks.h @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PLATFORMQUIRKS_H +#define PLATFORMQUIRKS_H + +#include <qglobal.h> + +#ifdef QT_GUI_LIB +#include <qapplication.h> +#endif + +#ifdef Q_WS_X11 +#include <private/qt_x11_p.h> +#endif + +struct PlatformQuirks +{ + enum MediaFileTypes + { + mp3, + wav, + ogg + }; + + /* On some platforms, libpng or libjpeg sacrifice precision for speed. + Esp. with NEON support, color values after decoding can be off by up + to three bytes. + */ + static inline bool isImageLoaderImprecise() + { +#ifdef Q_WS_MAEMO_5 + return true; +#elif defined(Q_WS_X11) + // ### this is a very bad assumption, we should really check the version of libjpeg + return X11->desktopEnvironment == DE_MEEGO_COMPOSITOR; +#else + return false; +#endif + } + + /* Some windowing systems automatically maximize apps on startup (e.g. Maemo) + "Normal" fixed-sized windows do not work, the WM ignores their size settings. + */ + static inline bool isAutoMaximizing() + { +#ifdef Q_WS_MAEMO_5 + return true; +#elif defined(Q_WS_X11) + return X11->desktopEnvironment == DE_MEEGO_COMPOSITOR; +#else + return false; +#endif + } + + static inline bool haveMouseCursor() + { +#ifdef Q_WS_MAEMO_5 + return false; +#elif defined(Q_WS_X11) + return X11->desktopEnvironment != DE_MEEGO_COMPOSITOR; +#else + return true; +#endif + } + + /* On some systems an ogg codec is not installed by default. + The autotests have to know which fileType is the default on the system*/ + static inline MediaFileTypes defaultMediaFileType() + { +#ifdef Q_WS_MAEMO_5 + return PlatformQuirks::mp3; +#endif +#ifdef Q_WS_X11 + // ### very bad assumption + if (X11->desktopEnvironment == DE_MEEGO_COMPOSITOR) + return PlatformQuirks::mp3; +#endif + return PlatformQuirks::ogg; + } +}; + +#endif + diff --git a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp index da83826..d6c4b53 100644 --- a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp +++ b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp @@ -353,12 +353,13 @@ void tst_QAbstractScrollArea::task214488_layoutDirection() void tst_QAbstractScrollArea::patternBackground() { - QScrollArea scrollArea; + QWidget topLevel; + QScrollArea scrollArea(&topLevel); scrollArea.resize(200, 200); QWidget widget; widget.resize(600, 600); scrollArea.setWidget(&widget); - scrollArea.show(); + topLevel.show(); QLinearGradient linearGrad(QPointF(250, 250), QPointF(300, 300)); linearGrad.setColorAt(0, Qt::yellow); diff --git a/tests/auto/qabstractslider/tst_qabstractslider.cpp b/tests/auto/qabstractslider/tst_qabstractslider.cpp index cf069db..cd41d05 100644 --- a/tests/auto/qabstractslider/tst_qabstractslider.cpp +++ b/tests/auto/qabstractslider/tst_qabstractslider.cpp @@ -55,6 +55,8 @@ class Slider : public QAbstractSlider { public: + Slider(QWidget *parent) + : QAbstractSlider(parent) {} using QAbstractSlider::setRepeatAction; using QAbstractSlider::repeatAction; }; @@ -95,6 +97,7 @@ private slots: private: void waitUntilTimeElapsed(const QTime& t, int ms); + QWidget *topLevel; Slider *slider; int previousAction; int reportedMinimum; @@ -113,7 +116,8 @@ Q_DECLARE_METATYPE(QPoint) void tst_QAbstractSlider::initTestCase() { - slider = new Slider; + topLevel = new QWidget; + slider = new Slider(topLevel); slider->setObjectName("testWidget"); slider->resize(100,100); slider->show(); @@ -129,7 +133,7 @@ void tst_QAbstractSlider::initTestCase() void tst_QAbstractSlider::cleanupTestCase() { - delete slider; + delete topLevel; } void tst_QAbstractSlider::actionTriggered(int action) @@ -735,7 +739,6 @@ void tst_QAbstractSlider::wheelEvent_data() << 100 // expected position after #endif << QPoint(1,1); - QTest::newRow("Different orientation") << 0 // initial position << 0 // minimum << 100 // maximum @@ -774,7 +777,6 @@ void tst_QAbstractSlider::wheelEvent_data() #endif << QPoint(0,0); - QTest::newRow("Inverted controls") << 50 // initial position << 0 // minimum << 100 // maximum @@ -924,6 +926,7 @@ void tst_QAbstractSlider::sliderPressedReleased() QFETCH(uint, subControl); QFETCH(int, expectedCount); + QWidget topLevel; QAbstractSlider *slider; switch (control) { default: @@ -931,11 +934,11 @@ void tst_QAbstractSlider::sliderPressedReleased() return; break; case QStyle::CC_Slider: - slider = new QSlider; + slider = new QSlider(&topLevel); slider->setLayoutDirection(Qt::LeftToRight); // Makes "upside down" much easier to compute break; case QStyle::CC_ScrollBar: - slider = new QScrollBar; + slider = new QScrollBar(&topLevel); break; } @@ -949,7 +952,7 @@ void tst_QAbstractSlider::sliderPressedReleased() QSignalSpy spy2(slider, SIGNAL(sliderReleased())); // Mac Style requires the control to be active to get the correct values... - slider->show(); + topLevel.show(); slider->activateWindow(); QStyleOptionSlider option; diff --git a/tests/auto/qaccessibility/tst_qaccessibility.cpp b/tests/auto/qaccessibility/tst_qaccessibility.cpp index cea259c..21a530e 100644 --- a/tests/auto/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/qaccessibility/tst_qaccessibility.cpp @@ -2269,6 +2269,7 @@ void tst_QAccessibility::scrollBarTest() delete scrollBarInterface; delete scrollBar; + // Test that the rects are ok. { QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal); @@ -2289,7 +2290,6 @@ void tst_QAccessibility::scrollBarTest() const QRect scrollBarRect = scrollBarInterface->rect(0); QVERIFY(scrollBarRect.isValid()); - // Verify that the sub-control rects are valid and inside the scrollBar rect. for (int i = LineUp; i <= LineDown; ++i) { const QRect testRect = scrollBarInterface->rect(i); @@ -3469,14 +3469,15 @@ void tst_QAccessibility::tableWidgetTest() { #ifdef QTEST_ACCESSIBILITY { - QTableWidget *w = new QTableWidget(8,4); + QWidget *topLevel = new QWidget; + QTableWidget *w = new QTableWidget(8,4,topLevel); for (int r = 0; r < 8; ++r) { for (int c = 0; c < 4; ++c) { w->setItem(r, c, new QTableWidgetItem(tr("%1,%2").arg(c).arg(r))); } } w->resize(100, 100); - w->show(); + topLevel->show(); #if defined(Q_WS_X11) qt_x11_wait_for_window_manager(w); QTest::qWait(100); @@ -3503,6 +3504,7 @@ void tst_QAccessibility::tableWidgetTest() delete view; delete client; delete w; + delete topLevel; } QTestAccessibility::clearEvents(); #else diff --git a/tests/auto/qboxlayout/tst_qboxlayout.cpp b/tests/auto/qboxlayout/tst_qboxlayout.cpp index c4acfdc..659f8a5 100644 --- a/tests/auto/qboxlayout/tst_qboxlayout.cpp +++ b/tests/auto/qboxlayout/tst_qboxlayout.cpp @@ -198,7 +198,8 @@ void tst_QBoxLayout::sizeConstraints() void tst_QBoxLayout::setGeometry() { - QWidget w; + QWidget toplevel; + QWidget w(&toplevel); QVBoxLayout *lay = new QVBoxLayout; lay->setMargin(0); lay->setSpacing(0); @@ -209,7 +210,7 @@ void tst_QBoxLayout::setGeometry() lay2->setAlignment(Qt::AlignRight); lay->addLayout(lay2); w.setLayout(lay); - w.show(); + toplevel.show(); QRect newGeom(0, 0, 70, 70); lay2->setGeometry(newGeom); diff --git a/tests/auto/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/qbuttongroup/tst_qbuttongroup.cpp index a610a7f..1831e5d 100644 --- a/tests/auto/qbuttongroup/tst_qbuttongroup.cpp +++ b/tests/auto/qbuttongroup/tst_qbuttongroup.cpp @@ -396,19 +396,20 @@ void tst_QButtonGroup::task106609() vbox->addWidget(radio2); buttons->addButton(radio3, 3); vbox->addWidget(radio3); - - radio1->setFocus(); - radio1->setChecked(true); dlg.show(); + QTest::qWaitForWindowShown(&dlg); qRegisterMetaType<QAbstractButton*>("QAbstractButton*"); QSignalSpy spy1(buttons, SIGNAL(buttonClicked(QAbstractButton*))); QSignalSpy spy2(buttons, SIGNAL(buttonClicked(int))); - QTestEventLoop::instance().enterLoop(1); QApplication::setActiveWindow(&dlg); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&dlg)); + radio1->setFocus(); + radio1->setChecked(true); + QTestEventLoop::instance().enterLoop(1); + //qDebug() << "int:" << spy2.count() << "QAbstractButton*:" << spy1.count(); QCOMPARE(spy2.count(), 2); QCOMPARE(spy1.count(), 2); diff --git a/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp b/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp index 042d8e0..01473d8 100644 --- a/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp +++ b/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp @@ -82,7 +82,8 @@ private slots: // Testing get/set functions void tst_QCalendarWidget::getSetCheck() { - QCalendarWidget object; + QWidget topLevel; + QCalendarWidget object(&topLevel); //horizontal header formats object.setHorizontalHeaderFormat(QCalendarWidget::NoHorizontalHeader); @@ -191,7 +192,7 @@ void tst_QCalendarWidget::buttonClickCheck() QCOMPARE(month, object.monthShown()); button = qFindChild<QToolButton *>(&object, "qt_calendar_yearbutton"); - QTest::mouseClick(button, Qt::LeftButton); + QTest::mouseClick(button, Qt::LeftButton, Qt::NoModifier, button->rect().center(), 2); QVERIFY(!button->isVisible()); QSpinBox *spinbox = qFindChild<QSpinBox *>(&object, "qt_calendar_yearedit"); QTest::qWait(500); diff --git a/tests/auto/qcolumnview/tst_qcolumnview.cpp b/tests/auto/qcolumnview/tst_qcolumnview.cpp index 1da8c5d..d4caede 100644 --- a/tests/auto/qcolumnview/tst_qcolumnview.cpp +++ b/tests/auto/qcolumnview/tst_qcolumnview.cpp @@ -398,9 +398,10 @@ void tst_QColumnView::scrollTo() QFETCH(bool, giveFocus); if (reverse) qApp->setLayoutDirection(Qt::RightToLeft); - ColumnView view; + QWidget topLevel; + ColumnView view(&topLevel); view.resize(200, 200); - view.show(); + topLevel.show(); view.scrollTo(QModelIndex(), QAbstractItemView::EnsureVisible); QCOMPARE(view.HorizontalOffset(), 0); @@ -428,6 +429,8 @@ void tst_QColumnView::scrollTo() view.setFocus(Qt::OtherFocusReason); else view.clearFocus(); + + qApp->processEvents(); QTRY_COMPARE(view.hasFocus(), giveFocus); // scroll to the right int level = 0; @@ -718,13 +721,14 @@ void tst_QColumnView::moveGrip() QFETCH(bool, reverse); if (reverse) qApp->setLayoutDirection(Qt::RightToLeft); - ColumnView view; + QWidget topLevel; + ColumnView view(&topLevel); TreeModel model; view.setModel(&model); QModelIndex home = model.thirdLevel(); view.setCurrentIndex(home); view.resize(640, 200); - view.show(); + topLevel.show(); QTest::qWait(ANIMATION_DELAY); int columnNum = view.createdColumns.count() - 2; @@ -741,9 +745,9 @@ void tst_QColumnView::moveGrip() QAbstractItemView *column = qobject_cast<QAbstractItemView *>(grip->parent()); int oldX = column->width(); - QCOMPARE(view.columnWidths()[columnNum], oldX); + QCOMPARE(view.columnWidths().value(columnNum), oldX); grip->moveGrip(10); - QCOMPARE(view.columnWidths()[columnNum], (oldX + (reverse ? -10 : 10))); + QCOMPARE(view.columnWidths().value(columnNum), (oldX + (reverse ? -10 : 10))); } void tst_QColumnView::doubleClick() @@ -889,12 +893,13 @@ void tst_QColumnView::rowDelegate() void tst_QColumnView::resize() { - ColumnView view; + QWidget topLevel; + ColumnView view(&topLevel); QDirModel model; view.setModel(&model); view.resize(200, 200); - view.show(); + topLevel.show(); QModelIndex home = model.index(QDir::homePath()).parent(); view.setCurrentIndex(home); QTest::qWait(ANIMATION_DELAY); diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp index 1fcea9e..9614e1e 100644 --- a/tests/auto/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/qcombobox/tst_qcombobox.cpp @@ -163,7 +163,7 @@ protected slots: private: QComboBox *testWidget; - QDialog *parent; + QWidget *parent; QPushButton* ok; int editTextCount; QString editText; @@ -395,7 +395,7 @@ tst_QComboBox::~tst_QComboBox() void tst_QComboBox::initTestCase() { // Create the test class - parent = new QDialog(0); + parent = new QWidget(0, Qt::Window); parent->setObjectName("parent"); parent->resize(400, 400); testWidget = new QComboBox(parent); @@ -1914,7 +1914,8 @@ void tst_QComboBox::itemListPosition() //we test QFontComboBox because it has the specific behaviour to set a fixed size //to the list view - QFontComboBox combo; + QWidget topLevel; + QFontComboBox combo(&topLevel); //the code to get the avaialbe screen space is copied from QComboBox code const int scrNumber = QApplication::desktop()->screenNumber(&combo); @@ -1932,7 +1933,7 @@ void tst_QComboBox::itemListPosition() combo.move(screen.width()-combo.sizeHint().width(), 0); //puts the combo to the top-right corner - combo.show(); + topLevel.show(); //wait because the window manager can move the window if there is a right panel QTRY_VERIFY(combo.isVisible()); combo.showPopup(); @@ -2254,9 +2255,10 @@ void tst_QComboBox::noScrollbar() qApp->setStyleSheet(stylesheet); { - QComboBox comboBox; + QWidget topLevel; + QComboBox comboBox(&topLevel); comboBox.addItems(initialContent); - comboBox.show(); + topLevel.show(); comboBox.resize(200, comboBox.height()); QTRY_VERIFY(comboBox.isVisible()); comboBox.showPopup(); diff --git a/tests/auto/qeventloop/tst_qeventloop.cpp b/tests/auto/qeventloop/tst_qeventloop.cpp index 8c2ffd9..8331a5f 100644 --- a/tests/auto/qeventloop/tst_qeventloop.cpp +++ b/tests/auto/qeventloop/tst_qeventloop.cpp @@ -431,7 +431,7 @@ void tst_QEventLoop::exec() QCOMPARE(executor.returnCode, -1); } -#if !defined(QT_NO_EXCEPTIONS) && !defined(Q_OS_WINCE_WM) && !defined(Q_OS_SYMBIAN) +#if !defined(QT_NO_EXCEPTIONS) && !defined(Q_OS_WINCE_WM) && !defined(Q_OS_SYMBIAN) && !defined(NO_EVENTLOOP_EXCEPTIONS) // Windows Mobile cannot handle cross library exceptions // qobject.cpp will try to rethrow the exception after handling // which causes gwes.exe to crash diff --git a/tests/auto/qfileinfo/tst_qfileinfo.cpp b/tests/auto/qfileinfo/tst_qfileinfo.cpp index 208110a..c9bf17a 100644 --- a/tests/auto/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/qfileinfo/tst_qfileinfo.cpp @@ -70,6 +70,10 @@ # define SRCDIR "" #endif +QT_BEGIN_NAMESPACE +extern Q_AUTOTEST_EXPORT bool qIsLikelyToBeNfs(int /* handle */); +QT_END_NAMESPACE + //TESTED_CLASS= //TESTED_FILES= @@ -939,6 +943,10 @@ void tst_QFileInfo::fileTimes() QEXPECT_FAIL("longfile absolutepath", "Maximum total filepath cannot exceed 256 characters in Symbian", Abort); #endif QVERIFY(file.open(QFile::WriteOnly | QFile::Text)); +#ifdef Q_OS_UNIX + if (qIsLikelyToBeNfs(file.handle())) + QSKIP("This Test doesn't work on NFS", SkipAll); +#endif QTextStream ts(&file); ts << fileName << endl; } diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 07fa630..5315cd1 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -51,6 +51,7 @@ #include "../../shared/util.h" #include <private/qgraphicseffect_p.h> +#include "../platformquirks.h" //TESTED_CLASS= //TESTED_FILES= @@ -710,7 +711,10 @@ void tst_QGraphicsEffect::prepareGeometryChangeInvalidateCache() scene.addItem(item); QGraphicsView view(&scene); - view.show(); + if(PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(item->nbPaint, 1); diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index a3bd0b0..0b29410 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -94,6 +94,8 @@ Q_DECLARE_METATYPE(QRectF) #define COMPARE_REGIONS QTRY_COMPARE #endif +#include "../platformquirks.h" + static QGraphicsRectItem staticItem; //QTBUG-7629, we should not crash at exit. static void sendMousePress(QGraphicsScene *scene, const QPointF &point, Qt::MouseButton button = Qt::LeftButton) @@ -272,7 +274,7 @@ class MyGraphicsView : public QGraphicsView public: int repaints; QRegion paintedRegion; - MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} + MyGraphicsView(QGraphicsScene *scene, QWidget *parent=0) : QGraphicsView(scene,parent), repaints(0) {} void paintEvent(QPaintEvent *e) { paintedRegion += e->region(); @@ -4070,9 +4072,10 @@ void tst_QGraphicsItem::cursor() item1->setCursor(Qt::IBeamCursor); item2->setCursor(Qt::PointingHandCursor); - QGraphicsView view(&scene); + QWidget topLevel; + QGraphicsView view(&scene,&topLevel); view.setFixedSize(200, 100); - view.show(); + topLevel.show(); QTest::mouseMove(&view, view.rect().center()); QTest::qWait(25); @@ -4094,6 +4097,8 @@ void tst_QGraphicsItem::cursor() QApplication::sendEvent(view.viewport(), &event); } + if (!PlatformQuirks::haveMouseCursor()) + return; #if !defined(Q_OS_WINCE) QTest::qWait(250); #else @@ -4959,7 +4964,10 @@ void tst_QGraphicsItem::paint() QGraphicsView view(&scene); - view.show(); + if(PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); QApplication::processEvents(); #ifdef Q_OS_WIN32 @@ -5975,9 +5983,10 @@ void tst_QGraphicsItem::untransformable() QGraphicsScene scene(-500, -500, 1000, 1000); scene.addItem(item1); - QGraphicsView view(&scene); + QWidget topLevel; + QGraphicsView view(&scene,&topLevel); view.resize(300, 300); - view.show(); + topLevel.show(); view.scale(8, 8); view.centerOn(0, 0); @@ -6616,7 +6625,10 @@ void tst_QGraphicsItem::opacity2() scene.addItem(parent); MyGraphicsView view(&scene); - view.show(); + if(PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); QTRY_VERIFY(view.repaints >= 1); @@ -7050,6 +7062,7 @@ void tst_QGraphicsItem::tabChangesFocus() widget.setLayout(layout); widget.show(); QTest::qWaitForWindowShown(&widget); + QTest::qWait(2000); QTRY_VERIFY(scene.isActive()); @@ -7495,9 +7508,11 @@ void tst_QGraphicsItem::update() { QGraphicsScene scene; scene.setSceneRect(-100, -100, 200, 200); - MyGraphicsView view(&scene); + QWidget topLevel; + MyGraphicsView view(&scene,&topLevel); - view.show(); + topLevel.resize(300, 300); + topLevel.show(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&view); #endif @@ -7776,10 +7791,11 @@ void tst_QGraphicsItem::itemUsesExtendedStyleOption() MyStyleOptionTester *rect = new MyStyleOptionTester(QRect(0, 0, 100, 100)); scene.addItem(rect); rect->setPos(200, 200); - QGraphicsView view(&scene); - view.setWindowFlags(Qt::X11BypassWindowManagerHint); + QWidget topLevel; + QGraphicsView view(&scene, &topLevel); + topLevel.setWindowFlags(Qt::X11BypassWindowManagerHint); rect->startTrack = false; - view.show(); + topLevel.show(); QTest::qWaitForWindowShown(&view); QTest::qWait(60); rect->startTrack = true; @@ -7980,6 +7996,9 @@ void tst_QGraphicsItem::sorting_data() void tst_QGraphicsItem::sorting() { + if (PlatformQuirks::isAutoMaximizing()) + QSKIP("Skipped because Platform is auto maximizing", SkipAll); + _paintedItems.clear(); QGraphicsScene scene; @@ -8015,7 +8034,7 @@ void tst_QGraphicsItem::sorting() _paintedItems.clear(); view.viewport()->repaint(); -#ifdef Q_WS_MAC +#if defined(Q_WS_MAC) // There's no difference between repaint and update on the Mac, // so we have to process events here to make sure we get the event. QTest::qWait(100); @@ -8114,10 +8133,13 @@ void tst_QGraphicsItem::hitTestGraphicsEffectItem() QGraphicsScene scene; scene.setSceneRect(-100, -100, 200, 200); - QGraphicsView view(&scene); - view.show(); + QWidget toplevel; + + QGraphicsView view(&scene, &toplevel); + toplevel.resize(300, 300); + toplevel.show(); #ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); + qt_x11_wait_for_window_manager(&toplevel); #endif QTest::qWait(100); @@ -10721,7 +10743,10 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent() scene.addItem(parent); MyGraphicsView view(&scene); - view.show(); + if(PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); QTRY_VERIFY(view.repaints > 0); @@ -10769,7 +10794,10 @@ void tst_QGraphicsItem::QT_2653_fullUpdateDiscardingOpacityUpdate() // ItemIgnoresTransformations, ItemClipsChildrenToShape, ItemIsSelectable parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations); - view.show(); + if (PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); view.reset(); @@ -10954,7 +10982,10 @@ void tst_QGraphicsItem::doNotMarkFullUpdateIfNotInScene() item3->setParentItem(item2); item2->setParentItem(item); scene.addItem(item); - view.show(); + if(PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(view.repaints, 1); QTRY_COMPARE(item->painted, 1); diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 09cf4e2..6a2f849 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -2694,12 +2694,14 @@ void tst_QGraphicsScene::render() QPixmap pix(30, 30); pix.fill(Qt::blue); - QGraphicsScene scene; + QGraphicsView view; + QGraphicsScene scene(&view); scene.addEllipse(QRectF(-10, -10, 20, 20), QPen(Qt::black), QBrush(Qt::white)); scene.addEllipse(QRectF(-2, -7, 4, 4), QPen(Qt::black), QBrush(Qt::yellow))->setZValue(1); QGraphicsPixmapItem *item = scene.addPixmap(pix); item->setZValue(2); item->setOffset(QPointF(3, 3)); + view.show(); scene.setSceneRect(scene.itemsBoundingRect()); @@ -2820,6 +2822,8 @@ void tst_QGraphicsScene::contextMenuEvent() QGraphicsView view(&scene); view.show(); + QTest::qWaitForWindowShown(&view); + view.activateWindow(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&view); #endif @@ -2851,12 +2855,14 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations() item->setFlag(QGraphicsItem::ItemIgnoresTransformations); scene.addItem(item); - QGraphicsView view(&scene); + QWidget topLevel; + QGraphicsView view(&scene, &topLevel); view.resize(200, 200); - view.show(); + topLevel.show(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&view); #endif + QTest::qWaitForWindowShown(&topLevel); { QPoint pos(50, 50); diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index af02c55..0a9633f 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -69,8 +69,10 @@ #include <QtGui/QStyle> #include <QtGui/QPushButton> #include <QtGui/QInputContext> +#include <QtGui/QDesktopWidget> #include <private/qgraphicsview_p.h> #include "../../shared/util.h" +#include "../platformquirks.h" //TESTED_CLASS= //TESTED_FILES= @@ -400,10 +402,13 @@ void tst_QGraphicsView::interactive() scene.addItem(item); QGraphicsView view(&scene); + if (PlatformQuirks::isAutoMaximizing()) + view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint); view.setFixedSize(300, 300); QCOMPARE(item->events.size(), 0); view.show(); QTest::qWaitForWindowShown(&view); + view.activateWindow(); QApplication::processEvents(); QTRY_COMPARE(item->events.size(), 1); // activate @@ -531,13 +536,15 @@ void tst_QGraphicsView::sceneRect() void tst_QGraphicsView::sceneRect_growing() { + QWidget toplevel; + QGraphicsScene scene; for (int i = 0; i < 100; ++i) scene.addText(QString("(0, %1)").arg((i - 50) * 20))->setPos(0, (i - 50) * 20); - QGraphicsView view(&scene); + QGraphicsView view(&scene, &toplevel); view.setFixedSize(200, 200); - view.show(); + toplevel.show(); int size = 200; scene.setSceneRect(-size, -size, size * 2, size * 2); @@ -854,15 +861,17 @@ void tst_QGraphicsView::dragMode_rubberBand() void tst_QGraphicsView::rubberBandSelectionMode() { + QWidget toplevel; + QGraphicsScene scene; QGraphicsRectItem *rect = scene.addRect(QRectF(10, 10, 80, 80)); rect->setFlag(QGraphicsItem::ItemIsSelectable); - QGraphicsView view(&scene); + QGraphicsView view(&scene, &toplevel); QCOMPARE(view.rubberBandSelectionMode(), Qt::IntersectsItemShape); view.setDragMode(QGraphicsView::RubberBandDrag); view.resize(120, 120); - view.show(); + toplevel.show(); // Disable mouse tracking to prevent the window system from sending mouse // move events to the viewport while we are synthesizing events. If @@ -1071,16 +1080,18 @@ void tst_QGraphicsView::matrix_combine() void tst_QGraphicsView::centerOnPoint() { + QWidget toplevel; + QGraphicsScene scene; scene.addEllipse(QRectF(-100, -100, 50, 50)); scene.addEllipse(QRectF(50, -100, 50, 50)); scene.addEllipse(QRectF(-100, 50, 50, 50)); scene.addEllipse(QRectF(50, 50, 50, 50)); - QGraphicsView view(&scene); + QGraphicsView view(&scene, &toplevel); view.setSceneRect(-400, -400, 800, 800); view.setFixedSize(100, 100); - view.show(); + toplevel.show(); int tolerance = 5; @@ -1155,6 +1166,8 @@ void tst_QGraphicsView::centerOnItem() void tst_QGraphicsView::ensureVisibleRect() { + QWidget toplevel; + QGraphicsScene scene; QGraphicsItem *items[4]; items[0] = scene.addEllipse(QRectF(-25, -25, 50, 50), QPen(Qt::black), QBrush(Qt::green)); @@ -1170,11 +1183,11 @@ void tst_QGraphicsView::ensureVisibleRect() QGraphicsItem *icon = scene.addEllipse(QRectF(-10, -10, 20, 20), QPen(Qt::black), QBrush(Qt::gray)); - QGraphicsView view(&scene); + QGraphicsView view(&scene, &toplevel); view.setSceneRect(-500, -500, 1000, 1000); view.setFixedSize(250, 250); - view.show(); - QTest::qWaitForWindowShown(&view); + toplevel.show(); + QTest::qWaitForWindowShown(&toplevel); for (int y = -100; y < 100; y += 25) { for (int x = -100; x < 100; x += 13) { @@ -1253,6 +1266,9 @@ void tst_QGraphicsView::fitInView() view.setFixedSize(400, 200); #endif + if (PlatformQuirks::isAutoMaximizing()) + view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint); + view.show(); view.fitInView(scene.itemsBoundingRect(), Qt::IgnoreAspectRatio); qApp->processEvents(); @@ -1432,10 +1448,12 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust() QGraphicsView view(&scene); view.setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing, !adjustForAntialiasing); view.setRenderHint(QPainter::Antialiasing, adjustForAntialiasing); + if (PlatformQuirks::isAutoMaximizing()) + view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint); view.setFrameStyle(0); view.resize(300, 300); view.show(); - QTest::qWaitForWindowShown(&view) ; + QTest::qWaitForWindowShown(&view); QTRY_VERIFY(rect->numPaints > 0); rect->numPaints = 0; @@ -1614,7 +1632,8 @@ void tst_QGraphicsView::mapToScene() QGraphicsScene scene; scene.addPixmap(QPixmap("3D-Qt-1-2.png")); - QGraphicsView view; + QWidget topLevel; + QGraphicsView view(&topLevel); view.setScene(&scene); view.setSceneRect(-500, -500, 1000, 1000); #if defined(Q_OS_WINCE) @@ -1624,7 +1643,7 @@ void tst_QGraphicsView::mapToScene() #endif view.setFixedSize(viewSize); - view.show(); + topLevel.show(); QApplication::processEvents(); QVERIFY(view.isVisible()); QCOMPARE(view.size(), viewSize); @@ -1804,11 +1823,14 @@ void tst_QGraphicsView::mapFromScenePoint() } } { + QWidget toplevel; + QGraphicsScene scene(0, 0, 200, 200); scene.addRect(QRectF(0, 0, 200, 200), QPen(Qt::black, 1)); - QGraphicsView view(&scene); + QGraphicsView view(&scene, &toplevel); + view.ensurePolished(); view.resize(view.sizeHint()); - view.show(); + toplevel.show(); QCOMPARE(view.mapFromScene(0, 0), QPoint(0, 0)); QCOMPARE(view.mapFromScene(0.4, 0.4), QPoint(0, 0)); @@ -1826,12 +1848,13 @@ void tst_QGraphicsView::mapFromScenePoint() void tst_QGraphicsView::mapFromSceneRect() { QGraphicsScene scene; - QGraphicsView view(&scene); + QWidget topLevel; + QGraphicsView view(&scene,&topLevel); view.rotate(90); view.setFixedSize(200, 200); view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - view.show(); + topLevel.show(); QTest::qWait(25); QPolygon polygon; @@ -2030,6 +2053,9 @@ void tst_QGraphicsView::cursor() #if defined(Q_OS_WINCE) QSKIP("Qt/CE does not have regular cursor support", SkipAll); #endif + if (PlatformQuirks::haveMouseCursor()) + QSKIP("The Platform does not have regular cursor support", SkipAll); + QGraphicsScene scene; QGraphicsItem *item = scene.addRect(QRectF(-10, -10, 20, 20)); item->setCursor(Qt::IBeamCursor); @@ -2057,6 +2083,9 @@ void tst_QGraphicsView::cursor2() #if defined(Q_OS_WINCE) QSKIP("Qt/CE does not have regular cursor support", SkipAll); #endif + if (PlatformQuirks::haveMouseCursor()) + QSKIP("The Platform does not have regular cursor support", SkipAll); + QGraphicsScene scene; QGraphicsItem *item = scene.addRect(QRectF(-10, -10, 20, 20)); item->setCursor(Qt::IBeamCursor); @@ -2209,6 +2238,8 @@ class CustomView : public QGraphicsView Q_OBJECT public: CustomView(QGraphicsScene *s = 0) : QGraphicsView(s) {} + CustomView(QGraphicsScene *s, QWidget *parent) + : QGraphicsView(s, parent) {} QList<QRegion> lastUpdateRegions; bool painted; @@ -2227,8 +2258,11 @@ void tst_QGraphicsView::viewportUpdateMode() scene.setBackgroundBrush(Qt::red); CustomView view; - view.setFixedSize(500, 500); + QDesktopWidget desktop; + view.setFixedSize(QSize(500, 500).boundedTo(desktop.availableGeometry().size())); // 500 is too big for all common smartphones view.setScene(&scene); + if(PlatformQuirks::isAutoMaximizing()) + view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint); QCOMPARE(view.viewportUpdateMode(), QGraphicsView::MinimalViewportUpdate); // Show the view, and initialize our test. @@ -2303,17 +2337,20 @@ void tst_QGraphicsView::viewportUpdateMode() void tst_QGraphicsView::viewportUpdateMode2() { + QWidget toplevel; + // Create a view with viewport rect equal to QRect(0, 0, 200, 200). QGraphicsScene dummyScene; - CustomView view; + CustomView view(0, &toplevel); view.painted = false; view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); view.setScene(&dummyScene); + view.ensurePolished(); // make sure we get the right content margins int left, top, right, bottom; view.getContentsMargins(&left, &top, &right, &bottom); view.resize(200 + left + right, 200 + top + bottom); - view.show(); - QTest::qWaitForWindowShown(&view); + toplevel.show(); + QTest::qWaitForWindowShown(&toplevel); QTest::qWait(50); QTRY_VERIFY(view.painted); const QRect viewportRect = view.viewport()->rect(); @@ -3222,15 +3259,17 @@ void tst_QGraphicsView::scrollAfterResize() #else QCommonStyle style; #endif - QGraphicsView view; + QWidget toplevel; + + QGraphicsView view(&toplevel); view.setStyle(&style); if (reverse) view.setLayoutDirection(Qt::RightToLeft); view.setSceneRect(-1000, -1000, 2000, 2000); view.resize(300, 300); - view.show(); - QTest::qWaitForWindowShown(&view); + toplevel.show(); + QTest::qWaitForWindowShown(&toplevel); view.horizontalScrollBar()->setValue(0); view.verticalScrollBar()->setValue(0); QCOMPARE(view.viewportTransform(), x1); @@ -3321,8 +3360,10 @@ void tst_QGraphicsView::moveItemWhileScrolling() void tst_QGraphicsView::centerOnDirtyItem() { - QGraphicsView view; - view.setWindowFlags(view.windowFlags() | Qt::WindowStaysOnTopHint); + QWidget toplevel; + + QGraphicsView view(&toplevel); + toplevel.setWindowFlags(view.windowFlags() | Qt::WindowStaysOnTopHint); view.resize(200, 200); QGraphicsScene *scene = new QGraphicsScene; @@ -3334,8 +3375,9 @@ void tst_QGraphicsView::centerOnDirtyItem() scene->addItem(item); view.centerOn(item); - view.show(); - QTest::qWaitForWindowShown(&view); + toplevel.show(); + QTest::qWaitForWindowShown(&toplevel); + QTest::qWait(50); QImage before(view.viewport()->size(), QImage::Format_ARGB32); view.viewport()->render(&before); @@ -3697,19 +3739,26 @@ void tst_QGraphicsView::update() { QFETCH(QRect, updateRect); + // some window manager resize the toplevel to max screen size + // so we must make our view a child (no layout!) of a dummy toplevel + // to ensure that it's really 200x200 pixels + QWidget toplevel; + // Create a view with viewport rect equal to QRect(0, 0, 200, 200). QGraphicsScene dummyScene; - CustomView view; + CustomView view(0, &toplevel); view.setScene(&dummyScene); + view.ensurePolished(); // must ensure polished to get content margins right int left, top, right, bottom; view.getContentsMargins(&left, &top, &right, &bottom); view.resize(200 + left + right, 200 + top + bottom); - view.show(); - QTest::qWaitForWindowShown(&view); + toplevel.show(); + QTest::qWaitForWindowShown(&toplevel); - QApplication::setActiveWindow(&view); + + QApplication::setActiveWindow(&toplevel); QApplication::processEvents(); - QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&toplevel)); const QRect viewportRect = view.viewport()->rect(); QCOMPARE(viewportRect, QRect(0, 0, 200, 200)); @@ -3718,6 +3767,7 @@ void tst_QGraphicsView::update() const bool intersects = updateRect.intersects(viewportRect); QGraphicsViewPrivate *viewPrivate = static_cast<QGraphicsViewPrivate *>(qt_widget_private(&view)); QTRY_COMPARE(viewPrivate->updateRect(updateRect), intersects); + QApplication::processEvents(); view.lastUpdateRegions.clear(); viewPrivate->processPendingUpdates(); @@ -3741,22 +3791,22 @@ void tst_QGraphicsView::update2_data() QTest::addColumn<bool>("changedConnected"); // Anti-aliased. - QTest::newRow("pen width: 0.0, antialiasing: true") << 0.0 << true << false; - QTest::newRow("pen width: 1.5, antialiasing: true") << 1.5 << true << false; - QTest::newRow("pen width: 2.0, antialiasing: true") << 2.0 << true << false; - QTest::newRow("pen width: 3.0, antialiasing: true") << 3.0 << true << false; + QTest::newRow("pen width: 0.0, antialiasing: true") << qreal(0.0) << true << false; + QTest::newRow("pen width: 1.5, antialiasing: true") << qreal(1.5) << true << false; + QTest::newRow("pen width: 2.0, antialiasing: true") << qreal(2.0) << true << false; + QTest::newRow("pen width: 3.0, antialiasing: true") << qreal(3.0) << true << false; // Aliased. - QTest::newRow("pen width: 0.0, antialiasing: false") << 0.0 << false << false; - QTest::newRow("pen width: 1.5, antialiasing: false") << 1.5 << false << false; - QTest::newRow("pen width: 2.0, antialiasing: false") << 2.0 << false << false; - QTest::newRow("pen width: 3.0, antialiasing: false") << 3.0 << false << false; + QTest::newRow("pen width: 0.0, antialiasing: false") << qreal(0.0) << false << false; + QTest::newRow("pen width: 1.5, antialiasing: false") << qreal(1.5) << false << false; + QTest::newRow("pen width: 2.0, antialiasing: false") << qreal(2.0) << false << false; + QTest::newRow("pen width: 3.0, antialiasing: false") << qreal(3.0) << false << false; // changed() connected - QTest::newRow("pen width: 0.0, antialiasing: false, changed") << 0.0 << false << true; - QTest::newRow("pen width: 1.5, antialiasing: true, changed") << 1.5 << true << true; - QTest::newRow("pen width: 2.0, antialiasing: false, changed") << 2.0 << false << true; - QTest::newRow("pen width: 3.0, antialiasing: true, changed") << 3.0 << true << true; + QTest::newRow("pen width: 0.0, antialiasing: false, changed") << qreal(0.0) << false << true; + QTest::newRow("pen width: 1.5, antialiasing: true, changed") << qreal(1.5) << true << true; + QTest::newRow("pen width: 2.0, antialiasing: false, changed") << qreal(2.0) << false << true; + QTest::newRow("pen width: 3.0, antialiasing: true, changed") << qreal(3.0) << true << true; } void tst_QGraphicsView::update2() @@ -4198,8 +4248,8 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins() class VpGraphicsView: public QGraphicsView { public: - VpGraphicsView(QGraphicsScene *scene) - : QGraphicsView(scene) + VpGraphicsView(QGraphicsScene *scene, QWidget *parent=0) + : QGraphicsView(scene, parent) { setViewportMargins(8, 16, 12, 20); setTransformationAnchor(QGraphicsView::AnchorUnderMouse); @@ -4210,6 +4260,7 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins() VpGraphicsView view(&scene); view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.show(); + QTest::qWaitForWindowShown(&view); QTest::qWait(50); QPoint mouseViewPos(20, 20); @@ -4324,6 +4375,9 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore() view.setFrameStyle(0); view.resize(75, 75); view.show(); + QTest::qWaitForWindowShown(&view); + view.activateWindow(); + QTRY_COMPARE(QApplication::activeWindow(), (QWidget *)&view); QCOMPARE(view.items(view.rect()).size(), numItems); @@ -4357,6 +4411,8 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect() scene.addItem(&item); QGraphicsView view(&scene); + if (PlatformQuirks::isAutoMaximizing()) + view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint); view.scale(4.15, 4.15); view.show(); QTest::qWaitForWindowShown(&view); diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index 9d6def8..2368d59 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -53,6 +53,7 @@ #include <qaction.h> #include <qwidgetaction.h> #include "../../shared/util.h" +#include "../platformquirks.h" class EventSpy : public QObject @@ -1111,6 +1112,10 @@ void tst_QGraphicsWidget::initStyleOption_data() // void initStyleOption(QStyleOption* option) const public void tst_QGraphicsWidget::initStyleOption() { +#ifdef Q_WS_MAEMO_5 + QSKIP("The test passes, but it doesn't work when the display is in energy saving mode", SkipAll); +#endif + QGraphicsScene scene; QGraphicsView view(&scene); view.show(); @@ -1773,6 +1778,9 @@ void tst_QGraphicsWidget::verifyFocusChain() void tst_QGraphicsWidget::updateFocusChainWhenChildDie() { +#ifdef Q_WS_MAEMO_5 + QSKIP("On Maemo 5 the Display Manager is shown on Window change, so the test won't work", SkipAll); +#endif QGraphicsScene scene; QGraphicsView view(&scene); view.show(); @@ -3144,7 +3152,10 @@ void tst_QGraphicsWidget::initialShow() MyGraphicsWidget *widget = new MyGraphicsWidget; QGraphicsView view(&scene); - view.show(); + if(PlatformQuirks::isAutoMaximizing()) + view.showFullScreen(); + else + view.show(); QTest::qWaitForWindowShown(&view); scene.addItem(widget); @@ -3186,7 +3197,7 @@ void tst_QGraphicsWidget::initialShow2() scene.addItem(widget); QGraphicsView view(&scene); - view.setWindowFlags(Qt::X11BypassWindowManagerHint); + view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint); view.show(); QTest::qWaitForWindowShown(&view); diff --git a/tests/auto/qgridlayout/tst_qgridlayout.cpp b/tests/auto/qgridlayout/tst_qgridlayout.cpp index e0924de..ed6d635 100644 --- a/tests/auto/qgridlayout/tst_qgridlayout.cpp +++ b/tests/auto/qgridlayout/tst_qgridlayout.cpp @@ -52,6 +52,7 @@ #include <QStyleFactory> #include "../../shared/util.h" +#include "../platformquirks.h" //TESTED_CLASS= //TESTED_FILES=gui/kernel/qlayout.cpp gui/kernel/qlayout.h @@ -678,6 +679,8 @@ void tst_QGridLayout::spacingsAndMargins() QApplication::setStyle(new Qt42Style); QWidget toplevel; + if(PlatformQuirks::isAutoMaximizing()) + toplevel.setWindowFlags(Qt::X11BypassWindowManagerHint); QVBoxLayout vbox(&toplevel); QGridLayout grid1; vbox.addLayout(&grid1); @@ -713,11 +716,12 @@ void tst_QGridLayout::spacingsAndMargins() toplevel.show(); toplevel.adjustSize(); QApplication::processEvents(); + QTest::qWaitForWindowShown(&toplevel); QSize topsize = toplevel.size(); QSize minimumsize = vbox.totalMinimumSize(); -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) if (topsize.width() < minimumsize.width() || topsize.height() < minimumsize.height()) QSKIP("The screen is too small to run this test case", SkipSingle); #endif @@ -1463,15 +1467,18 @@ void tst_QGridLayout::layoutSpacingImplementation() QFETCH(int, vSpacing); QFETCH(bool, customSubElementRect); + QWidget toplevel; + CustomLayoutStyle *style = new CustomLayoutStyle(); style->hspacing = hSpacing; style->vspacing = vSpacing; style->reimplementSubelementRect = customSubElementRect; QApplication::setStyle(style); + widget->setParent(&toplevel); widget->resize(widget->sizeHint()); - widget->show(); -#if defined(Q_WS_X11) - qt_x11_wait_for_window_manager(widget); // wait for the show + toplevel.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&toplevel); // wait for the show #endif QLayout *layout = widget->layout(); @@ -1482,8 +1489,6 @@ void tst_QGridLayout::layoutSpacingImplementation() //qDebug() << item->widget()->pos(); QCOMPARE(item->widget()->pos(), expectedpositions.at(pi)); } - delete widget; - } void tst_QGridLayout::spacing() diff --git a/tests/auto/qheaderview/tst_qheaderview.cpp b/tests/auto/qheaderview/tst_qheaderview.cpp index da0a0bb..5252ec6 100644 --- a/tests/auto/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/qheaderview/tst_qheaderview.cpp @@ -196,6 +196,7 @@ private slots: void QTBUG12268_hiddenMovedSectionSorting(); protected: + QWidget *topLevel; QHeaderView *view; QStandardItemModel *model; }; @@ -345,7 +346,8 @@ void tst_QHeaderView::cleanupTestCase() void tst_QHeaderView::init() { - view = new QHeaderView(Qt::Vertical); + topLevel = new QWidget(); + view = new QHeaderView(Qt::Vertical,topLevel); // Some initial value tests before a model is added QCOMPARE(view->length(), 0); QVERIFY(view->sizeHint() == QSize(0,0)); @@ -373,7 +375,8 @@ void tst_QHeaderView::init() QSignalSpy spy(view, SIGNAL(sectionCountChanged(int, int))); view->setModel(model); QCOMPARE(spy.count(), 1); - view->show(); + view->resize(200,200); + topLevel->show(); } void tst_QHeaderView::cleanup() @@ -508,7 +511,7 @@ void tst_QHeaderView::stretch() view->resize(viewSize); view->setStretchLastSection(true); QCOMPARE(view->stretchLastSection(), true); - view->show(); + topLevel->show(); QCOMPARE(view->width(), viewSize.width()); QCOMPARE(view->visualIndexAt(view->viewport()->height() - 5), 3); @@ -674,7 +677,7 @@ void tst_QHeaderView::visualIndexAt() QFETCH(QList<int>, visual); view->setStretchLastSection(true); - view->show(); + topLevel->show(); for (int i = 0; i < hidden.count(); ++i) view->setSectionHidden(hidden.at(i), true); @@ -682,6 +685,8 @@ void tst_QHeaderView::visualIndexAt() for (int j = 0; j < from.count(); ++j) view->moveSection(from.at(j), to.at(j)); + QTest::qWait(100); + for (int k = 0; k < coordinate.count(); ++k) QCOMPARE(view->visualIndexAt(coordinate.at(k)), visual.at(k)); } @@ -696,7 +701,7 @@ void tst_QHeaderView::length() view->setFont(font); #endif view->setStretchLastSection(true); - view->show(); + topLevel->show(); //minimumSectionSize should be the size of the last section of the widget is not tall enough int length = view->minimumSectionSize(); @@ -708,7 +713,7 @@ void tst_QHeaderView::length() QCOMPARE(length, view->length()); view->setStretchLastSection(false); - view->show(); + topLevel->show(); QVERIFY(length != view->length()); @@ -759,7 +764,7 @@ void tst_QHeaderView::logicalIndexAt() QCOMPARE(view->logicalIndexAt(0), 0); QCOMPARE(view->logicalIndexAt(1), 0); - view->show(); + topLevel->show(); view->setStretchLastSection(true); // First item QCOMPARE(view->logicalIndexAt(0), 0); @@ -1062,7 +1067,7 @@ void tst_QHeaderView::resizeWithResizeModes() view->resizeSection(i, sections.at(i)); view->setResizeMode(i, (QHeaderView::ResizeMode)modes.at(i)); } - view->show(); + topLevel->show(); view->resize(size, size); for (int j = 0; j < expected.count(); ++j) QCOMPARE(view->sectionSize(j), expected.at(j)); @@ -1160,7 +1165,7 @@ void tst_QHeaderView::resizeSection() view->resize(400, 400); - view->show(); + topLevel->show(); view->setMovable(true); view->setStretchLastSection(false); @@ -2035,14 +2040,14 @@ void tst_QHeaderView::QTBUG7833_sectionClicked() QTest::mouseClick(tv.horizontalHeader()->viewport(), Qt::LeftButton, Qt::NoModifier, - QPoint(tv.horizontalHeader()->sectionViewportPosition(11) + 5, 5)); + QPoint(tv.horizontalHeader()->sectionViewportPosition(11) + tv.horizontalHeader()->sectionSize(11)/2, 5)); QCOMPARE(clickedSpy.count(), 1); QCOMPARE(pressedSpy.count(), 1); QCOMPARE(clickedSpy.at(0).at(0).toInt(), 11); QCOMPARE(pressedSpy.at(0).at(0).toInt(), 11); QTest::mouseClick(tv.horizontalHeader()->viewport(), Qt::LeftButton, Qt::NoModifier, - QPoint(tv.horizontalHeader()->sectionViewportPosition(8) + 5, 5)); + QPoint(tv.horizontalHeader()->sectionViewportPosition(8) + tv.horizontalHeader()->sectionSize(0)/2, 5)); QCOMPARE(clickedSpy.count(), 2); QCOMPARE(pressedSpy.count(), 2); @@ -2050,7 +2055,7 @@ void tst_QHeaderView::QTBUG7833_sectionClicked() QCOMPARE(pressedSpy.at(1).at(0).toInt(), 8); QTest::mouseClick(tv.horizontalHeader()->viewport(), Qt::LeftButton, Qt::NoModifier, - QPoint(tv.horizontalHeader()->sectionViewportPosition(0) + 5, 5)); + QPoint(tv.horizontalHeader()->sectionViewportPosition(0) + tv.horizontalHeader()->sectionSize(0)/2, 5)); QCOMPARE(clickedSpy.count(), 3); QCOMPARE(pressedSpy.count(), 3); diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp index 4b4bdd6..d213e8e 100644 --- a/tests/auto/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/qimagereader/tst_qimagereader.cpp @@ -55,6 +55,8 @@ #include <QTcpServer> #include <QTimer> +#include "../platformquirks.h" + #if defined(Q_OS_SYMBIAN) # define SRCDIR "." #endif @@ -315,23 +317,27 @@ void tst_QImageReader::jpegRgbCmyk() QImage image1(prefix + QLatin1String("YCbCr_cmyk.jpg")); QImage image2(prefix + QLatin1String("YCbCr_cmyk.png")); - // first, do some obvious tests - QCOMPARE(image1.height(), image2.height()); - QCOMPARE(image1.width(), image2.width()); - QCOMPARE(image1.format(), image2.format()); - QCOMPARE(image1.format(), QImage::Format_RGB32); - - // compare all the pixels with a slack of 3. This ignores rounding errors in libjpeg/libpng - for (int h = 0; h < image1.height(); ++h) { - const uchar *s1 = image1.constScanLine(h); - const uchar *s2 = image2.constScanLine(h); - for (int w = 0; w < image1.width() * 4; ++w) { - if (*s1 != *s2) { - QVERIFY2(qAbs(*s1 - *s2) <= 3, qPrintable(QString("images differ in line %1, col %2 (image1: %3, image2: %4)").arg(h).arg(w).arg(*s1, 0, 16).arg(*s2, 0, 16))); + if (PlatformQuirks::isImageLoaderImprecise()) { + // first, do some obvious tests + QCOMPARE(image1.height(), image2.height()); + QCOMPARE(image1.width(), image2.width()); + QCOMPARE(image1.format(), image2.format()); + QCOMPARE(image1.format(), QImage::Format_RGB32); + + // compare all the pixels with a slack of 3. This ignores rounding errors in libjpeg/libpng + for (int h = 0; h < image1.height(); ++h) { + const uchar *s1 = image1.constScanLine(h); + const uchar *s2 = image2.constScanLine(h); + for (int w = 0; w < image1.width() * 4; ++w) { + if (*s1 != *s2) { + QVERIFY2(qAbs(*s1 - *s2) <= 3, qPrintable(QString("images differ in line %1, col %2 (image1: %3, image2: %4)").arg(h).arg(w).arg(*s1, 0, 16).arg(*s2, 0, 16))); + } + s1++; + s2++; } - s1++; - s2++; } + } else { + QCOMPARE(image1, image2); } } diff --git a/tests/auto/qinputdialog/tst_qinputdialog.cpp b/tests/auto/qinputdialog/tst_qinputdialog.cpp index 5d03142..580c644 100644 --- a/tests/auto/qinputdialog/tst_qinputdialog.cpp +++ b/tests/auto/qinputdialog/tst_qinputdialog.cpp @@ -147,9 +147,10 @@ void testInvalidateAndRestore( QVERIFY(sbox->hasAcceptableInput()); QVERIFY(okButton->isEnabled()); QCOMPARE(sbox->value(), lastValidValue); + QLocale loc; QCOMPARE( normalizeNumericString(ledit->text()), - normalizeNumericString(QString("%1").arg(sbox->value()))); + normalizeNumericString(loc.toString(sbox->value()))); } template <typename SpinBoxType, typename ValueType> @@ -169,9 +170,10 @@ void testGetNumeric(QInputDialog *dialog, SpinBoxType * = 0, ValueType * = 0) QVERIFY(sbox->value() >= sbox->minimum()); QVERIFY(sbox->value() <= sbox->maximum()); QVERIFY(sbox->hasAcceptableInput()); + QLocale loc; QCOMPARE( normalizeNumericString(ledit->selectedText()), - normalizeNumericString(QString("%1").arg(sbox->value()))); + normalizeNumericString(loc.toString(sbox->value()))); QVERIFY(okButton->isEnabled()); const ValueType origValue = sbox->value(); @@ -185,7 +187,7 @@ void testGetNumeric(QInputDialog *dialog, SpinBoxType * = 0, ValueType * = 0) testTypingValue<SpinBoxType>(sbox, okButton, "0.0"); testTypingValue<SpinBoxType>(sbox, okButton, "foobar"); - testTypingValue<SpinBoxType>(sbox, okButton, QString("%1").arg(origValue)); + testTypingValue<SpinBoxType>(sbox, okButton, loc.toString(origValue)); } void testGetText(QInputDialog *dialog) diff --git a/tests/auto/qlayout/tst_qlayout.cpp b/tests/auto/qlayout/tst_qlayout.cpp index c6fe3f0..a974a42 100644 --- a/tests/auto/qlayout/tst_qlayout.cpp +++ b/tests/auto/qlayout/tst_qlayout.cpp @@ -133,12 +133,13 @@ void tst_QLayout::geometry() // For QWindowsStyle we know that QWidgetItem::geometry() and QWidget::geometry() // should be the same. QApplication::setStyle(new QWindowsStyle); - QWidget w; + QWidget topLevel; + QWidget w(&topLevel); QVBoxLayout layout(&w); SizeHinterFrame widget(QSize(100,100)); layout.addWidget(&widget); QLayoutItem *item = layout.itemAt(0); - w.show(); + topLevel.show(); QApplication::processEvents(); QCOMPARE(item->geometry().size(), QSize(100,100)); diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp index 425ac89..523a3ab 100644 --- a/tests/auto/qlistview/tst_qlistview.cpp +++ b/tests/auto/qlistview/tst_qlistview.cpp @@ -334,7 +334,8 @@ void tst_QListView::cursorMove() int columns = 6; QStandardItemModel model(rows, columns); - QListView view; + QWidget topLevel; + QListView view(&topLevel); view.setModel(&model); for (int j = 0; j < columns; ++j) { @@ -358,7 +359,7 @@ void tst_QListView::cursorMove() view.setGridSize(cellsize); view.setViewMode(QListView::IconMode); view.doItemsLayout(); - view.show(); + topLevel.show(); QVector<Qt::Key> keymoves; keymoves << Qt::Key_Up << Qt::Key_Up << Qt::Key_Right << Qt::Key_Right << Qt::Key_Up @@ -1108,7 +1109,8 @@ void tst_QListView::selection() QFETCH(QRect, selectionRect); QFETCH(IntList, expectedItems); - PublicListView v; + QWidget topLevel; + PublicListView v(&topLevel); QtTestModel model; model.colCount = 1; model.rCount = itemCount; @@ -1142,7 +1144,7 @@ void tst_QListView::selection() v.resize(525,525); #endif - v.show(); + topLevel.show(); QTest::qWaitForWindowShown(&v); QApplication::processEvents(); @@ -1158,7 +1160,8 @@ void tst_QListView::selection() void tst_QListView::scrollTo() { - QListView lv; + QWidget topLevel; + QListView lv(&topLevel); QStringListModel model(&lv); QStringList list; list << "Short item 1"; @@ -1194,8 +1197,8 @@ void tst_QListView::scrollTo() model.setStringList(list); lv.setModel(&model); lv.setFixedSize(100, 200); - lv.show(); - QTest::qWaitForWindowShown(&lv); + topLevel.show(); + QTest::qWaitForWindowShown(&topLevel); //by default, the list view scrolls per item and has no wrapping QModelIndex index = model.index(6,0); @@ -1266,7 +1269,8 @@ void tst_QListView::scrollBarRanges() const int rowCount = 10; const int rowHeight = 20; - QListView lv; + QWidget topLevel; + QListView lv(&topLevel); QStringListModel model(&lv); QStringList list; for (int i = 0; i < rowCount; ++i) @@ -1278,7 +1282,7 @@ void tst_QListView::scrollBarRanges() TestDelegate *delegate = new TestDelegate(&lv); delegate->m_sizeHint = QSize(100, rowHeight); lv.setItemDelegate(delegate); - lv.show(); + topLevel.show(); for (int h = 30; h <= 210; ++h) { lv.resize(250, h); @@ -1354,14 +1358,15 @@ void tst_QListView::scrollBarAsNeeded() const int rowCounts[3] = {0, 1, 20}; - QListView lv; + QWidget topLevel; + QListView lv(&topLevel); lv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); lv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); lv.setFlow((QListView::Flow)flow); QStringListModel model(&lv); lv.setModel(&model); lv.resize(size); - lv.show(); + topLevel.show(); for (uint r = 0; r < sizeof(rowCounts)/sizeof(int); ++r) { QStringList list; @@ -1631,6 +1636,7 @@ void tst_QListView::task254449_draggingItemToNegativeCoordinates() list.setViewMode(QListView::IconMode); list.show(); QTest::qWaitForWindowShown(&list); + list.activateWindow(); class MyItemDelegate : public QStyledItemDelegate { @@ -1815,7 +1821,8 @@ void tst_QListView::taskQTBUG_2233_scrollHiddenItems() QFETCH(int, flow); const int rowCount = 200; - QListView view; + QWidget topLevel; + QListView view(&topLevel); QStringListModel model(&view); QStringList list; for (int i = 0; i < rowCount; ++i) @@ -1839,8 +1846,8 @@ void tst_QListView::taskQTBUG_2233_scrollHiddenItems() } //QTBUG-7929 should not crash - view.show(); - QTest::qWaitForWindowShown(&view); + topLevel.show(); + QTest::qWaitForWindowShown(&topLevel); QScrollBar *bar = view.flow() == QListView::TopToBottom ? view.verticalScrollBar() : view.horizontalScrollBar(); diff --git a/tests/auto/qlistwidget/tst_qlistwidget.cpp b/tests/auto/qlistwidget/tst_qlistwidget.cpp index eb3fb6b..6cfd6c5 100644 --- a/tests/auto/qlistwidget/tst_qlistwidget.cpp +++ b/tests/auto/qlistwidget/tst_qlistwidget.cpp @@ -1499,6 +1499,11 @@ void tst_QListWidget::itemWidget() class MyListWidget : public QListWidget { public: + MyListWidget(QWidget *parent=0) + : QListWidget(parent) + { + } + void paintEvent(QPaintEvent *e) { painted += e->region(); QListWidget::paintEvent(e); @@ -1513,14 +1518,17 @@ void tst_QListWidget::fastScroll() QSKIP("S60 style doesn't support fast scrolling", SkipAll); } - MyListWidget widget; + QWidget topLevel; + MyListWidget widget(&topLevel); for (int i = 0; i < 50; ++i) widget.addItem(QString("Item %1").arg(i)); - widget.show(); + topLevel.resize(300, 300); // toplevel needs to be wide enough for the item + topLevel.show(); // Make sure the widget gets the first full repaint. On // some WMs, we'll get two (first inactive exposure, then // active exposure. + QTest::qWaitForWindowShown(&widget); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&widget); #endif @@ -1531,6 +1539,7 @@ void tst_QListWidget::fastScroll() QVERIFY(!itemSize.isEmpty()); QScrollBar *sbar = widget.verticalScrollBar(); + widget.setVerticalScrollMode(QAbstractItemView::ScrollPerItem); widget.painted = QRegion(); sbar->setValue(sbar->value() + sbar->singleStep()); QApplication::processEvents(); diff --git a/tests/auto/qmainwindow/tst_qmainwindow.cpp b/tests/auto/qmainwindow/tst_qmainwindow.cpp index c82c566..e3122c4 100644 --- a/tests/auto/qmainwindow/tst_qmainwindow.cpp +++ b/tests/auto/qmainwindow/tst_qmainwindow.cpp @@ -55,6 +55,7 @@ #include <qtextedit.h> #include <private/qmainwindowlayout_p.h> #include <private/qdockarealayout_p.h> +#include "../platformquirks.h" //TESTED_FILES= @@ -1679,6 +1680,9 @@ void tst_QMainWindow::addToolbarAfterShow() void tst_QMainWindow::centralWidgetSize() { + if(PlatformQuirks::isAutoMaximizing()) + QSKIP("The platform is auto maximizing, so the test makes no sense", SkipAll);; + QMainWindow mainWindow; mainWindow.menuBar()->addMenu("menu"); diff --git a/tests/auto/qmdiarea/tst_qmdiarea.cpp b/tests/auto/qmdiarea/tst_qmdiarea.cpp index f865738..6483f75 100644 --- a/tests/auto/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/qmdiarea/tst_qmdiarea.cpp @@ -63,6 +63,7 @@ #include <QMacStyle> #include "../../shared/util.h" +#include "../platformquirks.h" static const Qt::WindowFlags DefaultWindowFlags = Qt::SubWindow | Qt::WindowSystemMenuHint @@ -468,6 +469,8 @@ void tst_QMdiArea::subWindowActivated2() #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&mdiArea); #endif + QTest::qWaitForWindowShown(&mdiArea); + mdiArea.activateWindow(); QTest::qWait(100); QTRY_COMPARE(spy.count(), 5); @@ -510,6 +513,9 @@ void tst_QMdiArea::subWindowActivated2() QCOMPARE(mdiArea.activeSubWindow(), activeSubWindow); spy.clear(); + if (PlatformQuirks::isAutoMaximizing()) + QSKIP("Platform is auto maximizing, so no showMinimized()", SkipAll); + // Check that we only emit _one_ signal and the active window // is unchanged after showMinimized/showNormal. mdiArea.showMinimized(); @@ -1119,9 +1125,10 @@ void tst_QMdiArea::currentSubWindow() void tst_QMdiArea::addAndRemoveWindows() { - QMdiArea workspace; + QWidget topLevel; + QMdiArea workspace(&topLevel); workspace.resize(800, 600); - workspace.show(); + topLevel.show(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&workspace); #endif @@ -1594,6 +1601,8 @@ void tst_QMdiArea::tileSubWindows() { QMdiArea workspace; workspace.resize(600,480); + if (PlatformQuirks::isAutoMaximizing()) + workspace.setWindowFlags(workspace.windowFlags() | Qt::X11BypassWindowManagerHint); workspace.show(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&workspace); @@ -1848,8 +1857,9 @@ void tst_QMdiArea::resizeMaximizedChildWindows() QFETCH(int, increment); QFETCH(int, windowCount); - QMdiArea workspace; - workspace.show(); + QWidget topLevel; + QMdiArea workspace(&topLevel); + topLevel.show(); #if defined(Q_WS_X11) qt_x11_wait_for_window_manager(&workspace); #endif @@ -2094,6 +2104,7 @@ void tst_QMdiArea::resizeTimer() #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&mdiArea); #endif + QTest::qWaitForWindowShown(&mdiArea); #ifndef Q_OS_WINCE int time = 250; diff --git a/tests/auto/qmenu/tst_qmenu.cpp b/tests/auto/qmenu/tst_qmenu.cpp index 7065b13..84f1b94 100644 --- a/tests/auto/qmenu/tst_qmenu.cpp +++ b/tests/auto/qmenu/tst_qmenu.cpp @@ -298,15 +298,17 @@ void tst_QMenu::mouseActivation() #ifdef Q_OS_WINCE_WM QSKIP("We have a separate mouseActivation test for Windows mobile.", SkipAll); #endif - QMenu menu; + QWidget topLevel; + QMenu menu(&topLevel); + topLevel.show(); menu.addAction("Menu Action"); menu.show(); - QTest::mouseClick(&menu, Qt::LeftButton, 0, QPoint(5, 5), 300); + QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.rect().center(), 300); QVERIFY(!menu.isVisible()); //context menus can allways be accessed with right click except on windows menu.show(); - QTest::mouseClick(&menu, Qt::RightButton, 0, QPoint(5, 5), 300); + QTest::mouseClick(&menu, Qt::RightButton, 0, menu.rect().center(), 300); QVERIFY(!menu.isVisible()); #ifdef Q_OS_WIN @@ -466,9 +468,9 @@ void tst_QMenu::overrideMenuAction() m->addAction(aQuit); w.show(); + QTest::qWaitForWindowShown(&w); QApplication::setActiveWindow(&w); w.setFocus(); - QTest::qWaitForWindowShown(&w); QTRY_VERIFY(w.hasFocus()); //test of the action inside the menu @@ -504,6 +506,7 @@ void tst_QMenu::statusTip() w.addToolBar(&tb); w.show(); + QTest::qWaitForWindowShown(&w); QRect rect1 = tb.actionGeometry(&a); QToolButton *btn = qobject_cast<QToolButton*>(tb.childAt(rect1.center())); @@ -589,6 +592,8 @@ void tst_QMenu::tearOff() QVERIFY(menu->isTearOffEnabled()); widget.show(); + QTest::qWaitForWindowShown(&widget); + widget.activateWindow(); menu->popup(QPoint(0,0)); QTest::qWait(50); QVERIFY(!menu->isTearOffMenuVisible()); diff --git a/tests/auto/qmenubar/tst_qmenubar.cpp b/tests/auto/qmenubar/tst_qmenubar.cpp index cc9fb0c..8dfb976 100644 --- a/tests/auto/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/qmenubar/tst_qmenubar.cpp @@ -338,6 +338,8 @@ void tst_QMenuBar::initTestCase_noQt3() initSimpleMenubar_noQt3(); mw->show(); + QTest::qWaitForWindowShown(mw); + mw->activateWindow(); menu1 = new QtTestSlot( mw ); menu2 = new QtTestSlot( mw ); @@ -1700,8 +1702,8 @@ void tst_QMenuBar::taskQTBUG11823_crashwithInvisibleActions() QAction * a = menubar.addAction( "&a" ); menubar.show(); - QApplication::setActiveWindow(&menubar); QTest::qWaitForWindowShown(&menubar); + QApplication::setActiveWindow(&menubar); menubar.setActiveAction(m); QCOMPARE(menubar.activeAction(), m); QTest::keyClick(0, Qt::Key_Right); diff --git a/tests/auto/qmouseevent_modal/tst_qmouseevent_modal.cpp b/tests/auto/qmouseevent_modal/tst_qmouseevent_modal.cpp index 99a8913..694d65d 100644 --- a/tests/auto/qmouseevent_modal/tst_qmouseevent_modal.cpp +++ b/tests/auto/qmouseevent_modal/tst_qmouseevent_modal.cpp @@ -147,12 +147,14 @@ void tst_qmouseevent_modal::mousePressRelease() QVERIFY( w->d->count() == 0 ); QTest::mousePress( w->pb, Qt::LeftButton ); + QTest::qWait(200); QVERIFY( !w->d->isVisible() ); QVERIFY( w->d->count() == 1 ); QVERIFY( !w->pb->isDown() ); QTest::mousePress( w->pb, Qt::LeftButton ); + QTest::qWait(200); QVERIFY( !w->d->isVisible() ); QVERIFY( w->d->count() == 2 ); @@ -161,12 +163,14 @@ void tst_qmouseevent_modal::mousePressRelease() // With the current QWS mouse handling, the 3rd press would fail... QTest::mousePress( w->pb, Qt::LeftButton ); + QTest::qWait(200); QVERIFY( !w->d->isVisible() ); QVERIFY( w->d->count() == 3 ); QVERIFY( !w->pb->isDown() ); QTest::mousePress( w->pb, Qt::LeftButton ); + QTest::qWait(200); QVERIFY( !w->d->isVisible() ); QVERIFY( w->d->count() == 4 ); diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 8850e6e..a986438 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -297,6 +297,10 @@ private Q_SLOTS: void qtbug4121unknownAuthentication(); + void qtbug13431replyThrottling(); + + void httpWithNoCredentialUsage(); + // NOTE: This test must be last! void parentingRepliesToTheApp(); }; @@ -3457,11 +3461,11 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp_data() { QTest::addColumn<bool>("https"); QTest::addColumn<int>("bufferSize"); - QTest::newRow("http, no limit") << false << 0; - QTest::newRow("http, limited") << false << 4096; + QTest::newRow("http+unlimited") << false << 0; + QTest::newRow("http+limited") << false << 4096; #ifndef QT_NO_OPENSSL - QTest::newRow("https, no limit") << true << 0; - QTest::newRow("https, limited") << true << 4096; + QTest::newRow("https+unlimited") << true << 0; + QTest::newRow("https+limited") << true << 4096; #endif } @@ -3534,6 +3538,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp() const int allowedDeviation = 16; // TODO find out why the send rate is 13% faster currently const int minRate = rate * 1024 * (100-allowedDeviation) / 100; const int maxRate = rate * 1024 * (100+allowedDeviation) / 100; + qDebug() << minRate << "<="<< server.transferRate << "<=" << maxRate << "?"; QVERIFY(server.transferRate >= minRate); QVERIFY(server.transferRate <= maxRate); } @@ -4642,6 +4647,83 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication() QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); } +class QtBug13431Helper : public QObject { + Q_OBJECT +public: + QNetworkReply* m_reply; + QTimer m_dlTimer; +public slots: + void replyFinished(QNetworkReply*) { + QTestEventLoop::instance().exitLoop(); + } + + void onReadAndReschedule() { + const qint64 bytesReceived = m_reply->bytesAvailable(); + if (bytesReceived) { + QByteArray data = m_reply->read(bytesReceived); + // reschedule read + const int millisecDelay = static_cast<int>(bytesReceived * 1000 / m_reply->readBufferSize()); + m_dlTimer.start(millisecDelay); + } + else { + // reschedule read + m_dlTimer.start(200); + } + } +}; + +void tst_QNetworkReply::qtbug13431replyThrottling() +{ + QtBug13431Helper helper; + + QNetworkAccessManager nam; + connect(&nam, SIGNAL(finished(QNetworkReply*)), &helper, SLOT(replyFinished(QNetworkReply*))); + + // Download a bigger file + QNetworkRequest netRequest(QUrl("http://qt-test-server/qtest/bigfile")); + helper.m_reply = nam.get(netRequest); + // Set the throttle + helper.m_reply->setReadBufferSize(36000); + + // Schedule a timer that tries to read + + connect(&helper.m_dlTimer, SIGNAL(timeout()), &helper, SLOT(onReadAndReschedule())); + helper.m_dlTimer.setSingleShot(true); + helper.m_dlTimer.start(0); + + QTestEventLoop::instance().enterLoop(30); + QVERIFY(!QTestEventLoop::instance().timeout()); + QVERIFY(helper.m_reply->isFinished()); + QCOMPARE(helper.m_reply->error(), QNetworkReply::NoError); +} + +void tst_QNetworkReply::httpWithNoCredentialUsage() +{ + QNetworkRequest request(QUrl("http://httptest:httptest@" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi")); + // Do not use credentials + request.setAttribute(QNetworkRequest::AuthenticationReuseAttribute, QNetworkRequest::Manual); + QNetworkAccessManager manager; + QNetworkReplyPtr reply = manager.get(request); + + qRegisterMetaType<QNetworkReply*>("QNetworkReply*"); + qRegisterMetaType<QAuthenticator*>("QAuthenticator*"); + QSignalSpy authSpy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*))); + QSignalSpy finishedSpy(&manager, SIGNAL(finished(QNetworkReply*))); + qRegisterMetaType<QNetworkReply::NetworkError>("QNetworkReply::NetworkError"); + QSignalSpy errorSpy(reply, SIGNAL(error(QNetworkReply::NetworkError))); + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + // We check if authenticationRequired was emitted, however we do not anything in it so it should be 401 + QCOMPARE(authSpy.count(), 1); + QCOMPARE(finishedSpy.count(), 1); + QCOMPARE(errorSpy.count(), 1); + + QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); +} + // NOTE: This test must be last testcase in tst_qnetworkreply! diff --git a/tests/auto/qpathclipper/tst_qpathclipper.cpp b/tests/auto/qpathclipper/tst_qpathclipper.cpp index 4dc12cb..98c67d0 100644 --- a/tests/auto/qpathclipper/tst_qpathclipper.cpp +++ b/tests/auto/qpathclipper/tst_qpathclipper.cpp @@ -1300,6 +1300,9 @@ void tst_QPathClipper::task251909() void tst_QPathClipper::qtbug3778() { + if (sizeof(double) != sizeof(qreal)) { + QSKIP("This test only works for qreal=double, otherwise ends in rounding errors", SkipAll); + } QPainterPath path1; path1.moveTo(200, 3.22409e-5); // e-5 and higher leads to a bug diff --git a/tests/auto/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/qplaintextedit/tst_qplaintextedit.cpp index a6dd8be..99d11cc 100644 --- a/tests/auto/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/qplaintextedit/tst_qplaintextedit.cpp @@ -880,6 +880,7 @@ void tst_QPlainTextEdit::lineWrapModes() // We thus need to make it wide enough to show something visible. int minimumWidth = 2 * ed->document()->documentMargin(); minimumWidth += ed->fontMetrics().width(QLatin1Char('a')); + minimumWidth += ed->frameWidth(); ed->resize(minimumWidth, 1000); QCOMPARE(lineCount(), 26); ed->setParent(0); diff --git a/tests/auto/qprinter/tst_qprinter.cpp b/tests/auto/qprinter/tst_qprinter.cpp index e908961..fb9f8f0 100644 --- a/tests/auto/qprinter/tst_qprinter.cpp +++ b/tests/auto/qprinter/tst_qprinter.cpp @@ -596,12 +596,12 @@ void tst_QPrinter::testPageMargins_data() QTest::addColumn<qreal>("bottom"); QTest::addColumn<int>("unit"); - QTest::newRow("data0") << 5.5 << 6.5 << 7.5 << 8.5 << static_cast<int>(QPrinter::Millimeter); - QTest::newRow("data1") << 5.5 << 6.5 << 7.5 << 8.5 << static_cast<int>(QPrinter::Point); - QTest::newRow("data2") << 5.5 << 6.5 << 7.5 << 8.5 << static_cast<int>(QPrinter::Inch); - QTest::newRow("data3") << 5.5 << 6.5 << 7.5 << 8.5 << static_cast<int>(QPrinter::Pica); - QTest::newRow("data4") << 5.5 << 6.5 << 7.5 << 8.5 << static_cast<int>(QPrinter::Didot); - QTest::newRow("data5") << 5.5 << 6.5 << 7.5 << 8.5 << static_cast<int>(QPrinter::Cicero); + QTest::newRow("data0") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Millimeter); + QTest::newRow("data1") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Point); + QTest::newRow("data2") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Inch); + QTest::newRow("data3") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Pica); + QTest::newRow("data4") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Didot); + QTest::newRow("data5") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Cicero); } void tst_QPrinter::testPageMargins() diff --git a/tests/auto/qsplitter/tst_qsplitter.cpp b/tests/auto/qsplitter/tst_qsplitter.cpp index e7b5dc7..7cb2b65 100644 --- a/tests/auto/qsplitter/tst_qsplitter.cpp +++ b/tests/auto/qsplitter/tst_qsplitter.cpp @@ -1230,7 +1230,8 @@ void tst_QSplitter::testShowHide() QSplitter *split = new QSplitter(Qt::Horizontal); - QWidget widget; + QWidget topLevel; + QWidget widget(&topLevel); widget.resize(400 + split->handleWidth(), 200); QVBoxLayout *lay=new QVBoxLayout(&widget); lay->setMargin(0); @@ -1240,7 +1241,7 @@ void tst_QSplitter::testShowHide() split->setSizes(QList<int>() << 200 << 200); lay->addWidget(split); widget.setLayout(lay); - widget.show(); + topLevel.show(); QTest::qWait(100); @@ -1378,8 +1379,9 @@ class MyTextEdit : public QTextEdit void tst_QSplitter::task169702_sizes() { + QWidget topLevel; // Create two nested (non-collapsible) splitters - QSplitter* outerSplitter = new QSplitter(Qt::Vertical); + QSplitter* outerSplitter = new QSplitter(Qt::Vertical, &topLevel); outerSplitter->setChildrenCollapsible(false); QSplitter* splitter = new QSplitter(Qt::Horizontal, outerSplitter); splitter->setChildrenCollapsible(false); @@ -1396,12 +1398,12 @@ void tst_QSplitter::task169702_sizes() splitter->addWidget(new QTextEdit("Bar")); outerSplitter->setGeometry(100, 100, 500, 500); - outerSplitter->show(); + topLevel.show(); QTest::qWait(100); testW->m_iFactor++; testW->updateGeometry(); - QTest::qWait(100); + QTest::qWait(500);//100 is too fast for Maemo //Make sure the minimimSizeHint is respected QCOMPARE(testW->size().height(), testW->minimumSizeHint().height()); diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp index 9df2a4d..16cf872 100644 --- a/tests/auto/qstring/tst_qstring.cpp +++ b/tests/auto/qstring/tst_qstring.cpp @@ -4433,8 +4433,10 @@ void tst_QString::nanAndInf() CHECK_NAN("nan ", true, true) CHECK_NAN("\t NAN", true, true) CHECK_NAN("\t NAN ", true, true) +#ifndef QT_QLOCALE_USES_FCVT //In case we use glibc this tests will fail CHECK_NAN("-nan", false, false) CHECK_NAN("+NAN", false, false) +#endif CHECK_NAN("NaN", true, true) CHECK_NAN("nAn", true, true) CHECK_NAN("NANe-10", false, false) diff --git a/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp index 04b1e79..0396408 100644 --- a/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -48,6 +48,7 @@ #endif #include <private/qstylesheetstyle_p.h> +#include "../platformquirks.h" //TESTED_CLASS= //TESTED_FILES= @@ -822,6 +823,8 @@ void tst_QStyleSheetStyle::focusColors() void tst_QStyleSheetStyle::hoverColors() { + if (!PlatformQuirks::haveMouseCursor()) + QSKIP("No mouse Cursor on this platform",SkipAll); QList<QWidget *> widgets; widgets << new QPushButton("TESTING"); widgets << new QLineEdit("TESTING"); @@ -979,10 +982,11 @@ void tst_QStyleSheetStyle::background() void tst_QStyleSheetStyle::tabAlignement() { - QTabWidget tabWidget; + QWidget topLevel; + QTabWidget tabWidget(&topLevel); tabWidget.addTab(new QLabel("tab1"),"tab1"); tabWidget.resize(QSize(400,400)); - tabWidget.show(); + topLevel.show(); QTest::qWaitForWindowShown(&tabWidget); QTest::qWait(50); QTabBar *bar = qFindChild<QTabBar*>(&tabWidget); diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp index 3e5d077..6c920c9 100644 --- a/tests/auto/qtableview/tst_qtableview.cpp +++ b/tests/auto/qtableview/tst_qtableview.cpp @@ -2591,9 +2591,10 @@ void tst_QTableView::scrollTo() QFETCH(int, expectedVerticalScroll); QtTestTableModel model(rowCount, columnCount); - QtTestTableView view; + QWidget toplevel; + QtTestTableView view(&toplevel); - view.show(); + toplevel.show(); // resizing to this size will ensure that there can ONLY_BE_ONE_CELL inside the view. QSize forcedSize(columnWidth * 2, rowHeight * 2); view.resize(forcedSize); @@ -2748,10 +2749,11 @@ void tst_QTableView::indexAt() QFETCH(int, expectedColumn); QtTestTableModel model(rowCount, columnCount); - QtTestTableView view; + QWidget toplevel; + QtTestTableView view(&toplevel); - view.show(); - QTest::qWaitForWindowShown(&view); + toplevel.show(); + QTest::qWaitForWindowShown(&toplevel); //some styles change the scroll mode in their polish view.setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); @@ -3657,20 +3659,23 @@ void tst_QTableView::mouseWheel() #ifdef Q_OS_WINCE QSKIP("Since different Windows CE versions sport different taskbars, we skip this test", SkipAll); #endif + QFETCH(int, scrollMode); QFETCH(int, delta); QFETCH(int, horizontalPositon); QFETCH(int, verticalPosition); QtTestTableModel model(100, 100); - QtTestTableView view; + QWidget topLevel; + QtTestTableView view(&topLevel); view.resize(500, 500); for (int r = 0; r < 100; ++r) view.setRowHeight(r, 50); for (int c = 0; c < 100; ++c) view.setColumnWidth(c, 100); - view.show(); - QTest::qWaitForWindowShown(&view); + topLevel.show(); + + QTest::qWaitForWindowShown(&topLevel); view.setModel(&model); @@ -3772,7 +3777,7 @@ void tst_QTableView::task191545_dragSelectRows() QRect cellRect = table.visualRect(model.index(3, 0)); QHeaderView *vHeader = table.verticalHeader(); QWidget *vHeaderVp = vHeader->viewport(); - QPoint rowPos(5, (cellRect.top() + cellRect.bottom()) / 2); + QPoint rowPos(cellRect.center()); QMouseEvent rowPressEvent(QEvent::MouseButtonPress, rowPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier); qApp->sendEvent(vHeaderVp, &rowPressEvent); @@ -3851,6 +3856,7 @@ void tst_QTableView::task191545_dragSelectRows() QMouseEvent cellReleaseEvent(QEvent::MouseButtonRelease, cellPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier); qApp->sendEvent(tableVp, &cellReleaseEvent); + QTest::qWait(200); for (int i = 0; i < 6; ++i) for (int j = 0; j < 6; ++j) { QModelIndex index = model.index(3 + i, 3 + j, table.rootIndex()); diff --git a/tests/auto/qtextedit/tst_qtextedit.cpp b/tests/auto/qtextedit/tst_qtextedit.cpp index 101baa5..321aa22 100644 --- a/tests/auto/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/qtextedit/tst_qtextedit.cpp @@ -58,6 +58,7 @@ #include <qimagereader.h> #include <qimagewriter.h> #include <qcommonstyle.h> +#include <qlayout.h> #include <qabstracttextdocumentlayout.h> #include <qtextdocumentfragment.h> @@ -2111,6 +2112,7 @@ void tst_QTextEdit::setDocumentPreservesPalette() QPalette whitePal = ed->palette(); whitePal.setColor(QPalette::Active, QPalette::Text, "white"); + QVERIFY(whitePal != ed->palette()); ed->setPalette(whitePal); QVERIFY(whitePal.color(QPalette::Active, QPalette::Text) @@ -2155,6 +2157,9 @@ void tst_QTextEdit::pasteFromQt3RichText() void tst_QTextEdit::noWrapBackgrounds() { + QWidget topLevel; + QVBoxLayout *layout = new QVBoxLayout(&topLevel); + QTextEdit edit; edit.setLineWrapMode(QTextEdit::NoWrap); @@ -2170,6 +2175,11 @@ void tst_QTextEdit::noWrapBackgrounds() edit.insertPlainText(QLatin1String(" \n \n \n \n")); edit.setFixedSize(100, 200); + layout->addWidget(&edit); + topLevel.show(); + + QTest::qWait(1000); + QImage img = QPixmap::grabWidget(edit.viewport()).toImage(); QCOMPARE(img, img.mirrored(true, false)); } diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp index c7b53e9..3c2bf15 100644 --- a/tests/auto/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/qtreeview/tst_qtreeview.cpp @@ -2379,11 +2379,12 @@ void tst_QTreeView::extendedSelection() QFETCH(int, selectedCount); QStandardItemModel model(5, 2); - QTreeView view; + QWidget topLevel; + QTreeView view(&topLevel); view.resize(qMax(mousePressPos.x() * 2, 200), qMax(mousePressPos.y() * 2, 200)); view.setModel(&model); view.setSelectionMode(QAbstractItemView::ExtendedSelection); - view.show(); + topLevel.show(); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, mousePressPos); QCOMPARE(view.selectionModel()->selectedIndexes().count(), selectedCount); } @@ -3280,9 +3281,10 @@ void tst_QTreeView::task220298_selectColumns() void tst_QTreeView::task224091_appendColumns() { QStandardItemModel *model = new QStandardItemModel(); - QTreeView *treeView = new QTreeView(); + QWidget* topLevel= new QWidget; + QTreeView *treeView = new QTreeView(topLevel); treeView->setModel(model); - treeView->show(); + topLevel->show(); treeView->resize(50,50); QTest::qWaitForWindowShown(treeView); @@ -3299,7 +3301,7 @@ void tst_QTreeView::task224091_appendColumns() QTRY_VERIFY(treeView->verticalScrollBar()->isVisible()); - delete treeView; + delete topLevel; delete model; } @@ -3758,7 +3760,8 @@ void tst_QTreeView::taskQTBUG_9216_setSizeAndUniformRowHeightsWrongRepaint() void tst_QTreeView::keyboardNavigationWithDisabled() { - QTreeView view; + QWidget topLevel; + QTreeView view(&topLevel); QStandardItemModel model(90, 0); for (int i = 0; i < 90; i ++) { model.setItem(i, new QStandardItem(QString::number(i))); @@ -3767,10 +3770,10 @@ void tst_QTreeView::keyboardNavigationWithDisabled() view.setModel(&model); view.resize(200, view.visualRect(model.index(0,0)).height()*10); - view.show(); - QApplication::setActiveWindow(&view); - QTest::qWaitForWindowShown(&view); - QTRY_VERIFY(view.isActiveWindow()); + topLevel.show(); + QApplication::setActiveWindow(&topLevel); + QTest::qWaitForWindowShown(&topLevel); + QTRY_VERIFY(topLevel.isActiveWindow()); view.setCurrentIndex(model.index(1, 0)); QTest::keyClick(view.viewport(), Qt::Key_Up); diff --git a/tests/auto/qtreewidget/tst_qtreewidget.cpp b/tests/auto/qtreewidget/tst_qtreewidget.cpp index 1e37384..32bf557 100644 --- a/tests/auto/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/qtreewidget/tst_qtreewidget.cpp @@ -464,6 +464,7 @@ void tst_QTreeWidget::editItem() QTreeWidget tree; populate(&tree, topLevelItems, new TreeItem(QStringList() << "1" << "2")); tree.show(); + QTest::qWaitForWindowShown(&tree); QSignalSpy itemChangedSpy( &tree, SIGNAL(itemChanged(QTreeWidgetItem*,int))); @@ -3098,8 +3099,9 @@ void tst_QTreeWidget::task253109_itemHeight() void tst_QTreeWidget::task206367_duplication() { - QTreeWidget treeWidget; - treeWidget.show(); + QWidget topLevel; + QTreeWidget treeWidget(&topLevel); + topLevel.show(); treeWidget.resize(200, 200); treeWidget.setSortingEnabled(true); diff --git a/tests/auto/qwaitcondition/tst_qwaitcondition.cpp b/tests/auto/qwaitcondition/tst_qwaitcondition.cpp index 5391591..ffc4730 100644 --- a/tests/auto/qwaitcondition/tst_qwaitcondition.cpp +++ b/tests/auto/qwaitcondition/tst_qwaitcondition.cpp @@ -76,7 +76,7 @@ private slots: static const int iterations = 10; // Note: some tests rely on ThreadCount being multiple of 2 -#ifdef Q_OS_SOLARIS +#if defined(Q_OS_SOLARIS) || ( defined(Q_OS_LINUX) && defined(QT_ARCH_ARMV6) ) static const int ThreadCount = 4; #else static const int ThreadCount = 10; diff --git a/tests/auto/qxmlquery/tst_qxmlquery.cpp b/tests/auto/qxmlquery/tst_qxmlquery.cpp index 2187aeb..e6c40b8 100644 --- a/tests/auto/qxmlquery/tst_qxmlquery.cpp +++ b/tests/auto/qxmlquery/tst_qxmlquery.cpp @@ -1197,9 +1197,15 @@ void tst_QXmlQuery::basicXQueryToQtTypeCheck() const expectedValues.append(QVariant()); /* xs:dayTimeDuration */ expectedValues.append(QVariant()); /* xs:yearMonthDuration */ - expectedValues.append(QVariant(double(3e3))); /* xs:float */ - expectedValues.append(QVariant(double(4e4))); /* xs:double */ - expectedValues.append(QVariant(double(2))); /* xs:decimal */ + if(sizeof(qreal) == sizeof(float)) {//ARM casts to Float not to double + expectedValues.append(QVariant(float(3e3))); /* xs:float */ + expectedValues.append(QVariant(float(4e4))); /* xs:double */ + expectedValues.append(QVariant(float(2))); /* xs:decimal */ + } else { + expectedValues.append(QVariant(double(3e3))); /* xs:float */ + expectedValues.append(QVariant(double(4e4))); /* xs:double */ + expectedValues.append(QVariant(double(2))); /* xs:decimal */ + } /* xs:integer and its sub-types. */ expectedValues.append(QVariant(qlonglong(16))); @@ -1347,10 +1353,17 @@ void tst_QXmlQuery::basicQtToXQueryTypeCheck() const QVERIFY(!item.isNull()); QVERIFY(item.isAtomicValue()); - QCOMPARE(item.toAtomicValue().toString(), - QLatin1String("4 true 3 654 7 41414141 C 2000-10-11Z 2001-09-10T01:02:03 " - "A QString http://example.com/ 5 6 true true true true true true true true true true " - "true true true")); + if(sizeof(qreal) == sizeof(float)) //ARM casts to Float not to double + QCOMPARE(item.toAtomicValue().toString(), + QLatin1String("4 true 3 654 7 41414141 C 2000-10-11Z 2001-09-10T01:02:03 " + "A QString http://example.com/ 5 6 true false false true true true true true true true " + "true true true")); + else + QCOMPARE(item.toAtomicValue().toString(), + QLatin1String("4 true 3 654 7 41414141 C 2000-10-11Z 2001-09-10T01:02:03 " + "A QString http://example.com/ 5 6 true true true true true true true true true true " + "true true true")); + } void tst_QXmlQuery::bindNode() const diff --git a/tests/auto/symbols/tst_symbols.cpp b/tests/auto/symbols/tst_symbols.cpp index 28970eb..1572a5f 100644 --- a/tests/auto/symbols/tst_symbols.cpp +++ b/tests/auto/symbols/tst_symbols.cpp @@ -443,7 +443,7 @@ void tst_Symbols::prefix() # if defined(Q_OS_LINUX) && defined(Q_CC_INTEL) QEXPECT_FAIL("", "linux-icc* incorrectly exports some QtWebkit symbols, waiting for a fix from Intel.", Continue); # endif - QVERIFY2(!isFailed, "Libraries contain non-prefixed symbols. See Debug output :)"); + QVERIFY2(!isFailed, "Libraries contain non-prefixed symbols. See Debug output above."); #else QSKIP("Linux-specific test", SkipAll); #endif diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index f5ba461..61c8d6c 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -76,10 +76,6 @@ Reason: <translation>Ошибка создания файла коллекции справки '%1': %2.</translation> </message> <message> - <source>Error reading collection file '%1': %2</source> - <translation>Ошибка чтения файла коллекции справки '%1': %2</translation> - </message> - <message> <source>Cannot load sqlite database driver!</source> <translation>Не удалось загрузить драйвер баз данных sqlite!</translation> </message> @@ -112,6 +108,17 @@ Reason: </message> </context> <context> + <name>BookmarkItem</name> + <message> + <source>New Folder</source> + <translation>Новая папка</translation> + </message> + <message> + <source>Untitled</source> + <translation>Безымянная</translation> + </message> +</context> +<context> <name>BookmarkManager</name> <message> <source>Remove</source> @@ -131,7 +138,7 @@ Reason: </message> <message> <source>Untitled</source> - <translation>Неозаглавлено</translation> + <translation>Безымянная</translation> </message> <message> <source>Manage Bookmarks...</source> @@ -329,6 +336,64 @@ Reason: <translation>Файл коллекции справки '%1' не существует.</translation> </message> <message> + <source>Usage: assistant [Options] + +-collectionFile file Uses the specified collection + file instead of the default one +-showUrl url Shows the document with the + url. +-enableRemoteControl Enables Assistant to be + remotely controlled. +-show widget Shows the specified dockwidget + which can be "contents", "index", + "bookmarks" or "search". +-activate widget Activates the specified dockwidget + which can be "contents", "index", + "bookmarks" or "search". +-hide widget Hides the specified dockwidget + which can be "contents", "index" + "bookmarks" or "search". +-register helpFile Registers the specified help file + (.qch) in the given collection + file. +-unregister helpFile Unregisters the specified help file + (.qch) from the give collection + file. +-setCurrentFilter filter Set the filter as the active filter. +-remove-search-index Removes the full text search index. +-rebuild-search-index Re-builds the full text search index (potentially slow). +-quiet Does not display any error or + status message. +-help Displays this help. +</source> + <translation>Использование: assistant [ОПЦИИ] + +-collectionFile файл Использовать указанный файл коллекции, + вместо стандартного +-showUrl ссылка Отобразить документ по ссылке. +-enableRemoteControl Включение удалённого управления Assistant. +-show виджет Отображение указанного прикрепляемого виджета, + который может быть "contents", "index", + "bookmarks" или "search". +-activate виджет Включение указанного прикрепляемого виджета, + который может быть "contents", "index", + "bookmarks" или "search". +-hide виджет Скрытие указанного прикрепляемого виджета, + который может быть "contents", "index", + "bookmarks" или "search". +-register файлСправки Регистрация указанного файла справки (.qch) + в данном файле коллекции. +-unregister файлСправки Отмена регистрации указанного файла + справки (.qch) в данном файле коллекции. +-setCurrentFilter фильтр Активация указанного фильтра. +-remove-search-index Удаление индекса полнотекстового поиска. +-rebuild-search-index Пересоздание индекса полнотекстового поиска + (потенциально медленно). +-quiet Не отображать сообщения об ошибках и состояниях. +-help Показать эту справку. +</translation> + </message> + <message> <source>Missing collection file.</source> <translation>Отсутствует файл коллекции справки.</translation> </message> @@ -377,6 +442,56 @@ Reason: </message> </context> <context> + <name>ConversionWizard</name> + <message> + <source>Help Conversion Wizard</source> + <translation>Мастер преобразования справки</translation> + </message> + <message> + <source>Converting %1...</source> + <translation>Преобразование %1...</translation> + </message> + <message> + <source>Writing help collection file...</source> + <translation>Запись файла коллекции справки...</translation> + </message> + <message> + <source>Done.</source> + <translation>Готово.</translation> + </message> +</context> +<context> + <name>FilesPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>Files:</source> + <translation>Файлы:</translation> + </message> + <message> + <source>Remove</source> + <translation>Удалить</translation> + </message> + <message> + <source>Remove All</source> + <translation>Удалить всё</translation> + </message> + <message> + <source>Unreferenced Files</source> + <translation>Невостребованные файлы</translation> + </message> + <message> + <source>Remove files which are neither referenced by a keyword nor by the TOC.</source> + <translation>Удаление файлов, на которые нет ссылок ни по ключевым словам, ни в содержании.</translation> + </message> + <message> + <source><p><b>Warning:</b> When removing images or stylesheets, be aware that those files are not directly referenced by the .adp or .dcf file.</p></source> + <translation><p><b>Внимание:</b> при удалении изображений или таблиц стилей следует убедиться, что на эти файлы напрямую не ссылается файл .adp или .dcf.</p></translation> + </message> +</context> +<context> <name>FilterNameDialogClass</name> <message> <source>Add Filter Name</source> @@ -388,6 +503,66 @@ Reason: </message> </context> <context> + <name>FilterPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>Filter attributes for current documentation (comma separated list):</source> + <translation>Атрибуты фильтра для текущей документации (список, разделённый запятыми):</translation> + </message> + <message> + <source>Custom Filters</source> + <translation>Пользовательские фильтры</translation> + </message> + <message> + <source>1</source> + <translation></translation> + </message> + <message> + <source>2</source> + <translation></translation> + </message> + <message> + <source>Add</source> + <translation>Добавить</translation> + </message> + <message> + <source>Remove</source> + <translation>Удалить</translation> + </message> + <message> + <source>Filter Settings</source> + <translation>Настройки фильтра</translation> + </message> + <message> + <source>Specify the filter attributes for the documentation. If filter attributes are used, also define a custom filter for it. Both the filter attributes and the custom filters are optional.</source> + <translation>Укажите атрибуты фильтра для документации. Если атрибуты фильтра используются, также укажите пользовательский фильтр для них. Атрибуты и пользовательский фильтр необязательны.</translation> + </message> + <message> + <source>Filter Name</source> + <translation>Название фильтра</translation> + </message> + <message> + <source>Filter Attributes</source> + <translation>Атрибуты фильтра</translation> + </message> + <message> + <source>The custom filter '%1' is defined multiple times.</source> + <translation>Пользовательский фильтр "%1" определён несколько раз.</translation> + </message> + <message> + <source>The attributes for custom filter '%1' are defined multiple times.</source> + <translation>Атрибуты для пользовательского фильтра "%1" определены несколько раз.</translation> + </message> + <message> + <source>unfiltered</source> + <comment>list of available documentation</comment> + <translation>вся документация</translation> + </message> +</context> +<context> <name>FindWidget</name> <message> <source>Previous</source> @@ -407,6 +582,17 @@ Reason: </message> </context> <context> + <name>FinishPage</name> + <message> + <source>Converting File</source> + <translation>Преобразование файла</translation> + </message> + <message> + <source>Creating the new Qt help files from the old ADP file.</source> + <translation>Создание файлов справки Qt из старых файлов ADP.</translation> + </message> +</context> +<context> <name>FontPanel</name> <message> <source>Font</source> @@ -430,6 +616,59 @@ Reason: </message> </context> <context> + <name>GeneralPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>Namespace:</source> + <translation>Пространство имён:</translation> + </message> + <message> + <source>Virtual Folder:</source> + <translation>Виртуальный каталог:</translation> + </message> + <message> + <source>General Settings</source> + <translation>Основные настройки</translation> + </message> + <message> + <source>Specify the namespace and the virtual folder for the documentation.</source> + <translation>Укажите пространство имён и виртуальный каталог для документации.</translation> + </message> + <message> + <source>Namespace Error</source> + <translation>Ошибка пространства имён</translation> + </message> + <message> + <source>The namespace contains some invalid characters.</source> + <translation>Пространство имён содержит недопустимые символы.</translation> + </message> + <message> + <source>Virtual Folder Error</source> + <translation>Ошибка виртуального каталога</translation> + </message> + <message> + <source>The virtual folder contains some invalid characters.</source> + <translation>Виртуальный каталог содержит недопустимые символы.</translation> + </message> +</context> +<context> + <name>HelpEngineWrapper</name> + <message> + <source>Unfiltered</source> + <translation>Вся документация</translation> + </message> +</context> +<context> + <name>HelpGenerator</name> + <message> + <source>Warning: %1</source> + <translation>Предупреждение: %1</translation> + </message> +</context> +<context> <name>HelpViewer</name> <message> <source><title>about:blank</title></source> @@ -453,6 +692,40 @@ Reason: </message> </context> <context> + <name>HelpWindow</name> + <message> + <source><center><b>Wizard Assistant</b></center></source> + <translation><center><b>Помощь по мастеру преобразования справки</b></center></translation> + </message> +</context> +<context> + <name>IdentifierPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>Create identifiers</source> + <translation>Создавать идентификаторы</translation> + </message> + <message> + <source>Global prefix:</source> + <translation>Глобальный префикс:</translation> + </message> + <message> + <source>Inherit prefix from file names</source> + <translation>Наследовать префикс из имён файлов</translation> + </message> + <message> + <source>Identifiers</source> + <translation>Идентификаторы</translation> + </message> + <message> + <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source> + <translation>Данная страница позволяет создавать идентификаторы из ключевых слов найденных в файле .adp или .dcf.</translation> + </message> +</context> +<context> <name>IndexWindow</name> <message> <source>&Look for:</source> @@ -468,6 +741,53 @@ Reason: </message> </context> <context> + <name>InputPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>File name:</source> + <translation>Имя файла:</translation> + </message> + <message> + <source>...</source> + <translation></translation> + </message> + <message> + <source>Input File</source> + <translation>Исходный файл</translation> + </message> + <message> + <source>Specify the .adp or .dcf file you want to convert to the new Qt help project format and/or collection format.</source> + <translation>Укажите файл .adp или .dcf, который необходимо преобразовать в формат нового проекта справки Qt или коллекции.</translation> + </message> + <message> + <source>Open file</source> + <translation>Открыть файл</translation> + </message> + <message> + <source>Qt Help Files (*.adp *.dcf)</source> + <translation>Файлы справки Qt (*.adp *.dcf)</translation> + </message> + <message> + <source>File Open Error</source> + <translation>Ошибка открытия файла</translation> + </message> + <message> + <source>The specified file could not be opened!</source> + <translation>Не удалось открыть указанный файл!</translation> + </message> + <message> + <source>File Parsing Error</source> + <translation>Ошибка обработки файла</translation> + </message> + <message> + <source>Parsing error in line %1!</source> + <translation>Возникла ошибка обработки на строке %1!</translation> + </message> +</context> +<context> <name>InstallDialog</name> <message> <source>Install Documentation</source> @@ -715,6 +1035,10 @@ Reason: <translation>&Закладки</translation> </message> <message> + <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p></source> + <translation><center><h3>%1</h3><p>Версия %2</p></center><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p></translation> + </message> + <message> <source>Could not register file '%1': %2</source> <translation>Не удалось зарегистрировать файл '%1': %2</translation> </message> @@ -776,7 +1100,93 @@ Reason: </message> <message> <source>Updating search index</source> - <translation>Обновление поискового индекса</translation> + <translation>Обновление индекса полнотекстового поиска</translation> + </message> +</context> +<context> + <name>OutputPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>Project file name:</source> + <translation>Имя файла проекта:</translation> + </message> + <message> + <source>Collection file name:</source> + <translation>Имя файла коллекции:</translation> + </message> + <message> + <source>Output File Names</source> + <translation>Имена выходных файлов</translation> + </message> + <message> + <source>Specify the file names for the output files.</source> + <translation>Укажите имена выходных файлов.</translation> + </message> + <message> + <source>Convert...</source> + <translation>Преобразовать...</translation> + </message> + <message> + <source>Qt Help Project File</source> + <translation>Файл проекта справки Qt</translation> + </message> + <message> + <source>Qt Help Collection Project File</source> + <translation>Файл проекта коллекции справки Qt</translation> + </message> + <message> + <source>The specified file %1 already exist. + +Do you want to remove it?</source> + <translation>Файл %1 уже существует. + +Желаете удалить его?</translation> + </message> + <message> + <source>Remove</source> + <translation>Удалить</translation> + </message> + <message> + <source>Cancel</source> + <translation>Отмена</translation> + </message> +</context> +<context> + <name>PathPage</name> + <message> + <source>Form</source> + <translation>Форма</translation> + </message> + <message> + <source>File filters:</source> + <translation>Фильтры файлов:</translation> + </message> + <message> + <source>Documentation source file paths:</source> + <translation>Пути к исходным файлам документации:</translation> + </message> + <message> + <source>Add</source> + <translation>Добавить</translation> + </message> + <message> + <source>Remove</source> + <translation>Удалить</translation> + </message> + <message> + <source>Source File Paths</source> + <translation>Пути к исходным файлам</translation> + </message> + <message> + <source>Specify the paths where the sources files are located. By default, all files in those directories matched by the file filter will be included.</source> + <translation>Укажите пути, где расположены исходные файлы. По умолчанию, будут включены все файлы в каталогах, соответствующие фильтру файлов.</translation> + </message> + <message> + <source>Source File Path</source> + <translation>Путь к исходному файлу</translation> </message> </context> <context> @@ -914,6 +1324,165 @@ Reason: </message> </context> <context> + <name>QCollectionGenerator</name> + <message> + <source>Unknown token at line %1.</source> + <translation>Неизвестный токен в строке %1.</translation> + </message> + <message> + <source>Unknown token at line %1. Expected "QtHelpCollectionProject".</source> + <translation>Неизвестный токен в строке %1. Ожидался "QtHelpCollectionProject".</translation> + </message> + <message> + <source>Missing end tags.</source> + <translation>Отсутствуют завершающие теги.</translation> + </message> + <message> + <source>Missing input or output file for help file generation.</source> + <translation>Отсутствует входной или выходной файл для создания файла справки.</translation> + </message> + <message> + <source>Missing output file name.</source> + <translation>Отсутствует имя выходного файла.</translation> + </message> + <message> + <source>Qt Collection Generator version 1.0 (Qt %1) +</source> + <translation>Генератор коллекций Qt версии 1.0 (Qt %1) +</translation> + </message> + <message> + <source>Missing collection config file.</source> + <translation>Отсутствует файл настроек коллекции.</translation> + </message> + <message> + <source> +Usage: + +qcollectiongenerator <collection-config-file> [options] + + -o <collection-file> Generates a collection file + called <collection-file>. If + this option is not specified + a default name will be used. + -v Displays the version of + qcollectiongenerator. + +</source> + <translation> +Использование: + +qcollectiongenerator <файл-конфигурации-коллекции> [ОПЦИИ] + + -o <файл-коллекции> Создание файла коллекции с именем + <файл-коллекции>. Если эта опция не указана, + будет использовано имя по умолчанию. + -v Показать версию qcollectiongenerator. + +</translation> + </message> + <message> + <source>Could not open %1. +</source> + <translation>Не удалось открыть %1.</translation> + </message> + <message> + <source>Reading collection config file... +</source> + <translation>Чтение файла конфигурации коллекции... +</translation> + </message> + <message> + <source>Collection config file error: %1 +</source> + <translation>Ошибка файла конфигурации коллекции: %1 +</translation> + </message> + <message> + <source>Generating help for %1... +</source> + <translation>Создание справки для %1...</translation> + </message> + <message> + <source>Creating collection file... +</source> + <translation>Создание файла коллекции...</translation> + </message> + <message> + <source>The file %1 cannot be overwritten. +</source> + <translation>Файл %1 не может быть перезаписан.</translation> + </message> + <message> + <source>Cannot open %1. +</source> + <translation>Не удалось открыть %1.</translation> + </message> + <message> + <source>Cannot open referenced image file %1. +</source> + <translation>Не удалось открыть необходимый файл изображения %1. +</translation> + </message> +</context> +<context> + <name>QHelpGenerator</name> + <message> + <source>Missing output file name.</source> + <translation>Отсутствует имя выходного файла.</translation> + </message> + <message> + <source>Qt Help Generator version 1.0 (Qt %1) +</source> + <translation>Генератор справки Qt, версия 1.0 (Qt %1) +</translation> + </message> + <message> + <source>Missing Qt help project file.</source> + <translation>Отсутствует файл проекта справки Qt.</translation> + </message> + <message> + <source> +Usage: + +qhelpgenerator <help-project-file> [options] + + -o <compressed-file> Generates a Qt compressed help + file called <compressed-file>. + If this option is not specified + a default name will be used. + -c Checks whether all links in HTML files + point to files in this help project. + -v Displays the version of + qhelpgenerator. + +</source> + <translation> +Использование: + +qhelpgenerator <файл-проекта-справки> [ОПЦИИ] + + -o <сжатый-файл> Создание сжатого файла справки Qt под именем + <сжатый-файл>. Если эта опция не указана, + будет использоваться имя по умолчанию. + -c Проверка на то, чтобы все ссылки в файлах + HTML указывали на файлы в этом проекте. + -v Отображение версии qhelpgenerator. + +</translation> + </message> + <message> + <source>Could not open %1. +</source> + <translation>Не удалось открыть %1.</translation> + </message> + <message> + <source>Could not create output directory: %1 +</source> + <translation>Не удалось создать каталог: %1</translation> + </message> +</context> +<context> <name>RemoteControl</name> <message> <source>Debugging Remote Control</source> diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts index 89977b1..d6ab18e 100644 --- a/translations/designer_ru.ts +++ b/translations/designer_ru.ts @@ -25,6 +25,49 @@ </message> </context> <context> + <name>AbstractItemEditor</name> + <message> + <source>Selectable</source> + <translation></translation> + </message> + <message> + <source>Editable</source> + <translation></translation> + </message> + <message> + <source>DragEnabled</source> + <translation></translation> + </message> + <message> + <source>DropEnabled</source> + <translation></translation> + </message> + <message> + <source>UserCheckable</source> + <translation></translation> + </message> + <message> + <source>Enabled</source> + <translation></translation> + </message> + <message> + <source>Tristate</source> + <translation></translation> + </message> + <message> + <source>Unchecked</source> + <translation></translation> + </message> + <message> + <source>PartiallyChecked</source> + <translation></translation> + </message> + <message> + <source>Checked</source> + <translation></translation> + </message> +</context> +<context> <name>AddLinkDialog</name> <message> <source>Insert Link</source> @@ -304,7 +347,7 @@ </message> <message> <source>Change Z-order of '%1'</source> - <translation type="unfinished">Изменить порядок удалённости '%1'</translation> + <translation>Изменить порядок удалённости '%1'</translation> </message> <message> <source>Raise '%1'</source> @@ -324,11 +367,11 @@ </message> <message> <source>Promote to custom widget</source> - <translation type="unfinished">Преобразовать в пользовательский виджет</translation> + <translation>Преобразовать в пользовательский виджет</translation> </message> <message> <source>Demote from custom widget</source> - <translation type="unfinished">Преобразовать из пользовательского виджета</translation> + <translation>Преобразовать из пользовательского виджета</translation> </message> <message> <source>Lay out using grid</source> @@ -348,7 +391,7 @@ </message> <message> <source>Simplify Grid Layout</source> - <translation type="unfinished">Упрощённая компоновка по сетке</translation> + <translation>Упрощённая компоновка по сетке</translation> </message> <message> <source>Move Page</source> @@ -396,7 +439,7 @@ </message> <message> <source>Add Dock Window</source> - <translation type="unfinished">Добавить прикрепляемое окно</translation> + <translation>Добавить прикрепляемое окно</translation> </message> <message> <source>Adjust Size of '%1'</source> @@ -404,11 +447,11 @@ </message> <message> <source>Change Form Layout Item Geometry</source> - <translation type="unfinished">Изменить геометрию элементов компоновки столбцами</translation> + <translation>Изменить геометрию элемента компоновки столбцами</translation> </message> <message> <source>Change Layout Item Geometry</source> - <translation type="unfinished">Изменить геометрию элементов компоновки</translation> + <translation>Изменить геометрию элемента компоновки</translation> </message> <message> <source>Delete Subwindow</source> @@ -653,7 +696,7 @@ </message> <message> <source>Promoted Widgets</source> - <translation type="unfinished">Преобразованные виджеты</translation> + <translation>Преобразованные виджеты</translation> </message> <message> <source>Unable to launch %1.</source> @@ -777,7 +820,7 @@ <message> <source>Embedded Design</source> <extracomment>Tab in preferences dialog</extracomment> - <translation type="unfinished">Оформление портативных устройств</translation> + <translation>Оформление портативных устройств</translation> </message> <message> <source>Device Profiles</source> @@ -852,6 +895,7 @@ Parsing grid layout minimum size values</extracomment> <name>FormEditorOptionsPage</name> <message> <source>%1 %</source> + <extracomment>Zoom percentage</extracomment> <translation>%1 %</translation> </message> <message> @@ -876,7 +920,7 @@ Parsing grid layout minimum size values</extracomment> <name>FormLayoutRowDialog</name> <message> <source>Add Form Layout Row</source> - <translation type="unfinished">Добавление строки компоновщика формы</translation> + <translation>Добавление строки компоновщика столбцами (QFormLayout)</translation> </message> <message> <source>&Label text:</source> @@ -962,7 +1006,7 @@ Parsing grid layout minimum size values</extracomment> </message> <message> <source>Embedded Design</source> - <translation type="unfinished">Оформление портативных устройств</translation> + <translation>Оформление портативных устройств</translation> </message> </context> <context> @@ -1131,7 +1175,7 @@ Parsing grid layout minimum size values</extracomment> <message> <source>Not used</source> <extracomment>Usage of promoted widgets</extracomment> - <translation>Не используется</translation> + <translation>Не используются</translation> </message> </context> <context> @@ -1205,11 +1249,11 @@ This indicates an inconsistency in the ui-file.</source> <name>QAxWidgetTaskMenu</name> <message> <source>Set Control</source> - <translation>Установить элемент управления</translation> + <translation>Задать элемент управления</translation> </message> <message> <source>Reset Control</source> - <translation type="unfinished">Удалить элемент управления</translation> + <translation>Сбросить элемент управления</translation> </message> <message> <source>Licensed Control</source> @@ -1224,7 +1268,7 @@ This indicates an inconsistency in the ui-file.</source> <name>QCoreApplication</name> <message> <source>%1 is not a promoted class.</source> - <translation type="unfinished">%1 не является преобразованным классом.</translation> + <translation>%1 не является преобразованным классом.</translation> </message> <message> <source>The base class %1 is invalid.</source> @@ -1236,7 +1280,7 @@ This indicates an inconsistency in the ui-file.</source> </message> <message> <source>Promoted Widgets</source> - <translation type="unfinished">Преобразованные виджеты</translation> + <translation>Преобразованные виджеты</translation> </message> <message> <source>The class %1 cannot be removed</source> @@ -1567,11 +1611,11 @@ Would you like to retry?</source> <name>QDesignerAxWidget</name> <message> <source>Reset control</source> - <translation type="unfinished">Сбросить элемент управления</translation> + <translation>Сбросить элемент управления</translation> </message> <message> <source>Set control</source> - <translation>Установить элемент управления</translation> + <translation>Задать элемент управления</translation> </message> <message> <source>Control loaded</source> @@ -1579,7 +1623,7 @@ Would you like to retry?</source> </message> <message> <source>A COM exception occurred when executing a meta call of type %1, index %2 of "%3".</source> - <translation type="unfinished">Возникло исключение COM при выполнении мета-вызова типа %1, индекс %2 "%3".</translation> + <translation>Возникло исключение COM при выполнении мета-вызова типа %1, индекс %2 в "%3".</translation> </message> </context> <context> @@ -1838,7 +1882,7 @@ Container pages should only be added by specifying them in XML returned by the d </message> <message> <source>Backup Information</source> - <translation type="unfinished">Информация о резервированых копиях</translation> + <translation>Информация о резервных копиях</translation> </message> <message> <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source> @@ -2232,27 +2276,27 @@ Empty class name passed to widget factory method</extracomment> </message> <message> <source>Linear</source> - <translation type="unfinished">Линейный</translation> + <translation>Линейный</translation> </message> <message> <source>Radial</source> - <translation type="unfinished">Радиальный</translation> + <translation>Радиальный</translation> </message> <message> <source>Conical</source> - <translation type="unfinished">Конический</translation> + <translation>Конический</translation> </message> <message> <source>Pad</source> - <translation type="unfinished">Равномерная</translation> + <translation>Равномерная</translation> </message> <message> <source>Repeat</source> - <translation type="unfinished">Цикличная</translation> + <translation>Цикличная</translation> </message> <message> <source>Reflect</source> - <translation type="unfinished">Зеркальная</translation> + <translation>Зеркальная</translation> </message> <message> <source>Form</source> @@ -2514,6 +2558,10 @@ Empty class name passed to widget factory method</extracomment> <context> <name>QtLocalePropertyManager</name> <message> + <source><Invalid></source> + <translation><Некорректное значение></translation> + </message> + <message> <source>%1, %2</source> <translation>%1, %2</translation> </message> @@ -2651,7 +2699,7 @@ Do you want to replace it?</source> </message> <message> <source>newPrefix</source> - <translation type="unfinished">newPrefix</translation> + <translation type="unfinished"></translation> </message> <message> <source><p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p></source> @@ -2883,7 +2931,7 @@ to <name>QtSizePolicyPropertyManager</name> <message> <source><Invalid></source> - <translation><Неверный></translation> + <translation><Некорректное значение></translation> </message> <message> <source>[%1, %2, %3, %4]</source> @@ -3174,23 +3222,23 @@ Do you want overwrite the template?</source> </message> <message> <source>Dock views</source> - <translation type="unfinished">Прикрепляемые панели</translation> + <translation>Прикрепляемые панели</translation> </message> <message> <source>File</source> - <translation type="unfinished">Файл</translation> + <translation>Файл</translation> </message> <message> <source>Edit</source> - <translation type="unfinished">Правка</translation> + <translation>Правка</translation> </message> <message> <source>Tools</source> - <translation type="unfinished">Инструменты</translation> + <translation>Инструменты</translation> </message> <message> <source>Form</source> - <translation type="unfinished">Форма</translation> + <translation>Форма</translation> </message> <message> <source>Toolbars</source> @@ -3220,11 +3268,11 @@ Do you want overwrite the template?</source> <name>VideoPlayerTaskMenu</name> <message> <source>Available Mime Types</source> - <translation type="unfinished">Доступные типы данных</translation> + <translation>Доступные типы данных</translation> </message> <message> <source>Display supported mime types...</source> - <translation type="unfinished">Показывать поддерживаемые типы данных...</translation> + <translation>Показать поддерживаемые типы данных...</translation> </message> <message> <source>Load...</source> @@ -3306,11 +3354,11 @@ Do you want overwrite the template?</source> </message> <message> <source>Icon View</source> - <translation type="unfinished">Значки</translation> + <translation>Значки</translation> </message> <message> <source>Detailed View</source> - <translation type="unfinished">Подробно</translation> + <translation>Подробно</translation> </message> <message> <source>New action</source> @@ -3902,7 +3950,7 @@ Do you want overwrite the template?</source> <name>qdesigner_internal::FormLayoutMenu</name> <message> <source>Add form layout row...</source> - <translation>Добавить строку компоновщика формы...</translation> + <translation>Добавить строку компоновки в 2 столбца...</translation> </message> </context> <context> @@ -3953,7 +4001,7 @@ Do you want overwrite the template?</source> </message> <message> <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> - <translation type="unfinished">Не удалось вставить виджеты. Qt Designer не смог найти контейнер без компоновщика для вставки виджетов.</translation> + <translation>Не удалось вставить виджеты. Qt Designer не смог найти контейнер без компоновщика для вставки виджетов.</translation> </message> <message> <source>Break the layout of the container you want to paste into, select this container and then paste again.</source> @@ -4083,11 +4131,11 @@ Do you want overwrite the template?</source> </message> <message> <source>Lay Out in a &Form Layout</source> - <translation>Скомпоновать в &две колонки</translation> + <translation>Скомпоновать в &два столбца</translation> </message> <message> <source>Lays out the selected widgets in a form layout</source> - <translation>Компонует выделенные виджеты в две колонки (QFormLayout)</translation> + <translation>Компонует выделенные виджеты в два столбца (QFormLayout)</translation> </message> <message> <source>Lay Out in a &Grid</source> @@ -4548,7 +4596,7 @@ Please select another name.</source> </message> <message> <source>Embedded Design</source> - <translation type="unfinished">Оформление портативных устройств</translation> + <translation>Оформление портативных устройств</translation> </message> <message> <source>Device:</source> @@ -4567,7 +4615,7 @@ Please select another name.</source> </message> <message> <source>New Promoted Class</source> - <translation type="unfinished">Новый преобразованный класс</translation> + <translation>Новый преобразованный класс</translation> </message> <message> <source>Base class name:</source> @@ -4575,7 +4623,7 @@ Please select another name.</source> </message> <message> <source>Promoted class name:</source> - <translation type="unfinished">Имя преобразованного класса:</translation> + <translation>Имя преобразованного класса:</translation> </message> <message> <source>Header file:</source> @@ -4644,7 +4692,7 @@ Please select another name.</source> </message> <message> <source>Compute Details</source> - <translation type="unfinished">Расчитывать детали</translation> + <translation type="unfinished">Рассчитывать детали</translation> </message> <message> <source>Quick</source> @@ -4671,7 +4719,7 @@ Please select another name.</source> <name>qdesigner_internal::PaletteEditorButton</name> <message> <source>Change Palette</source> - <translation type="unfinished">Изменить палитру</translation> + <translation>Изменить палитру</translation> </message> </context> <context> @@ -4742,6 +4790,14 @@ Please select another name.</source> <translation>Поиск вновь установленных модулей пользовательских виджетов.</translation> </message> <message> + <source>Loaded Plugins</source> + <translation>Загруженные модули</translation> + </message> + <message> + <source>Failed Plugins</source> + <translation>Незагруженные модули</translation> + </message> + <message> <source>Qt Designer couldn't find any plugins</source> <translation>Qt Designer не может найти ни одного модуля</translation> </message> @@ -4898,7 +4954,7 @@ ate the goose who was loose.</source> </message> <message> <source>Global include</source> - <translation>Глобальное включение</translation> + <translation type="unfinished">Глобальное включение</translation> </message> <message> <source>Usage</source> @@ -4909,11 +4965,11 @@ ate the goose who was loose.</source> <name>qdesigner_internal::PromotionTaskMenu</name> <message> <source>Promoted widgets...</source> - <translation type="unfinished">Преобразованные виджеты...</translation> + <translation>Преобразованные виджеты...</translation> </message> <message> <source>Promote to ...</source> - <translation type="unfinished">Преобразовать в ...</translation> + <translation>Преобразовать в ...</translation> </message> <message> <source>Change signals/slots...</source> @@ -4921,11 +4977,11 @@ ate the goose who was loose.</source> </message> <message> <source>Promote to</source> - <translation type="unfinished">Преобразовать в</translation> + <translation>Преобразовать в</translation> </message> <message> <source>Demote to %1</source> - <translation type="unfinished">Преобразовать в %1</translation> + <translation>Преобразовать в %1</translation> </message> </context> <context> @@ -4988,15 +5044,15 @@ Class: %2</source> <name>qdesigner_internal::QDesignerPromotionDialog</name> <message> <source>Promoted Widgets</source> - <translation type="unfinished">Преобразованные виджеты</translation> + <translation>Преобразованные виджеты</translation> </message> <message> <source>Promoted Classes</source> - <translation type="unfinished">Преобразованные классы</translation> + <translation>Преобразованные классы</translation> </message> <message> <source>Promote</source> - <translation type="unfinished">Преобразовать</translation> + <translation>Преобразовать</translation> </message> <message> <source>Change signals/slots...</source> @@ -5227,7 +5283,7 @@ Class: %2</source> </message> <message> <source>Source</source> - <translation type="unfinished">Исходник</translation> + <translation>Исходник</translation> </message> <message> <source>&OK</source> @@ -5600,7 +5656,7 @@ Class: %2</source> </message> <message> <source>Edit Tree Widget</source> - <translation type="unfinished">Изменение виджета Дерево</translation> + <translation>Изменение виджета Дерево</translation> </message> <message> <source>&Items</source> @@ -5681,7 +5737,7 @@ Class: %2</source> <name>qdesigner_internal::WidgetBoxTreeWidget</name> <message> <source>Scratchpad</source> - <translation type="unfinished">Блокнот</translation> + <translation>Блокнот</translation> </message> <message> <source>Custom Widgets</source> @@ -5742,7 +5798,7 @@ Class: %2</source> </message> <message> <source>The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source> - <translation type="unfinished">При создании компоновщика не удалось определить текущую страницу контейнера '%1' (%2). Это указывает на некорректность файла ui - возможно, компоновщик был создан для контейнерного виджета.</translation> + <translation>При создании компоновщика не удалось определить текущую страницу контейнера '%1' (%2). Это указывает на некорректность файла ui - возможно, компоновщик был создан для виджета контейнерного типа.</translation> </message> <message> <source>Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts index 2d06f25..3b448a0 100644 --- a/translations/linguist_ru.ts +++ b/translations/linguist_ru.ts @@ -258,6 +258,191 @@ Will assume a single universal form.</source> </message> </context> <context> + <name>LConvert</name> + <message> + <source> +Usage: + lconvert [options] <infile> [<infile>...] + +lconvert is part of Qt's Linguist tool chain. It can be used as a +stand-alone tool to convert and filter translation data files. +The following file formats are supported: + +%1 +If multiple input files are specified, they are merged with +translations from later files taking precedence. + +Options: + -h + --help Display this information and exit. + + -i <infile> + --input-file <infile> + Specify input file. Use if <infile> might start with a dash. + This option can be used several times to merge inputs. + May be '-' (standard input) for use in a pipe. + + -o <outfile> + --output-file <outfile> + Specify output file. Default is '-' (standard output). + + -if <informat> + --input-format <format> + Specify input format for subsequent <infile>s. + The format is auto-detected from the file name and defaults to 'ts'. + + -of <outformat> + --output-format <outformat> + Specify output format. See -if. + + --input-codec <codec> + Specify encoding for QM and PO input files. Default is 'Latin1' + for QM and 'UTF-8' for PO files. UTF-8 is always tried as well for + QM, corresponding to the possible use of the trUtf8() function. + + --output-codec <codec> + Specify encoding for PO output files. Default is 'UTF-8'. + + --drop-tags <regexp> + Drop named extra tags when writing TS or XLIFF files. + May be specified repeatedly. + + --drop-translations + Drop existing translations and reset the status to 'unfinished'. + Note: this implies --no-obsolete. + + --source-language <language>[_<region>] + Specify/override the language of the source strings. Defaults to + POSIX if not specified and the file does not name it yet. + + --target-language <language>[_<region>] + Specify/override the language of the translation. + The target language is guessed from the file name if this option + is not specified and the file contents name no language yet. + + --no-obsolete + Drop obsolete messages. + + --no-finished + Drop finished messages. + + --sort-contexts + Sort contexts in output TS file alphabetically. + + --locations {absolute|relative|none} + Override how source code references are saved in TS files. + Default is absolute. + + --no-ui-lines + Drop line numbers from references to UI files. + + --verbose + be a bit more verbose + +Long options can be specified with only one leading dash, too. + +Return value: + 0 on success + 1 on command line parse failures + 2 on read failures + 3 on write failures +</source> + <translation> +Использование: + lconvert [параметры] <входной файл> [<входной файл>...] + +lconvert - это один из инструментов Qt Linguist. Он может быть использован как +для преобразования файлов переводов, так и для обработки файлов переводов. + +Поддерживаются файлы следующих форматов: + +%1 +Если задано несколько входных файлов, то они будут объединены, причем, каждый +последующий файл имеет приоритет над предыдущим. + +Параметры: + -h + --help Отображение данной справки и выход. + + -i <файл> + --input-file <файл> + Указание входного файл. Следует использовать, если <входной файл> + начинается с дефиса. Этот параметр может быть использован несколько + раз для объединения файлов. + Допустимо значение "-" (стандартный ввод) для использования каналов. + + -o <файл> + --output-file <файл> + Указание выходного файла. + По умолчанию значение "-" (стандартный вывод). + + -if <формат> + --input-format <формат> + Указание формата для последующих входных файлов. + Формат определяется автоматически из имени файла. + По умолчанию предполагается "ts". + + -of <формат> + --output-format <формат> + Указание формата выходного файла. См. -if. + + --input-codec <кодировка> + Указание кодировки входных файлов QM и PO. По умолчанию, + используется "Latin1" для QM и "UTF-8" для PO файлов. Так же UTF-8 + всегда применяется для QM, где возможно использование + функции trUtf8(). + + --output-codec <кодировка> + Указание кодировки выходных файлов формата PO. По умолчанию "UTF-8". + + --drop-tags <regexp> + Опустить дополнительные теги, соответствующие регулярному выражению + regexp, при записи файлов TS или XLIFF. + Можно указывать несколько раз. + + --drop-translations + Опустить существующие переводы и сбросить их статус в "незавершено". + Включает действие --no-obsolete. + + --source-language <язык>[_<регион>] + Задание/изменение языка исходных строк. По умолчанию POSIX, если не + указано и файл не содержит язык исходных строк в своём имени. + + --target-language <язык>[_<регион>] + Задание/изменение языка переводов. + Этот язык определяется из имени файла, если этот параметр не задан + или язык не указан внутри файла. + + --no-obsolete + Опустить устаревшие переводы. + + --no-finished + Опустить завершённые переводы. + + --sort-contexts + Упорядочить по алфавиту контекст выходного TS файла. + + --locations {absolute|relative|none} + Изменение метода сохранения ссылок на исходные тексты в TS файлах. + По умолчанию absolute. + + --no-ui-lines + Опустить номера строк в ссылках на UI файлы. + + --verbose + Выводить чуть больше информации. + +Длинные параметры также можно указывать и с одним дефисом. + +Возвращаемые результаты: + 0 в случае успеха + 1 в случае ошибки в командной строке + 2 при ошибке чтения + 3 при ошибки записи +</translation> + </message> +</context> +<context> <name>LRelease</name> <message numerus="yes"> <source>Dropped %n message(s) which had no ID.</source> @@ -291,6 +476,763 @@ Will assume a single universal form.</source> <numerusform> Пропущено %n непереведённых исходных текстов</numerusform> </translation> </message> + <message> + <source>Usage: + lrelease [options] project-file + lrelease [options] ts-files [-qm qm-file] + +lrelease is part of Qt's Linguist tool chain. It can be used as a +stand-alone tool to convert XML-based translations files in the TS +format into the 'compiled' QM format used by QTranslator objects. + +Options: + -help Display this information and exit + -idbased + Use IDs instead of source strings for message keying + -compress + Compress the QM files + -nounfinished + Do not include unfinished translations + -removeidentical + If the translated text is the same as + the source text, do not include the message + -markuntranslated <prefix> + If a message has no real translation, use the source text + prefixed with the given string instead + -silent + Do not explain what is being done + -version + Display the version of lrelease and exit +</source> + <translation>Использование: + lrelease [параметры] <файл-проекта> + lrelease [параметры] <ts-файлы> [-qm <qm-файлы>] + +lrelease - это один из инструментов Qt Linguist. Он может быть использован для +преобразования переводов, основанных на формате TS в "скомпилированный" +формат QM, используемый объектами QTranslator. + +Параметры: + -help + Отобразить данную справку и выйти + -idbased + Использовать ID вместо исходных строк для индексирования сообщений + -compress + Сжать файл QM + -nounfinished + Не включать незавершённые переводы + -removeidentical + Не включать переводы, совпадающие с исходным текстом + -markuntranslated <приставка> + Если сообщение не имеет перевода, то использовать исходный текст + с указанной приставкой + -silent + Не отчитываться о производимых действиях + -version + Отобразить текущую версию lrelease и выйти +</translation> + </message> + <message> + <source>lrelease error: %1</source> + <translation>lrelease ошибка: %1</translation> + </message> + <message> + <source>Updating '%1'... +</source> + <translation>Обновление '%1'... +</translation> + </message> + <message> + <source>Removing translations equal to source text in '%1'... +</source> + <translation>Удаление переводов для '%1'... +</translation> + </message> + <message> + <source>lrelease error: cannot create '%1': %2 +</source> + <translation>lrelease ошибка: не удалось создать '%1': %2</translation> + </message> + <message> + <source>lrelease error: cannot save '%1': %2</source> + <translation>lrelease ошибка: не удалось сохранить '%1': %2</translation> + </message> + <message> + <source>lrelease version %1 +</source> + <translation>lrelease версия %1 +</translation> + </message> + <message> + <source>lrelease error: cannot read project file '%1'. +</source> + <translation>lrelease ошибка: не удалось прочитать файл проекта '%1'.</translation> + </message> + <message> + <source>lrelease error: cannot process project file '%1'. +</source> + <translation>lrelease ошибка: не удалось обработать файл проекта '%1'.</translation> + </message> + <message> + <source>lrelease warning: Met no 'TRANSLATIONS' entry in project file '%1' +</source> + <translation>lrelease ошибка: в файле проекта '%1' отсутствует запись 'TRANSLATIONS'</translation> + </message> +</context> +<context> + <name>LUpdate</name> + <message> + <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch +</source> + <translation>Несовпадение скобок (круглых, квадратных или фигурных) между ветками #if и #else; используется ветка #if +</translation> + </message> + <message> + <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch +</source> + <translation>Несовпадение скобок (круглых или фигурных) между ветками #if и #else; используется ветка #if +</translation> + </message> + <message> + <source>Unterminated C++ comment +</source> + <translation>Незавершённый комментарий C++ +</translation> + </message> + <message> + <source>Unterminated C++ string +</source> + <translation>Незавершённая строка C++ +</translation> + </message> + <message> + <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor) +</source> + <translation>Лишняя закрывающая фигурная скобка в C++ коде (или злоупотребление препроцессором C++) +</translation> + </message> + <message> + <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor) +</source> + <translation>Лишняя закрывающая круглая скобка в C++ коде (или злоупотребление препроцессором C++) +</translation> + </message> + <message> + <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor) +</source> + <translation>Лишняя закрывающая квадратная скобка в C++ коде (или злоупотребление препроцессором C++) +</translation> + </message> + <message> + <source>circular inclusion of %1 +</source> + <translation>цикличное включение %1 +</translation> + </message> + <message> + <source>Cannot open %1: %2 +</source> + <translation>Невозможно открыть %1: %2 +</translation> + </message> + <message> + <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring +</source> + <translation>//% не может быть использовано совместно с tr() / QT_TR_NOOP(). Пропускается +</translation> + </message> + <message> + <source>Qualifying with unknown namespace/class %1::%2 +</source> + <translation>Уточнение с неизвестным пространством имён/классом %1::%2 +</translation> + </message> + <message> + <source>tr() cannot be called without context +</source> + <translation>tr() не может быть вызван без контекста +</translation> + </message> + <message> + <source>Class '%1' lacks Q_OBJECT macro +</source> + <translation>У класса "%1" отсутствует макрос Q_OBJECT +</translation> + </message> + <message> + <source>It is not recommended to call tr() from within a constructor '%1::%2' +</source> + <translation>Не рекомендуется вызывать tr() в теле конструктора "%1::%2" +</translation> + </message> + <message> + <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring +</source> + <translation>//% не может быть использовано совместно с translate() / QT_TRANSLATE_NOOP(). Пропускается +</translation> + </message> + <message> + <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring +</source> + <translation>//= не может быть использовано совместно с qtTrId() / QT_TRID_NOOP(). Пропускается +</translation> + </message> + <message> + <source>Unexpected character in meta string +</source> + <translation>Неожиданный символ в мета-строке +</translation> + </message> + <message> + <source>Unterminated meta string +</source> + <translation>Незавершённая мета-строка +</translation> + </message> + <message> + <source>Cannot invoke tr() like this +</source> + <translation>Использование tr() в том виде, как здесь, не допускается +</translation> + </message> + <message> + <source>Discarding unconsumed meta data +</source> + <translation>Отбрасываются неиспользуемые мета-данные +</translation> + </message> + <message> + <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor) +</source> + <translation>Лишняя открывающая фигурная скобка в C++ коде (или злоупотребление препроцессором C++) +</translation> + </message> + <message> + <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor) +</source> + <translation>Лишняя открывающая круглая скобка в C++ коде (или злоупотребление препроцессором C++) +</translation> + </message> + <message> + <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor) +</source> + <translation>Лишняя открывающая квадратная скобка в C++ коде (или злоупотребление препроцессором C++) +</translation> + </message> + <message> + <source>Cannot open %1: %2</source> + <translation>Невозможно открыть %1: %2</translation> + </message> + <message> + <source>Unterminated Java comment. +</source> + <translation>Незавершённый комментарий Java. +</translation> + </message> + <message> + <source>Invalid Unicode value. +</source> + <translation>Неверное значение Unicode. +</translation> + </message> + <message> + <source>Unterminated string. +</source> + <translation>Незавершённая строка. +</translation> + </message> + <message> + <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers. +</source> + <translation>Строка, используемая в переводе, может содержать только строковые литералы (возможно, соединённые с другими литералами), но не выражения или числа. +</translation> + </message> + <message> + <source>'class' must be followed by a class name. +</source> + <translation>После слова "class" должно идти имя класса. +</translation> + </message> + <message> + <source>Excess closing brace. +</source> + <translation>Лишняя закрывающая фигурная скобка. +</translation> + </message> + <message> + <source>'package' must be followed by package name. +</source> + <translation>После слова "package" должно идти имя пакета. +</translation> + </message> + <message> + <source>Unbalanced opening brace. +</source> + <translation>Лишняя открывающая фигурная скобка. +</translation> + </message> + <message> + <source>Unbalanced opening parenthesis. +</source> + <translation>Лишняя открывающая круглая скобка. +</translation> + </message> + <message> + <source>Usage: + lupdate [options] [project-file]... + lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file + +lupdate is part of Qt's Linguist tool chain. It extracts translatable +messages from Qt UI files, C++, Java and JavaScript/QtScript source code. +Extracted messages are stored in textual translation source files (typically +Qt TS XML). New and modified messages can be merged into existing TS files. + +Options: + -help Display this information and exit. + -no-obsolete + Drop all obsolete strings. + -extensions <ext>[,<ext>]... + Process files with the given extensions only. + The extension list must be separated with commas, not with whitespace. + Default: '%1'. + -pluralonly + Only include plural form messages. + -silent + Do not explain what is being done. + -no-sort + Do not sort contexts in TS files. + -no-recursive + Do not recursively scan the following directories. + -recursive + Recursively scan the following directories (default). + -I <includepath> or -I<includepath> + Additional location to look for include files. + May be specified multiple times. + -locations {absolute|relative|none} + Specify/override how source code references are saved in TS files. + Default is absolute. + -no-ui-lines + Do not record line numbers in references to UI files. + -disable-heuristic {sametext|similartext|number} + Disable the named merge heuristic. Can be specified multiple times. + -pro <filename> + Name of a .pro file. Useful for files with .pro file syntax but + different file suffix. Projects are recursed into and merged. + -source-language <language>[_<region>] + Specify the language of the source strings for new files. + Defaults to POSIX if not specified. + -target-language <language>[_<region>] + Specify the language of the translations for new files. + Guessed from the file name if not specified. + -ts <ts-file>... + Specify the output file(s). This will override the TRANSLATIONS + and nullify the CODECFORTR from possibly specified project files. + -codecfortr <codec> + Specify the codec assumed for tr() calls. Effective only with -ts. + -version + Display the version of lupdate and exit. + @lst-file + Read additional file names (one per line) from lst-file. +</source> + <translation>Использование: + lupdate [параметры] [файл-проекта]... + lupdate [параметры] [исходный-файл|путь|@lst-файл]... -ts ts-файлы|@lst-файл + +lupdate - это один из инструментов Qt Linguist. Он извлекает переводимые строки +из файлов Qt UI, исходных текстов C++, Java и JavaScript/QtScript. Эти строки +сохраняются в текстовых исходных файлах перевода (обычно, Qt TS XML). Новые +или изменённые сообщения могут быть добавлены в существующие TS файлы. + +Параметры: + -help Отобразить эту информацию и выйти. + -no-obsolete + Удалить все устаревшие строки. + -extensions <ext>[,<ext>]... + Обрабатывать файлы, имеющие только указанные расширения. + Список расширений должен быть разделён запятыми, а не пробелами. + По умолчанию: + "%1". + -pluralonly + Включать только множественную форму сообщений. + -silent + Не показывать выполняемые действия. + -no-sort + Не упорядочивать контекст в TS файлах. + -no-recursive + Не сканировать каталоги рекурсивно. + -recursive + Сканировать каталоги рекурсивно (по умолчанию). + -I <путь> or -I<путь> + Дополнительное расположение подключаемых файлов. + Можно указать несколько раз. + -locations {absolute|relative|none} + Изменение метода сохранения ссылок на исходные тексты в TS файлах. + По умолчанию absolute. + -no-ui-lines + Не сохранять номера строк в ссылках на UI файлы. + -disable-heuristic {sametext|similartext|number} + Отключить указанный метод объединения: + sametext - тот же текст + similartext - похожий текст + number - числа + Может указываться несколько раз. + -pro <имя файла> + Название .pro файла. Используется для файлов в формате .pro, но + имеющих другое расширение. Проекты будут объединены и обработаны + рекурсивно. + --source-language <язык>[_<регион>] + Задание/замена языка исходных строк. По умолчанию, POSIX, если не + указано, и файл не содержит его в своём имени. + --target-language <язык>[_<регион>] + Задание/замена языка переводов. + Этот язык определяется из имени файла, если этот параметр не задан + или язык не указан внутри файла. + -ts <ts-файл>... + Указание выходного файла(ов). В этом случае будет заменена + переменная TRANSLATIONS и обнулена CODECFORTR в указанном файле + проекта. + -codecfortr <кодировка> + Указание кодировки, применимой к tr(). + Используется только вместе с -ts. + -version + Отобразить версию lupdate и выйти. + @lst-файл + Прочитать дополнительные имена файлов (по одному на строке) из + файла lst-файл. +</translation> + </message> + <message> + <source>lupdate warning: Codec for tr() '%1' disagrees with existing file's codec '%2'. Expect trouble. +</source> + <translation>Предупреждение lupdate: Кодировка для tr() "%1" не совпадает с кодировкой существующего файла "%2". Возможны проблемы. +</translation> + </message> + <message> + <source>lupdate warning: Specified target language '%1' disagrees with existing file's language '%2'. Ignoring. +</source> + <translation>Предупреждение lupdate: Указанный целевой язык "%1" не совпадает с языком существующего файла "%2". Пропускается. +</translation> + </message> + <message> + <source>lupdate warning: Specified source language '%1' disagrees with existing file's language '%2'. Ignoring. +</source> + <translation>Предупреждение lupdate: Указанный исходный язык "%1" не совпадает с языком существующего файла "%2". Пропускается. +</translation> + </message> + <message> + <source>Updating '%1'... +</source> + <translation>Обновление "%1"... +</translation> + </message> + <message> + <source>Stripping non plural forms in '%1'... +</source> + <translation>Удаление немножественных форм из "%1"... +</translation> + </message> + <message> + <source>lupdate warning: Codec for source '%1' is invalid. Falling back to codec for tr(). +</source> + <translation>Предупреждение lupdate: Некорректная кодировка для исходника "%1". Используется кодировка для tr(). +</translation> + </message> + <message> + <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1. +</source> + <translation>Предупреждение lupdate: TS файлы командной строки заменят TRANSLATIONS в %1. +</translation> + </message> + <message> + <source>lupdate warning: TS files from command line prevent recursing into %1. +</source> + <translation>Предупреждение lupdate: TS файлы командной строки отключают рекурсию в %1. +</translation> + </message> + <message> + <source>lupdate warning: no TS files specified. Only diagnostics will be produced for '%1'. +</source> + <translation>Предупреждение lupdate: TS файлы не указаны. Будет произведена только диагностика "%1". +</translation> + </message> + <message> + <source>The option -target-language requires a parameter. +</source> + <translation>Параметр -target-language требует значение. +</translation> + </message> + <message> + <source>The option -source-language requires a parameter. +</source> + <translation>Параметр -source-language требует значение. +</translation> + </message> + <message> + <source>The option -disable-heuristic requires a parameter. +</source> + <translation>Параметр -disable-heuristic требует значение. +</translation> + </message> + <message> + <source>Invalid heuristic name passed to -disable-heuristic. +</source> + <translation>Неверное имя метода передано в -disable-heuristic. +</translation> + </message> + <message> + <source>The option -locations requires a parameter. +</source> + <translation>Параметр -locations требует значения.</translation> + </message> + <message> + <source>Invalid parameter passed to -locations. +</source> + <translation>Неверное значение передано в -locations. +</translation> + </message> + <message> + <source>The -codecfortr option should be followed by a codec name. +</source> + <translation>Параметру -codecfortr требуется название кодировки. +</translation> + </message> + <message> + <source>The -extensions option should be followed by an extension list. +</source> + <translation>Параметру -extensions требуется список расширений. +</translation> + </message> + <message> + <source>The -pro option should be followed by a filename of .pro file. +</source> + <translation>Параметру -pro требуется имя .pro файла. +</translation> + </message> + <message> + <source>The -I option should be followed by a path. +</source> + <translation>Параметру -I требуется путь. +</translation> + </message> + <message> + <source>Unrecognized option '%1'. +</source> + <translation>Неопознанный параметр "%1". +</translation> + </message> + <message> + <source>lupdate error: List file '%1' is not readable. +</source> + <translation>Ошибка lupdate: Не удалось прочитать файл списка "%1". +</translation> + </message> + <message> + <source>lupdate warning: For some reason, '%1' is not writable. +</source> + <translation>Предупреждение lupdate: По какой-то причине не удалось записать в "%1". +</translation> + </message> + <message> + <source>lupdate error: File '%1' has no recognized extension. +</source> + <translation>Ошибка lupdate: Расширение файла "%1" не опознано. +</translation> + </message> + <message> + <source>lupdate error: File '%1' does not exist. +</source> + <translation>Ошибка lupdate: Файл "%1" не существует. +</translation> + </message> + <message> + <source>Scanning directory '%1'... +</source> + <translation>Сканирование каталога "%1"... +</translation> + </message> + <message> + <source>lupdate warning: -target-language usually only makes sense with exactly one TS file. +</source> + <translation>Предупреждение lupdate: -target-language имеет смысл для одного TS файла. +</translation> + </message> + <message> + <source>lupdate warning: -codecfortr has no effect without -ts. +</source> + <translation>Предупреждение lupdate: -codecfortr не имеет смысла без -ts. +</translation> + </message> + <message> + <source>lupdate warning: no TS files specified. Only diagnostics will be produced. +</source> + <translation>Предупреждение lupdate: TS файлы не указаны. Будет произведена только диагностика. +</translation> + </message> + <message> + <source>lupdate error: Both project and source files / include paths specified. +</source> + <translation>Ошибка lupdate: Указаны и проект, и исходный файл / включаемые пути. +</translation> + </message> + <message numerus="yes"> + <source> Found %n source text(s) (%1 new and %2 already existing) +</source> + <translation> + <numerusform> Обнаружен %n исходный текст (%1 новых и %2 уже имеющихся) +</numerusform> + <numerusform> Обнаружено %n исходных текста (%1 новых и %2 уже имеющихся) +</numerusform> + <numerusform> Обнаружено %n исходных текстов (%1 новых и %2 уже имеющихся) +</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Removed %n obsolete entries +</source> + <translation> + <numerusform>Удалена %n устаревшая запись +</numerusform> + <numerusform>Удалены %n устаревших записи +</numerusform> + <numerusform>Удалено %n устаревших записей +</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Kept %n obsolete entries +</source> + <translation> + <numerusform>Сохранена %n устаревшая запись +</numerusform> + <numerusform>Сохранены %n устаревшие записи +</numerusform> + <numerusform>Сохранено %n устаревших записей +</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Number heuristic provided %n translation(s) +</source> + <translation> + <numerusform> Эвристика number добавила %n перевод +</numerusform> + <numerusform> Эвристика number добавила %n перевода +</numerusform> + <numerusform> Эвристика number добавила %n переводов +</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Same-text heuristic provided %n translation(s) +</source> + <translation> + <numerusform> Эвристика same-text добавила %n перевод +</numerusform> + <numerusform> Эвристика same-text добавила %n перевода +</numerusform> + <numerusform> Эвристика same-text добавила %n переводов +</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Similar-text heuristic provided %n translation(s) +</source> + <translation> + <numerusform> Эвристика similar-text добавила %n перевод +</numerusform> + <numerusform> Эвристика similar-text добавила %n перевода +</numerusform> + <numerusform> Эвристика similar-text добавила %n переводов +</numerusform> + </translation> + </message> + <message> + <source>Illegal character</source> + <translation>Недопустимый символ</translation> + </message> + <message> + <source>Unclosed string at end of line</source> + <translation>Незавершенный текст в конце строки</translation> + </message> + <message> + <source>Illegal escape squence</source> + <translation>Неверная esc-последовательность</translation> + </message> + <message> + <source>Illegal unicode escape sequence</source> + <translation>Неверная esc-последовательность unicode</translation> + </message> + <message> + <source>Unclosed comment at end of file</source> + <translation>Незакрытый комментарий в конце файла</translation> + </message> + <message> + <source>Illegal syntax for exponential number</source> + <translation>Неверный синтаксис для числа в экспоненциальной форме</translation> + </message> + <message> + <source>Identifier cannot start with numeric literal</source> + <translation>Идентификатор не может начинаться с цифры</translation> + </message> + <message> + <source>Unterminated regular expression literal</source> + <translation>Незавершённый литерал регулярного выражения</translation> + </message> + <message> + <source>//% cannot be used with %1(). Ignoring +</source> + <translation>//% не может быть использовано совместно с %1(). Пропускается +</translation> + </message> + <message> + <source>%1() requires at least two arguments. +</source> + <translation>для %1() требуется как минимум два параметра. +</translation> + </message> + <message> + <source>%1(): both arguments must be literal strings. +</source> + <translation>%1(): оба параметра должны быть строковыми литералами. +</translation> + </message> + <message> + <source>%1() requires at least one argument. +</source> + <translation>для %1() требуется как минимум один параметр. +</translation> + </message> + <message> + <source>%1(): text to translate must be a literal string. +</source> + <translation>%1(): переводимый текст должен быть строковым литералом. +</translation> + </message> + <message> + <source>//= cannot be used with %1(). Ignoring +</source> + <translation>//= не может быть использовано совместно с %1(). Пропускается +</translation> + </message> + <message> + <source>%1(): identifier must be a literal string. +</source> + <translation>%1(): идентификатор должен быть строковым литералом. +</translation> + </message> + <message> + <source>Expected </source> + <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment> + <translation>Ожидается </translation> + </message> + <message> + <source>XML error: Parse error at line %1, column %2 (%3).</source> + <translation>Ошибка XML: Ошибка разбора в строке %1, столбце %2 (%3).</translation> + </message> + <message> + <source>Parse error in UI file</source> + <translation>Ошибка разбора UI файла</translation> + </message> </context> <context> <name>MainWindow</name> @@ -1289,6 +2231,13 @@ Line: %2</source> </message> </context> <context> + <name>PhraseBook</name> + <message> + <source>Parse error at line %1, column %2 (%3).</source> + <translation>Ошибка разбора в строке %1, столбце %2 (%3).</translation> + </message> +</context> +<context> <name>PhraseBookBox</name> <message> <source></source> @@ -1460,6 +2409,12 @@ Line: %2</source> <source>XLIFF localization files</source> <translation>Файлы локализации XLIFF</translation> </message> + <message> + <source>lupdate version %1 +</source> + <translation>lupdate версия %1 +</translation> + </message> </context> <context> <name>SourceCodeView</name> diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index 5fbd6e3..b445c5d 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -302,6 +302,14 @@ have libgstreamer-plugins-base installed.</source> <translation>Ошибка открытия адреса URL</translation> </message> <message> + <source>Error opening resource</source> + <translation>Ошибка открытия ресурса</translation> + </message> + <message> + <source>Error opening source: resource not opened</source> + <translation>Ошибка открытия источника: ресурс не был открыт</translation> + </message> + <message> <source>Setting volume failed</source> <translation>Не удалось установить уровень громкости</translation> </message> @@ -313,6 +321,10 @@ have libgstreamer-plugins-base installed.</source> <source>Playback complete</source> <translation>Воспроизведение завершено</translation> </message> + <message> + <source>Download error</source> + <translation>Ошибка загрузки</translation> + </message> </context> <context> <name>Phonon::MMF::AbstractVideoPlayer</name> @@ -421,6 +433,14 @@ have libgstreamer-plugins-base installed.</source> <translation>Ошибка открытия источника: тип не поддерживается</translation> </message> <message> + <source>Error opening source: resource is compressed</source> + <translation>Ошибка открытия источника: сжатый ресурс</translation> + </message> + <message> + <source>Error opening source: resource not valid</source> + <translation>Ошибка открытия источника: некорректный ресурс</translation> + </message> + <message> <source>Error opening source: media type could not be determined</source> <translation>Ошибка открытия источника: не удалось определить тип медиа-данных</translation> </message> @@ -1360,7 +1380,7 @@ to <name>QDeclarativeBinding</name> <message> <source>Binding loop detected for property "%1"</source> - <translation type="unfinished">Обнаружена цикличная привязка для свойства "%1"</translation> + <translation type="unfinished">Обнаружено зацикливание привязки для свойства "%1"</translation> </message> </context> <context> @@ -1574,6 +1594,10 @@ to <translation type="unfinished">Некорректное присваивание свойства: ожидается сценарий</translation> </message> <message> + <source>Cannot assign multiple values to a singular property</source> + <translation type="unfinished">Невозможно присвоить множество значений свойству, принимающему только одно</translation> + </message> + <message> <source>Cannot assign object to property</source> <translation type="unfinished">Невозможно назначить объектсвойству</translation> </message> @@ -1666,8 +1690,16 @@ to <translation type="unfinished">Некорректное размещение псевдонима</translation> </message> <message> + <source>Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property></source> + <translation type="unfinished">Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как <id>, <id>.<свойство> или <id>.<свойство значения>.<свойство></translation> + </message> + <message> + <source>Alias property exceeds alias bounds</source> + <translation type="unfinished">Свойство псевдонима выходит за границы</translation> + </message> + <message> <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="unfinished">Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как <id> или <id>.<property></translation> + <translation type="obsolete">Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как <id> или <id>.<property></translation> </message> <message> <source>Invalid alias reference. Unable to find id "%1"</source> @@ -1682,29 +1714,10 @@ to </message> </context> <context> - <name>QDeclarativeCompositeTypeManager</name> - <message> - <source>Resource %1 unavailable</source> - <translation>Ресурс "%1" недоступен</translation> - </message> - <message> - <source>Namespace %1 cannot be used as a type</source> - <translation>Пространство имён "%1" не может быть использовано в качестве типа</translation> - </message> - <message> - <source>%1 %2</source> - <translation>%1 %2</translation> - </message> - <message> - <source>Type %1 unavailable</source> - <translation>Тип "%1" недоступен</translation> - </message> -</context> -<context> <name>QDeclarativeConnections</name> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Невозможно назначить несуществующему свойству "%1"</translation> + <translation>Невозможно назначить несуществующему свойству "%1"</translation> </message> <message> <source>Connections: nested objects not allowed</source> @@ -1760,6 +1773,10 @@ to <context> <name>QDeclarativeImportDatabase</name> <message> + <source>cannot load module "%1": File name case mismatch for "%2"</source> + <translation type="unfinished">невозможно загрузить модуль "%1": Регистр имени файла не соответствует "%2"</translation> + </message> + <message> <source>module "%1" definition "%2" not readable</source> <translation type="unfinished">невозможно прочитать определение "%2" модуля "%1"</translation> </message> @@ -1815,6 +1832,10 @@ to <source>is not a type</source> <translation>не является типом</translation> </message> + <message> + <source>File name case mismatch for "%2"</source> + <translation type="unfinished">Регистр имени файла не соответствует "%2"</translation> + </message> </context> <context> <name>QDeclarativeKeyNavigationAttached</name> @@ -1918,7 +1939,7 @@ to <name>QDeclarativeParser</name> <message> <source>Illegal unicode escape sequence</source> - <translation type="unfinished">Неверная unicode esc-последовательность</translation> + <translation>Недопустимая unicode esc-последовательность</translation> </message> <message> <source>Illegal character</source> @@ -1930,7 +1951,7 @@ to </message> <message> <source>Illegal escape squence</source> - <translation type="unfinished">Неверная esc-последовательность</translation> + <translation>Недопустимая esc-последовательность</translation> </message> <message> <source>Unclosed comment at end of file</source> @@ -1938,7 +1959,7 @@ to </message> <message> <source>Illegal syntax for exponential number</source> - <translation type="unfinished">Недопустимый синтаксис для экспоненциального числа</translation> + <translation>Недопустимый синтаксис для экспоненциального числа</translation> </message> <message> <source>Identifier cannot start with numeric literal</source> @@ -1986,15 +2007,15 @@ to </message> <message> <source>Reserved name "Qt" cannot be used as an qualifier</source> - <translation type="unfinished">Зарезервированное имя "Qt" не может быть использовано в качестве спецификатора</translation> + <translation>Зарезервированное имя "Qt" не может быть использовано в качестве спецификатора</translation> </message> <message> <source>Script import qualifiers must be unique.</source> - <translation type="unfinished">Спецификаторы импорта сценария должны быть уникальными.</translation> + <translation>Спецификаторы импорта сценария должны быть уникальными.</translation> </message> <message> <source>Script import requires a qualifier</source> - <translation type="unfinished">Для импорта сценария требуется спецификатор</translation> + <translation>Для импорта сценария требуется спецификатор</translation> </message> <message> <source>Library import requires a version</source> @@ -2081,6 +2102,25 @@ to </message> </context> <context> + <name>QDeclarativeTypeLoader</name> + <message> + <source>Script %1 unavailable</source> + <translation>Сценарий %1 недоступен</translation> + </message> + <message> + <source>Type %1 unavailable</source> + <translation>Тип "%1" недоступен</translation> + </message> + <message> + <source>Namespace %1 cannot be used as a type</source> + <translation>Пространство имён "%1" не может быть использовано в качестве типа</translation> + </message> + <message> + <source>%1 %2</source> + <translation>%1 %2</translation> + </message> +</context> +<context> <name>QDeclarativeVME</name> <message> <source>Unable to create object of type %1</source> @@ -3298,18 +3338,10 @@ Please verify the correct directory name was given.</source> <context> <name>QLibrary</name> <message> - <source>Could not mmap '%1': %2</source> - <translation>Не удалось выполнить mmap "%1": %2</translation> - </message> - <message> <source>Plugin verification data mismatch in '%1'</source> <translation>Проверочная информация для модуля "%1" не совпадает</translation> </message> <message> - <source>Could not unmap '%1': %2</source> - <translation>Не удалось выполнить unmap "%1": %2</translation> - </message> - <message> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>Модуль "%1" использует несоместимую библиотеку Qt. (%2.%3.%4) [%5]</translation> </message> @@ -6071,7 +6103,7 @@ Please choose a different file name.</source> </message> <message> <source>Voice Dial</source> - <extracomment>Button to trigger voice dialling</extracomment> + <extracomment>Button to trigger voice dialing</extracomment> <translation type="unfinished">Голосовой вызов</translation> </message> <message> @@ -8381,11 +8413,11 @@ Please choose a different file name.</source> </message> <message> <source>W3C XML Schema identity constraint selector</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Переключатель ограничений типа шаблона W3C XML</translation> </message> <message> <source>W3C XML Schema identity constraint field</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Поле ограничений типа шаблона W3C XML</translation> </message> <message> <source>A construct was encountered which is disallowed in the current language(%1).</source> @@ -9557,15 +9589,15 @@ Please choose a different file name.</source> </message> <message> <source>Data of type %1 are not allowed to be empty.</source> - <translation type="unfinished"></translation> + <translation>Данные типа %1 не могут быть пустыми.</translation> </message> <message> <source>Element %1 is missing child element.</source> - <translation type="unfinished"></translation> + <translation>У элемента %1 отсутствует дочерний элемент.</translation> </message> <message> <source>There is one IDREF value with no corresponding ID: %1.</source> - <translation type="unfinished"></translation> + <translation>Присутствует одно значение IDREF без соответствующего ID: %1.</translation> </message> <message> <source>Loaded schema file is invalid.</source> @@ -9593,7 +9625,7 @@ Please choose a different file name.</source> </message> <message> <source>Specified type %1 is not known to the schema.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Указанный тип %1 шаблону не известен.</translation> </message> <message> <source>Element %1 is not defined in this scope.</source> @@ -9601,15 +9633,15 @@ Please choose a different file name.</source> </message> <message> <source>Declaration for element %1 does not exist.</source> - <translation type="unfinished"></translation> + <translation>Отсутствует объявление элемента %1.</translation> </message> <message> <source>Element %1 contains invalid content.</source> - <translation type="unfinished"></translation> + <translation>В элементе %1 находится неверное содержимое.</translation> </message> <message> <source>Element %1 is declared as abstract.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 объявлен абстрактным.</translation> </message> <message> <source>Element %1 is not nillable.</source> @@ -9617,7 +9649,7 @@ Please choose a different file name.</source> </message> <message> <source>Attribute %1 contains invalid data: %2</source> - <translation type="unfinished"></translation> + <translation>Атрибут %1 содержит неверные данные: %2</translation> </message> <message> <source>Element contains content although it is nillable.</source> @@ -9625,7 +9657,7 @@ Please choose a different file name.</source> </message> <message> <source>Fixed value constraint not allowed if element is nillable.</source> - <translation type="unfinished"></translation> + <translation>Для обнуляемых элементов недопустимо ограничение фиксированным значением.</translation> </message> <message> <source>Element %1 cannot contain other elements, as it has a fixed content.</source> @@ -9633,75 +9665,75 @@ Please choose a different file name.</source> </message> <message> <source>Specified type %1 is not validly substitutable with element type %2.</source> - <translation type="unfinished"></translation> + <translation>Указанный тип %1 не может быть корректно замещён элементом типа %2.</translation> </message> <message> <source>Complex type %1 is not allowed to be abstract.</source> - <translation type="unfinished"></translation> + <translation>Недопустимо, чтобы сложный тип %1 был абстрактным.</translation> </message> <message> <source>Element %1 contains not allowed attributes.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 содержит недопустимые атрибуты.</translation> </message> <message> <source>Element %1 contains not allowed child element.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 содержит недопустимый дочерний элемент.</translation> </message> <message> <source>Content of element %1 does not match its type definition: %2.</source> - <translation type="unfinished"></translation> + <translation>Содержимое элемента %1 не соответствует его определению типа: %2.</translation> </message> <message> <source>Content of element %1 does not match defined value constraint.</source> - <translation type="unfinished"></translation> + <translation>Содержимое элемента %1 не соответствует определённому ограничению значения.</translation> </message> <message> <source>Element %1 contains not allowed child content.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Элемент %1 содержит недопустимое дочернее содержимое.</translation> </message> <message> <source>Element %1 contains not allowed text content.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 содержит недопустимое текстовое содержимое.</translation> </message> <message> <source>Element %1 is missing required attribute %2.</source> - <translation type="unfinished"></translation> + <translation>У элемента %1 отсутствует необходимый атрибут %2.</translation> </message> <message> <source>Attribute %1 does not match the attribute wildcard.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Атрибут %1 не соответствует шаблону.</translation> </message> <message> <source>Declaration for attribute %1 does not exist.</source> - <translation type="unfinished"></translation> + <translation>Отсутствует объявление атрибута %1.</translation> </message> <message> <source>Element %1 contains two attributes of type %2.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 содержит два атрибута типа %2.</translation> </message> <message> <source>Attribute %1 contains invalid content.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 содержит неверное содержимое.</translation> </message> <message> <source>Element %1 contains unknown attribute %2.</source> - <translation type="unfinished"></translation> + <translation>Элемент %1 содержит неизвестный атрибут %2.</translation> </message> <message> <source>Content of attribute %1 does not match its type definition: %2.</source> - <translation type="unfinished"></translation> + <translation>Содержимое атрибута %1 не соответствует его определению типа: %2.</translation> </message> <message> <source>Content of attribute %1 does not match defined value constraint.</source> - <translation type="unfinished"></translation> + <translation>Содержимое атрибута %1 не соответствует определённому ограничению значения.</translation> </message> <message> <source>Non-unique value found for constraint %1.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Обнаружено неуникальное значение для ограничения %1.</translation> </message> <message> <source>Key constraint %1 contains absent fields.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ограничение на ключ %1 содержит недостающие поля.</translation> </message> <message> <source>Key constraint %1 contains references nillable element %2.</source> @@ -9717,7 +9749,7 @@ Please choose a different file name.</source> </message> <message> <source>Field %1 has no simple type.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Поле %1 имеет не простой тип.</translation> </message> <message> <source>ID value '%1' is not unique.</source> diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts index 7137d21..ea1671f 100644 --- a/translations/qtconfig_ru.ts +++ b/translations/qtconfig_ru.ts @@ -4,6 +4,26 @@ <context> <name>MainWindow</name> <message> + <source><p><b><font size+=2>Appearance</font></b></p><hr><p>Use this tab to customize the appearance of your Qt applications.</p><p>You can select the default GUI Style from the drop down list and customize the colors.</p><p>Any GUI Style plugins in your plugin path will automatically be added to the list of built-in Qt styles. (See the Library Paths tab for information on adding new plugin paths.)</p><p>When you choose 3-D Effects and Window Background colors, the Qt Configuration program will automatically generate a palette for you. To customize colors further, press the Tune Palette button to open the advanced palette editor.<p>The Preview Window shows what the selected Style and colors look like.</source> + <translation type="unfinished"><p><b><font size+=2>Внешний вид</font></b></p><hr><p>На этой вкладке можно настроить внешний вид приложений Qt.</p><p>Позволяет выбрать стиль интерфейса по умолчанию из выпадающего списка и настроить используемые стилем цвета.</p><p>Каждый стиль интерфейса, содержащийся в модулях, найденных в путях к модулям, автоматически добавляется в список встроенных стилей Qt (на вкладке Пути к библиотекам имеется более подробная информация о добавлении путей к модулям).</p><p>При выборе эффектов 3D и фоновых цветов окна программа настройки Qt автоматически создаст подходящую палитру. Для дальнейшей настройки цветов следует зайти в расширенный редактор палитры, нажав кнопку Настроить палитру.<p>В окне предпросмотра можно увидеть как будет выглядеть интерфейс с выбранными стилем и цветами.</translation> + </message> + <message> + <source><p><b><font size+=2>Fonts</font></b></p><hr><p>Use this tab to select the default font for your Qt applications. The selected font is shown (initially as 'Sample Text') in the line edit below the Family, Style and Point Size drop down lists.</p><p>Qt has a powerful font substitution feature that allows you to specify a list of substitute fonts. Substitute fonts are used when a font cannot be loaded, or if the specified font doesn't have a particular character.<p>For example, if you select the font Lucida, which doesn't have Korean characters, but need to show some Korean text using the Mincho font family you can do so by adding Mincho to the list. Once Mincho is added, any Korean characters that are not found in the Lucida font will be taken from the Mincho font. Because the font substitutions are lists, you can also select multiple families, such as Song Ti (for use with Chinese text).</source> + <translation type="unfinished"><p><b><font size+=2>Шрифты</font></b></p><hr><p>На этой вкладке можно выбрать шрифт по умолчанию для приложений Qt. Выбранный шрифт отображается в строке редактирования ниже выпадающих списков "Шрифт", "Начертание" и "Размер" (по умолчанию это текст "Текст для примера (Sample Text)").</p><p>Qt обладает мощным механизмом подмены шрифтов, который позволяет задавать список подставляемых шрифтов. Подставляемые шрифты используются, когда шрифт не удаётся загрузить или в нём отсутствуют необходимые символы.<p>Например, если требуется, чтобы при выборе шрифта Lucida, в котором отсутствуют корейские иероглифы, для отображения корейского текста использовался шрифт Mincho,то можно добавить его в список. После этого все корейские символы, отсутствующие в шрифте Lucida, будут браться из шрифта Mincho. Так как для замены используется список, то можно добавлять несколько шрифтов, например, можно также добавить шрифт Song Ti для отображения китайского текста.</translation> + </message> + <message> + <source><p><b><font size+=2>Interface</font></b></p><hr><p>Use this tab to customize the feel of your Qt applications.</p><p>If the Resolve Symlinks checkbox is checked Qt will follow symlinks when handling URLs. For example, in the file dialog, if this setting is turned on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory will cause the file dialog to change to /var/tmp. With this setting turned off, symlinks are not resolved or followed.</p><p>The Global Strut setting is useful for people who require a minimum size for all widgets (e.g. when using a touch panel or for users who are visually impaired). Leaving the Global Strut width and height at 0 will disable the Global Strut feature</p><p>XIM (Extended Input Methods) are used for entering characters in languages that have large character sets, for example, Chinese and Japanese.</source> + <translation type="unfinished"><p><b><font size+=2>Интерфейс</font></b></p><hr><p>На этой вкладке можно настроить поведение приложений Qt.</p><p>Если включено "Разрешать символьные ссылки", Qt будет следовать по символьным ссылкам при обработке путей URL. Например, если эта функция включена и /usr/tmp является символьной ссылкой на /var/tmp, то в диалоге выбора файла при вводе пути к каталогу /usr/tmp он будет изменён на /var/tmp.</p><p>Функция "Минимальные размеры" предназначены для тех, кому необходимо чтобы элементы интерфейса были не менее заданного размера (например, при использовании сенсорной панели или для людей с проблемами зрения). Если задать 0 в полях "минимальная ширина" и "минимальная высота", то данная функция будет отключена.</p><p>Метод ввода XIM (расширенные методы ввода) используется для ввода символов на языках с большим набором символов (например, китайском или японском).</translation> + </message> + <message> + <source><p><b><font size+=2>Printer</font></b></p><hr><p>Use this tab to configure the way Qt generates output for the printer.You can specify if Qt should try to embed fonts into its generated output.If you enable font embedding, the resulting postscript will be more portable and will more accurately reflect the visual output on the screen; however the resulting postscript file size will be bigger.<p>When using font embedding you can select additional directories where Qt should search for embeddable font files. By default, the X server font path is used.</source> + <translation type="unfinished"><p><b><font size+=2>Принтер</font></b></p><hr><p>На этой вкладке можно настроить способ, которым Qt будет подготавливать данные для печати. Можно указать следует ли встраивать шрифты - в этом случае напечатанные документы будут более похожи на те, что на экране, но при этом увеличится объём данных, передаваемых на печатающее устройство.<p>При использовании встраивания шрифтов можно указать дополнительные каталоги, в которых Qt будет искать файлы шрифтов для встраивания. По умолчанию используется путь к шрифтам X сервера.</translation> + </message> + <message> + <source><p><b><font size+=2>Phonon</font></b></p><hr><p>Use this tab to configure the Phonon GStreamer multimedia backend. <p>It is reccommended to leave all settings on "Auto" to let Phonon determine your settings automatically.</source> + <translation type="unfinished"><p><b><font size+=2>Phonon</font></b></p><hr><p>На этой вкладке можно настроить мультимедийную подсистему Phonon GStreamer.<p>Рекомендуется оставить значение "Автоматически" для всех настроек, чтобы Phonon определил параметры самостоятельно.</translation> + </message> + <message> <source>Desktop Settings (Default)</source> <translation>Настройки рабочего стола (по умолчанию)</translation> </message> @@ -236,7 +256,7 @@ </message> <message> <source>Feel Settings</source> - <translation type="unfinished">Настройка указателя</translation> + <translation type="unfinished">Настройки поведения</translation> </message> <message> <source> ms</source> @@ -260,7 +280,7 @@ </message> <message> <source>Wheel &Scroll Lines:</source> - <translation type="unfinished">&Прокручивать строк при повороте колёсика:</translation> + <translation>&Прокручивать строк при повороте колёсика:</translation> </message> <message> <source>Resolve symlinks in URLs</source> @@ -268,7 +288,7 @@ </message> <message> <source>GUI Effects</source> - <translation type="unfinished">Эффекты пользовательского интерфейса</translation> + <translation>Эффекты интерфейса</translation> </message> <message> <source>&Enable</source> @@ -284,15 +304,15 @@ </message> <message> <source>C&omboBox Effect:</source> - <translation type="unfinished">Эффект &выпадающего списка:</translation> + <translation>Эффект &выпадающего списка:</translation> </message> <message> <source>&ToolTip Effect:</source> - <translation type="unfinished">Эффект &подсказки:</translation> + <translation>Эффект &подсказки:</translation> </message> <message> <source>Tool&Box Effect:</source> - <translation type="unfinished">Эффект панели &инструментов:</translation> + <translation>Эффект панели &инструментов:</translation> </message> <message> <source>Disable</source> @@ -308,7 +328,7 @@ </message> <message> <source>Global Strut</source> - <translation type="unfinished">Минимальные размеры</translation> + <translation>Минимальные размеры</translation> </message> <message> <source>Minimum &Width:</source> @@ -519,59 +539,59 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Build inactive palette from active</source> - <translation type="unfinished">Создать неактивную палитру из активной</translation> + <translation>Создать неактивную палитру из активной</translation> </message> <message> <source>Build disabled palette from active</source> - <translation type="unfinished">Создать выключенную палитру из активной</translation> + <translation>Создать выключенную палитру из активной</translation> </message> <message> <source>Central color &roles</source> - <translation type="unfinished">Роли &цветов</translation> + <translation>Основные роли &цветов</translation> </message> <message> <source>Choose central color role</source> - <translation type="unfinished">Выберите роль цвета</translation> + <translation>Выберите основную роль цвета</translation> </message> <message> <source><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></source> - <translation type="unfinished"><b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul><li>Window - основной цвет фона.</li> <li>WindowText - основной цвет текста.</li> <li>Base - используется в качестве фона для, например, виджетов с текстовыми полями, обычно, белый или другой светлый цвет.</li> <li>Text - цвет текста используемый совместно с Base. Обычно, он совпадает с WindowText, так как в этом случае получается максимальный контраст и с Window, и с Base.</li> <li>Button - основной цвет фона кнопки, которой требуется цвет отличный от Window, например, в стиле Macintosh.</li> <li>ButtonText - цвет текста используемый совместно с Button.</li> <li>Highlight - цвет для обозначения выбранного или выделенного элемента.</li> <li>HighlightedText - цвет текста контрастирующий с Highlight.</li> <li>BrightText - цвет текста, который отличается от WindowText и хорошо контрастирует с черным.</li></ul></p></translation> + <translation><b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul><li><b>Окно</b> - основной цвет фона.</li> <li><b>Текст окна</b> - основной цвет текста.</li> <li><b>Фон</b> - используется в качестве фона для, например, виджетов с текстовыми полями, обычно, белый или другой светлый цвет.</li> <li><b>Текст</b> - цвет текста используемый совместно с <b>Фон</b>. Обычно, он совпадает с <b>Текст окна</b>, так как в этом случае получается максимальный контраст и с <b>Окно</b>, и с <b>Фон</b>.</li> <li><b>Кнопка</b> - основной цвет фона кнопки, которой требуется цвет отличный от <b>Окно</b>, например, в стиле Macintosh.</li> <li><b>Текст кнопки</b> - цвет текста используемый совместно с <b>Кнопка</b>.</li> <li><b>Выделение</b> - цвет для обозначения выбранного или выделенного элемента.</li> <li><b>Выделенный текст</b> - цвет текста контрастирующий с <b>Выделение</b>.</li> <li><b>Яркий текст</b> - цвет текста, который отличается от <b>Текст окна</b> и хорошо контрастирует с черным.</li></ul></p></translation> </message> <message> <source>Window</source> - <translation type="unfinished"></translation> + <translation>Окно</translation> </message> <message> <source>WindowText</source> - <translation type="unfinished"></translation> + <translation>Текст окна</translation> </message> <message> <source>Button</source> - <translation type="unfinished"></translation> + <translation>Кнопка</translation> </message> <message> <source>Base</source> - <translation type="unfinished"></translation> + <translation>Фон</translation> </message> <message> <source>Text</source> - <translation type="unfinished"></translation> + <translation>Текст</translation> </message> <message> <source>BrightText</source> - <translation type="unfinished"></translation> + <translation>Светлый текст</translation> </message> <message> <source>ButtonText</source> - <translation type="unfinished"></translation> + <translation>Текст на кнопке</translation> </message> <message> <source>Highlight</source> - <translation type="unfinished"></translation> + <translation>Выделение</translation> </message> <message> <source>HighlightedText</source> - <translation type="unfinished"></translation> + <translation>Выделенный текст</translation> </message> <message> <source>&Select Color:</source> @@ -595,39 +615,39 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Generate shadings</source> - <translation type="unfinished">Создание полутонов</translation> + <translation>Создание полутонов</translation> </message> <message> <source>Check to let 3D-effect colors be calculated from button-color.</source> - <translation type="unfinished">Включите, чтобы цвета эффекта трёхмерности были получены из цвета кнопки.</translation> + <translation>Создать цвета эффекта трёхмерности из цвета кнопки.</translation> </message> <message> <source>Choose 3D-effect color role</source> - <translation type="unfinished">Выбор роли цвета дял эффекта трёхмерности</translation> + <translation>Выбор роли цвета дял эффекта трёхмерности</translation> </message> <message> <source><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></source> - <translation><b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul> <li>Light - светлее цвета Button. </li> <li>Midlight - среднее между Light и Button. </li> <li>Mid - среднее между Button и Dark. </li> <li>Dark - темнее цвета Button. </li> <li>Shadow - очень темный цвет. </li> </ul></translation> + <translation><b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul> <li><b>Светлый</b> - светлее цвета <b>Кнопка</b>. </li> <li><b>Полусветлый</b> - среднее между <b>Светлый</b> и <b>Кнопка</b>. </li> <li><b>Полутёмный</b> - среднее между <b>Кнопка</b> и <b>Тёмный</b>. </li> <li><b>Тёмный</b> - темнее цвета <b>Кнопка</b>. </li> <li><b>Тень</b> - очень темный цвет. </li> </ul></translation> </message> <message> <source>Light</source> - <translation type="unfinished"></translation> + <translation>Светлый</translation> </message> <message> <source>Midlight</source> - <translation type="unfinished"></translation> + <translation>Полусветлый</translation> </message> <message> <source>Mid</source> - <translation type="unfinished"></translation> + <translation>Полутёмный</translation> </message> <message> <source>Dark</source> - <translation type="unfinished"></translation> + <translation>Тёмный</translation> </message> <message> <source>Shadow</source> - <translation type="unfinished"></translation> + <translation>Тень</translation> </message> <message> <source>Select Co&lor:</source> @@ -635,7 +655,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Choose a color for the selected effect color role.</source> - <translation type="unfinished">Выбор цвета для указанной роли.</translation> + <translation>Выбор цвета для указанной роли.</translation> </message> <message> <source>OK</source> diff --git a/translations/qvfb_ru.ts b/translations/qvfb_ru.ts index a1988de..db9ff2a 100644 --- a/translations/qvfb_ru.ts +++ b/translations/qvfb_ru.ts @@ -262,6 +262,126 @@ <context> <name>QVFb</name> <message> + <source>&File</source> + <translation>&Файл</translation> + </message> + <message> + <source>&Configure...</source> + <translation>&Настройки...</translation> + </message> + <message> + <source>&Save image...</source> + <translation>&Сохранить изображение...</translation> + </message> + <message> + <source>&Animation...</source> + <translation>&Анимация...</translation> + </message> + <message> + <source>&Quit</source> + <translation>В&ыход</translation> + </message> + <message> + <source>&View</source> + <translation>&Вид</translation> + </message> + <message> + <source>Show &Cursor</source> + <translation>Отображать &курсор</translation> + </message> + <message> + <source>&Refresh Rate...</source> + <translation>&Частота обновлений...</translation> + </message> + <message> + <source>&No rotation</source> + <translation>&Без поворота</translation> + </message> + <message> + <source>&90° rotation</source> + <translation>Поворот на &90°</translation> + </message> + <message> + <source>1&80° rotation</source> + <translation>Поворот на 1&80°</translation> + </message> + <message> + <source>2&70° rotation</source> + <translation>Поворот на 2&70°</translation> + </message> + <message> + <source>Zoom scale &0.5</source> + <translation>Масштаб &0.5</translation> + </message> + <message> + <source>Zoom scale 0.7&5</source> + <translation>Масштаб 0.7&5</translation> + </message> + <message> + <source>Zoom scale &1</source> + <translation>Масштаб &1</translation> + </message> + <message> + <source>Zoom scale &2</source> + <translation>Масштаб &2</translation> + </message> + <message> + <source>Zoom scale &3</source> + <translation>Масштаб &3</translation> + </message> + <message> + <source>Zoom scale &4</source> + <translation>Масштаб &4</translation> + </message> + <message> + <source>Zoom &scale...</source> + <translation>&Масштаб...</translation> + </message> + <message> + <source>&Help</source> + <translation>&Справка</translation> + </message> + <message> + <source>&About...</source> + <translation>&О программе...</translation> + </message> + <message> + <source>Save Main Screen image</source> + <translation>Сохранить снимок основного экрана</translation> + </message> + <message> + <source>snapshot.png</source> + <translation>снимок.png</translation> + </message> + <message> + <source>Portable Network Graphics (*.png)</source> + <translation>Portable Network Graphics (*.png)</translation> + </message> + <message> + <source>Save Main Screen Image</source> + <translation>Сохранить снимок основного экрана</translation> + </message> + <message> + <source>Save failed. Check that you have permission to write to the target directory.</source> + <translation>Не удалось сохранить. Убедитесь, что Вы имеете права на запись в целевой каталог.</translation> + </message> + <message> + <source>Save Second Screen image</source> + <translation>Сохранить снимок дополнительного экрана</translation> + </message> + <message> + <source>Save Second Screen Image</source> + <translation>Сохранить снимок дополнительного экрана</translation> + </message> + <message> + <source>About QVFB</source> + <translation>О QVFB</translation> + </message> + <message> + <source><h2>The Qt for Embedded Linux Virtual X11 Framebuffer</h2><p>This application runs under Qt for X11, emulating a simple framebuffer, which the Qt for Embedded Linux server and clients can attach to just as if it was a hardware Linux framebuffer. <p>With the aid of this development tool, you can develop Qt for Embedded Linux applications under X11 without having to switch to a virtual console. This means you can comfortably use your other development tools such as GUI profilers and debuggers.</source> + <translation><h2>Qt для Embedded Linux Virtual X11 Framebuffer</h2><p>Данное приложение работает под Qt для X11, эмулируя простой фрэймбуфер, к которому сервер и клиенты Qt для Embedded Linux могут соединяться как если бы это был аппаратный фрэймбуфер Linux. <p>С помощью данного инструмента Вы можете разрабатывать приложения Qt для Embedded Linux под X11 без необходимости переключаться в виртуальную консоль, что делает более удобным использование других инструментов с графическим интерфейсом - как то профайлеров и отладчиков.</translation> + </message> + <message> <source>Browse...</source> <translation>Обзор...</translation> </message> @@ -274,4 +394,23 @@ <translation>Все обложки QVFB (*.skin)</translation> </message> </context> +<context> + <name>QVFbRateDialog</name> + <message> + <source>Target frame rate:</source> + <translation>Частота смены кадров:</translation> + </message> + <message> + <source>%1fps</source> + <translation>%1 к/с</translation> + </message> + <message> + <source>OK</source> + <translation>ОК</translation> + </message> + <message> + <source>Cancel</source> + <translation>Отмена</translation> + </message> +</context> </TS> |