Date: Mon, 25 May 2009 19:52:30 +0200
Subject: Doc: Fixed links to resources on the qtsoftware.com Web site.
Task-number: 254463
Reviewed-by: Denis Dzyubenko
---
doc/src/index.qdoc | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc
index 4ead9e4..5bf3661 100644
--- a/doc/src/index.qdoc
+++ b/doc/src/index.qdoc
@@ -207,10 +207,10 @@
--
cgit v0.12
From 152d5fb2d97432d92b6b84e6e81c0236d278ac5d Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Mon, 25 May 2009 20:00:12 +0200
Subject: Doc: Removed documentation about the non-existent
QKeyEvent::standardKey() function.
Task-number: 254074
Reviewed-by: Trust Me
---
src/gui/kernel/qkeysequence.cpp | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index 352d26a..3bcf9e3 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -629,8 +629,6 @@ const uint QKeySequencePrivate::numberOfKeyBindings = sizeof(QKeySequencePrivate
This enum represent standard key bindings. They can be used to
assign platform dependent keyboard shortcuts to a QAction.
- QKeyEvent also provides the function QKeyEvent::standardKey() to
- query if it matches an existing key binding.
Note that the key bindings are platform dependent. The currently
bound shortcuts can be queried using keyBindings().
--
cgit v0.12
From 8b34bd541c6aa201c4d872210228bce8217a5e03 Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Mon, 25 May 2009 20:10:25 +0200
Subject: Doc: Miscellaneous documentation fixes for Qt 4.5.x and later.
Reviewed-by: Trust Me
---
doc/src/snippets/picture/picture.cpp | 2 +-
src/corelib/tools/qstringlist.cpp | 2 --
src/gui/painting/qpainterpath.cpp | 8 ++++----
src/gui/text/qfontmetrics.cpp | 12 ++++++------
src/network/ssl/qsslcertificate.cpp | 2 +-
5 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/doc/src/snippets/picture/picture.cpp b/doc/src/snippets/picture/picture.cpp
index 07cedbf..be171c6 100644
--- a/doc/src/snippets/picture/picture.cpp
+++ b/doc/src/snippets/picture/picture.cpp
@@ -66,7 +66,7 @@ int main()
QPicture picture;
picture.load("drawing.pic"); // load picture
QPainter painter;
- painter.begin(&myWidget); // paint in myWidget
+ painter.begin(&myImage); // paint in myImage
painter.drawPicture(0, 0, picture); // draw the picture at (0,0)
painter.end(); // painting done
//! [1]
diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp
index e22f122..cf1bff8 100644
--- a/src/corelib/tools/qstringlist.cpp
+++ b/src/corelib/tools/qstringlist.cpp
@@ -621,8 +621,6 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, QRegExp &rx, int
the list, searching forward from index position \a from. Returns
-1 if no item matched.
- By default, this function is case sensitive.
-
\sa lastIndexOf(), contains(), QList::indexOf()
*/
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index 9ce16d3..1b2c4e3 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -2695,7 +2695,7 @@ qreal QPainterPath::length() const
/*!
Returns percentage of the whole path at the specified length \a len.
- Note that similarly to other percent methods, the percentage measurment
+ Note that similarly to other percent methods, the percentage measurement
is not linear with regards to the length, if curves are present
in the path. When curves are present the percentage argument is mapped
to the t parameter of the Bezier equations.
@@ -2812,7 +2812,7 @@ static inline QBezier bezierAtT(const QPainterPath &path, qreal t, qreal *starti
Returns the point at at the percentage \a t of the current path.
The argument \a t has to be between 0 and 1.
- Note that similarly to other percent methods, the percentage measurment
+ Note that similarly to other percent methods, the percentage measurement
is not linear with regards to the length, if curves are present
in the path. When curves are present the percentage argument is mapped
to the t parameter of the Bezier equations.
@@ -2843,7 +2843,7 @@ QPointF QPainterPath::pointAtPercent(qreal t) const
Positive values for the angles mean counter-clockwise while negative values
mean the clockwise direction. Zero degrees is at the 3 o'clock position.
- Note that similarly to the other percent methods, the percentage measurment
+ Note that similarly to the other percent methods, the percentage measurement
is not linear with regards to the length if curves are present
in the path. When curves are present the percentage argument is mapped
to the t parameter of the Bezier equations.
@@ -2875,7 +2875,7 @@ qreal QPainterPath::angleAtPercent(qreal t) const
Returns the slope of the path at the percentage \a t. The
argument \a t has to be between 0 and 1.
- Note that similarly to other percent methods, the percentage measurment
+ Note that similarly to other percent methods, the percentage measurement
is not linear with regards to the length, if curves are present
in the path. When curves are present the percentage argument is mapped
to the t parameter of the Bezier equations.
diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp
index 88d0610..87da628 100644
--- a/src/gui/text/qfontmetrics.cpp
+++ b/src/gui/text/qfontmetrics.cpp
@@ -670,8 +670,8 @@ QRect QFontMetrics::boundingRect(const QString &text) const
Returns the rectangle that is covered by ink if character \a ch
were to be drawn at the origin of the coordinate system.
- Note that the bounding rectangle may extend to the left of (0, 0),
- e.g. for italicized fonts, and that the text output may cover \e
+ Note that the bounding rectangle may extend to the left of (0, 0)
+ (e.g., for italicized fonts), and that the text output may cover \e
all pixels in the bounding rectangle. For a space character the rectangle
will usually be empty.
@@ -724,7 +724,7 @@ QRect QFontMetrics::boundingRect(QChar ch) const
\o Qt::AlignCenter (== \c{Qt::AlignHCenter | Qt::AlignVCenter})
\o Qt::TextSingleLine ignores newline characters in the text.
\o Qt::TextExpandTabs expands tabs (see below)
- \o Qt::TextShowMnemonic interprets "&x" as \underline{x}, i.e. underlined.
+ \o Qt::TextShowMnemonic interprets "&x" as \underline{x}; i.e., underlined.
\o Qt::TextWordWrap breaks the text to fit the rectangle.
\endlist
@@ -781,7 +781,7 @@ QRect QFontMetrics::boundingRect(const QRect &rect, int flags, const QString &te
\list
\o Qt::TextSingleLine ignores newline characters.
\o Qt::TextExpandTabs expands tabs (see below)
- \o Qt::TextShowMnemonic interprets "&x" as \underline{x}, i.e. underlined.
+ \o Qt::TextShowMnemonic interprets "&x" as \underline{x}; i.e., underlined.
\o Qt::TextWordBreak breaks the text to fit the rectangle.
\endlist
@@ -1500,7 +1500,7 @@ QRectF QFontMetricsF::boundingRect(QChar ch) const
\o Qt::AlignCenter (== \c{Qt::AlignHCenter | Qt::AlignVCenter})
\o Qt::TextSingleLine ignores newline characters in the text.
\o Qt::TextExpandTabs expands tabs (see below)
- \o Qt::TextShowMnemonic interprets "&x" as \underline{x}, i.e. underlined.
+ \o Qt::TextShowMnemonic interprets "&x" as \underline{x}; i.e., underlined.
\o Qt::TextWordWrap breaks the text to fit the rectangle.
\endlist
@@ -1559,7 +1559,7 @@ QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString&
\list
\o Qt::TextSingleLine ignores newline characters.
\o Qt::TextExpandTabs expands tabs (see below)
- \o Qt::TextShowMnemonic interprets "&x" as \underline{x}, i.e. underlined.
+ \o Qt::TextShowMnemonic interprets "&x" as \underline{x}; i.e., underlined.
\o Qt::TextWordBreak breaks the text to fit the rectangle.
\endlist
diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp
index a2ba644..7b554dc 100644
--- a/src/network/ssl/qsslcertificate.cpp
+++ b/src/network/ssl/qsslcertificate.cpp
@@ -267,7 +267,7 @@ QByteArray QSslCertificate::serialNumber() const
/*!
Returns a cryptographic digest of this certificate. By default,
- and MD5 digest will be generated, but you can also specify a
+ an MD5 digest will be generated, but you can also specify a
custom \a algorithm.
*/
QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm algorithm) const
--
cgit v0.12
From 23820c30052ea23ecf2226c300fc4819dd294306 Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Mon, 25 May 2009 20:13:34 +0200
Subject: Doc: Fixed custom graphics item snippet.
As reported on qt-interest:
http://lists.trolltech.com/pipermail/qt-interest/2009-May/007036.html
Reviewed-by: Trust Me
---
doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp b/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp
index a57de9d..d9e38ed 100644
--- a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp
+++ b/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp
@@ -6,7 +6,7 @@ public:
{
qreal penWidth = 1;
return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
- 20 + penWidth / 2, 20 + penWidth / 2);
+ 20 + penWidth, 20 + penWidth);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
--
cgit v0.12
From bbefe9e67366151e2286a2ff6bee0d1009b2a12c Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Mon, 25 May 2009 20:24:22 +0200
Subject: Doc: Removed the incorrect figures for Thumb builds of libraries.
We need to resolve the issues around the use of Thumb code in Qt and
automate the building and comparison of libraries.
Reviewed-by: Trust Me
---
doc/src/installation.qdoc | 2 --
1 file changed, 2 deletions(-)
diff --git a/doc/src/installation.qdoc b/doc/src/installation.qdoc
index 925a195..6a689f9 100644
--- a/doc/src/installation.qdoc
+++ b/doc/src/installation.qdoc
@@ -738,8 +738,6 @@ in the \l{Qt for Windows CE Requirements} document.
\header \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal
\row \o linux-x86-g++ \o GCC 4.2.4 \o 1.7M \o 2.7M \o 3.3M \o 9.9M \o 653K \o 1.1M \o N/A \o 17M
\row \o linux-arm-g++ \o GCC 4.1.1 \o 1.9M \o 3.2M \o 4.1M \o 11M \o 507K \o 1.0M \o N/A \o 17M
- \row \o linux-arm-g++ (thumb)
- \o GCC 4.1.1 \o 1.7M \o 2.8M \o 4.0M \o 9.8M \o 409K \o 796K \o N/A \o 17M
\row \o linux-mips-g++ (MIPS32)
\o GCC 4.2.4 \o 2.0M \o 3.2M \o 4.5M \o 12M \o 505K \o 1003K \o N/A \o 21M
\endtable
--
cgit v0.12
From a4ca38bab521e1f0095b9c90c4623ca9d41d219b Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Mon, 25 May 2009 20:27:19 +0200
Subject: Doc: Clarified what close(), abort() and disconnectFromHost() really
do to the socket connection. (Reviewed - see below.)
Also included corrections to the description of how to send SocketError
and SocketState values via signals. (Trust me - as part of an earlier
revision of the custom types documentation.)
Task-number: 222907
Reviewed-by: Andy Shaw
---
src/network/socket/qabstractsocket.cpp | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index 336a7e7..4bb12e6 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -99,7 +99,7 @@
the client has read the data). Note that Qt does not limit the
write buffer size. You can monitor its size by listening to this
signal.
-
+
The readyRead() signal is emitted every time a new chunk of data
has arrived. bytesAvailable() then returns the number of bytes
that are available for reading. Typically, you would connect the
@@ -199,9 +199,10 @@
parameter describes the type of error that occurred.
QAbstractSocket::SocketError is not a registered metatype, so for queued
- connections, you will have to register it with Q_REGISTER_METATYPE.
+ connections, you will have to register it with Q_DECLARE_METATYPE() and
+ qRegisterMetaType().
- \sa error(), errorString()
+ \sa error(), errorString(), {Creating Custom Qt Types}
*/
/*!
@@ -211,9 +212,10 @@
The \a socketState parameter is the new state.
QAbstractSocket::SocketState is not a registered metatype, so for queued
- connections, you will have to register it with Q_REGISTER_METATYPE.
+ connections, you will have to register it with Q_REGISTER_METATYPE() and
+ qRegisterMetaType().
- \sa state()
+ \sa state(), {Creating Custom Qt Types}
*/
/*!
@@ -1864,9 +1866,9 @@ bool QAbstractSocket::waitForDisconnected(int msecs)
}
/*!
- Aborts the current connection and resets the socket. Unlike
- disconnectFromHost(), this function immediately closes the socket, discarding
- any pending data in the write buffer.
+ Aborts the current connection and resets the socket. Unlike disconnectFromHost(),
+ this function immediately closes the socket, discarding any pending data in the
+ write buffer.
\sa disconnectFromHost(), close()
*/
@@ -2163,7 +2165,12 @@ void QAbstractSocket::setPeerName(const QString &name)
}
/*!
- Disconnects the socket's connection with the host.
+ Closes the I/O device for the socket, disconnects the socket's connection with the
+ host, closes the socket, and resets the name, address, port number and underlying
+ socket descriptor.
+
+ See QIODevice::close() for a description of the actions that occur when an I/O
+ device is closed.
\sa abort()
*/
@@ -2456,7 +2463,8 @@ QNetworkProxy QAbstractSocket::proxy() const
#endif // QT_NO_NETWORKPROXY
#ifdef QT3_SUPPORT
-/*! \enum QAbstractSocket::Error
+/*!
+ \enum QAbstractSocket::Error
\compat
Use QAbstractSocket::SocketError instead.
--
cgit v0.12
From 2248d63c1a32ae84bb6d0bde9021a8074db1b4c9 Mon Sep 17 00:00:00 2001
From: Rohan McGovern
Date: Tue, 26 May 2009 10:46:54 +1000
Subject: Fixed qmake writing targets into the root of the current drive when
DESTDIR=./ and using Windows, nmake and shadow builds.
qmake would canonicalize the DESTDIR of "./" to "". Then it would check
if the original DESTDIR ended with "/", and if so, append it to the new
DESTDIR, resulting in a DESTDIR of "/" - the root of the current drive.
Don't do that.
This bug doesn't occur with in-source builds because qmake detects that
the source and build directories are the same directory and replaces
the DESTDIR of "./" with "" before it reaches the buggy code.
Autotest: included
Reviewed-by: Lincoln Ramsay
---
qmake/generators/win32/winmakefile.cpp | 2 +-
tests/auto/qmake/tst_qmake.cpp | 16 ++++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index 87f55cf..c7f00dd 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -626,7 +626,7 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
// do this here so we can set DEST_TARGET to be the complete path to the final target if it is needed.
QString orgDestDir = var("DESTDIR");
QString destDir = Option::fixPathToTargetOS(orgDestDir, false);
- if (orgDestDir.endsWith('/') || orgDestDir.endsWith(Option::dir_sep))
+ if (!destDir.isEmpty() && (orgDestDir.endsWith('/') || orgDestDir.endsWith(Option::dir_sep)))
destDir += Option::dir_sep;
QString target = QString(project->first("TARGET")+project->first("TARGET_EXT"));
target.remove("\"");
diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp
index 70f1f3c..1178c81 100644
--- a/tests/auto/qmake/tst_qmake.cpp
+++ b/tests/auto/qmake/tst_qmake.cpp
@@ -63,6 +63,7 @@ public slots:
private slots:
void simple_app();
+ void simple_app_shadowbuild();
void simple_lib();
void simple_dll();
void subdirs();
@@ -143,6 +144,21 @@ void tst_qmake::simple_app()
QVERIFY( test_compiler.removeMakefile( workDir ) );
}
+void tst_qmake::simple_app_shadowbuild()
+{
+ QString workDir = base_path + "/testdata/simple_app";
+ QString buildDir = base_path + "/testdata/simple_app_build";
+
+ QVERIFY( test_compiler.qmake( workDir, "simple_app", buildDir ));
+ QVERIFY( test_compiler.make( buildDir ));
+ QVERIFY( test_compiler.exists( buildDir, "simple_app", Exe, "1.0.0" ));
+ QVERIFY( test_compiler.makeClean( buildDir ));
+ QVERIFY( test_compiler.exists( buildDir, "simple_app", Exe, "1.0.0" )); // Should still exist after a make clean
+ QVERIFY( test_compiler.makeDistClean( buildDir ));
+ QVERIFY( !test_compiler.exists( buildDir, "simple_app", Exe, "1.0.0" )); // Should not exist after a make distclean
+ QVERIFY( test_compiler.removeMakefile( buildDir ) );
+}
+
void tst_qmake::simple_dll()
{
QString workDir = base_path + "/testdata/simple_dll";
--
cgit v0.12
From 682b854872c26d7408d79131217825fb8ddace6a Mon Sep 17 00:00:00 2001
From: Michael Goddard
Date: Tue, 26 May 2009 10:39:36 +1000
Subject: BT:Fix access of deleted memory with a static QCursor.
If a QCursor with a predefined shape is declared static, it could be
destroyed after the application dtor has already cleaned up QCursor
memory.
Task-number: 254467
Reviewed-by: Rhys Weatherley
---
src/gui/kernel/qcursor.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/gui/kernel/qcursor.cpp b/src/gui/kernel/qcursor.cpp
index ed7e020..598f4ba 100644
--- a/src/gui/kernel/qcursor.cpp
+++ b/src/gui/kernel/qcursor.cpp
@@ -375,7 +375,9 @@ void QCursorData::cleanup()
return;
for (int shape = 0; shape <= Qt::LastCursor; ++shape) {
- delete qt_cursorTable[shape];
+ // In case someone has a static QCursor defined with this shape
+ if (!qt_cursorTable[shape]->ref.deref())
+ delete qt_cursorTable[shape];
qt_cursorTable[shape] = 0;
}
QCursorData::initialized = false;
--
cgit v0.12
From 02b49e3bf1556c76cd59d205529f04a390cfa433 Mon Sep 17 00:00:00 2001
From: Thierry Bastian
Date: Tue, 26 May 2009 09:48:09 +0200
Subject: Fix doc warnings for Phonon
---
doc/src/phonon-api.qdoc | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/doc/src/phonon-api.qdoc b/doc/src/phonon-api.qdoc
index dd37fe2..5deb64e 100644
--- a/doc/src/phonon-api.qdoc
+++ b/doc/src/phonon-api.qdoc
@@ -1032,6 +1032,7 @@
\value Stream The MediaSource object describes a data stream.
This is the type used for \l{QIODevice}s. Note
that a stream opened with a QUrl, will still be of the Url type.
+ \value Empty The media source doesn't have a source.
\sa MediaSource::type()
*/
@@ -2026,6 +2027,15 @@
*/
/*!
+ \fn void Phonon::MediaObject::clear()
+
+ Stops and removes all playing and enqueued media sources.
+
+ \sa setCurrentSource()
+*/
+
+
+/*!
\fn void Phonon::MediaObject::stateChanged(Phonon::State newstate, Phonon::State oldstate)
This signal is emitted when the state of the MediaObject has changed.
@@ -3027,6 +3037,12 @@
*/
/*!
+ \typedef Phonon::AudioOutputInterface
+ \inmodule Phonon
+ \internal
+*/
+
+/*!
\class Phonon::AudioOutputInterface40
\inmodule Phonon
\since 4.4
@@ -3251,7 +3267,19 @@
/*!
\fn bool Phonon::Path::operator!=(const Path &p) const;
- Returns true if this Path is not equal to \a p; otherwise returns false;
+ Returns true if this Path is not equal to \a p; otherwise returns false.
+*/
+
+/*!
+ \fn MediaNode *Phonon::Path::source() const;
+
+ Returns the source MediaNode used by the path.
+*/
+
+/*!
+ \fn MediaNode *Phonon::Path::sink() const;
+
+ Returns the sink MediaNode used by the path.
*/
/*!
@@ -4878,7 +4906,7 @@
*/
/*!
- \typedef typedef void (*CleanUpFunction)()
+ \typedef Phonon::CleanUpFunction
\inmodule Phonon
\internal
*/
--
cgit v0.12
From 5839b16a73c36ff7636c13f841d26e6a5e0c5435 Mon Sep 17 00:00:00 2001
From: Maurice Kalinowski
Date: Tue, 28 Apr 2009 17:37:52 +0200
Subject: fix double slash prepending causing troubles on WinCE
Before adding a / to the path one should check if it doesn't end with
one already. Otherwise one might get paths like //My Documents on
WinCE causing the native call to crash the filesystem service on that
system.
Reviewed-by: alexis
---
src/gui/dialogs/qfilesystemmodel_p.h | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/gui/dialogs/qfilesystemmodel_p.h b/src/gui/dialogs/qfilesystemmodel_p.h
index 0a1265a..61e8b4c 100644
--- a/src/gui/dialogs/qfilesystemmodel_p.h
+++ b/src/gui/dialogs/qfilesystemmodel_p.h
@@ -164,9 +164,12 @@ public:
QHash::const_iterator iterator;
for(iterator = children.constBegin() ; iterator != children.constEnd() ; ++iterator) {
//On windows the root (My computer) has no path so we don't want to add a / for nothing (e.g. /C:/)
- if (!path.isEmpty())
- iterator.value()->updateIcon(iconProvider, path + QLatin1Char('/') + iterator.value()->fileName);
- else
+ if (!path.isEmpty()) {
+ if (path.endsWith(QLatin1Char('/')))
+ iterator.value()->updateIcon(iconProvider, path + iterator.value()->fileName);
+ else
+ iterator.value()->updateIcon(iconProvider, path + QLatin1Char('/') + iterator.value()->fileName);
+ } else
iterator.value()->updateIcon(iconProvider, iterator.value()->fileName);
}
}
@@ -177,9 +180,12 @@ public:
QHash::const_iterator iterator;
for(iterator = children.constBegin() ; iterator != children.constEnd() ; ++iterator) {
//On windows the root (My computer) has no path so we don't want to add a / for nothing (e.g. /C:/)
- if (!path.isEmpty())
- iterator.value()->retranslateStrings(iconProvider, path + QLatin1Char('/') + iterator.value()->fileName);
- else
+ if (!path.isEmpty()) {
+ if (path.endsWith(QLatin1Char('/')))
+ iterator.value()->retranslateStrings(iconProvider, path + iterator.value()->fileName);
+ else
+ iterator.value()->retranslateStrings(iconProvider, path + QLatin1Char('/') + iterator.value()->fileName);
+ } else
iterator.value()->retranslateStrings(iconProvider, iterator.value()->fileName);
}
}
--
cgit v0.12
From e7a607f0f1f7837a26bf95248504497b0534e357 Mon Sep 17 00:00:00 2001
From: Martin Smith
Date: Tue, 26 May 2009 10:19:02 +0200
Subject: qdoc: Indicate that qAbs(T& v) compares v to a 0 of type T.
Task-number: 246789
---
doc/src/index.qdoc | 1 +
src/corelib/global/qglobal.cpp | 49 +++++++++++++++++++++++++++++++-----------
2 files changed, 38 insertions(+), 12 deletions(-)
diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc
index 4ead9e4..9846ac4 100644
--- a/doc/src/index.qdoc
+++ b/doc/src/index.qdoc
@@ -153,6 +153,7 @@
All Overviews and HOWTOs
Qt Widget Gallery
Class Chart
+ Qt Global Declarations
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 8324d05..f767bb9 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -125,7 +125,8 @@ QT_BEGIN_NAMESPACE
If you want to use QFlags for your own enum types, use
the Q_DECLARE_FLAGS() and Q_DECLARE_OPERATORS_FOR_FLAGS().
- For example:
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 1
@@ -442,14 +443,18 @@ QT_BEGIN_NAMESPACE
function. You can retrieve the minimum and maximum of two given
objects using qMin() and qMax() respectively. All these functions
return a corresponding template type; the template types can be
- replaced by any other type. For example:
+ replaced by any other type.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 3
also contains functions that generate messages from the
given string argument: qCritical(), qDebug(), qFatal() and
qWarning(). These functions call the message handler with the
- given message. For example:
+ given message.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 4
@@ -694,7 +699,9 @@ QT_BEGIN_NAMESPACE
\relates
Wraps the signed 64-bit integer \a literal in a
- platform-independent way. For example:
+ platform-independent way.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 8
@@ -705,7 +712,9 @@ QT_BEGIN_NAMESPACE
\relates
Wraps the unsigned 64-bit integer \a literal in a
- platform-independent way. For example:
+ platform-independent way.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 9
@@ -734,7 +743,11 @@ QT_BEGIN_NAMESPACE
/*! \fn const T &qAbs(const T &value)
\relates
- Returns the absolute value of \a value. For example:
+ Compares \a value to the 0 of type T and returns the absolute
+ value. Thus if T is \e {double}, then \a value is compared to
+ \e{(double) 0}.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 10
*/
@@ -742,7 +755,9 @@ QT_BEGIN_NAMESPACE
/*! \fn int qRound(qreal value)
\relates
- Rounds \a value to the nearest integer. For example:
+ Rounds \a value to the nearest integer.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 11
*/
@@ -750,7 +765,9 @@ QT_BEGIN_NAMESPACE
/*! \fn qint64 qRound64(qreal value)
\relates
- Rounds \a value to the nearest 64-bit integer. For example:
+ Rounds \a value to the nearest 64-bit integer.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 12
*/
@@ -758,7 +775,9 @@ QT_BEGIN_NAMESPACE
/*! \fn const T &qMin(const T &value1, const T &value2)
\relates
- Returns the minimum of \a value1 and \a value2. For example:
+ Returns the minimum of \a value1 and \a value2.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 13
@@ -768,7 +787,9 @@ QT_BEGIN_NAMESPACE
/*! \fn const T &qMax(const T &value1, const T &value2)
\relates
- Returns the maximum of \a value1 and \a value2. For example:
+ Returns the maximum of \a value1 and \a value2.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 14
@@ -779,7 +800,9 @@ QT_BEGIN_NAMESPACE
\relates
Returns \a value bounded by \a min and \a max. This is equivalent
- to qMax(\a min, qMin(\a value, \a max)). For example:
+ to qMax(\a min, qMin(\a value, \a max)).
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 15
@@ -925,7 +948,9 @@ QT_BEGIN_NAMESPACE
4.1.2, the QT_VERSION macro will expand to 0x040102.
You can use QT_VERSION to use the latest Qt features where
- available. For example:
+ available.
+
+ Example:
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 16
--
cgit v0.12
From 2a390bb481a2433a239a9198e463c9337a26db59 Mon Sep 17 00:00:00 2001
From: Olivier Goffart
Date: Mon, 25 May 2009 18:32:46 +0200
Subject: Fixed: QSortFilterProxyModel setDynamicSortFilter doesn't works when
setting the model initially
This was caused by two different bug:
- In the QSortFilterProxyModel, we need to re-sort when setting the
source model change the sorting column (happen when setting a model
initially)
- In the treeview, we need to activate the sorting even if there is no
column yet (because the initial model is empty
Task-number: 254234
Reviewed-by: Thierry
BT:
---
src/gui/itemviews/qheaderview.cpp | 4 ++-
src/gui/itemviews/qsortfilterproxymodel.cpp | 3 ++-
src/gui/itemviews/qtreeview.cpp | 8 +++---
.../tst_qsortfilterproxymodel.cpp | 10 ++++++++
tests/auto/qtreeview/tst_qtreeview.cpp | 29 +++++++++++++++++++++-
5 files changed, 48 insertions(+), 6 deletions(-)
diff --git a/src/gui/itemviews/qheaderview.cpp b/src/gui/itemviews/qheaderview.cpp
index dc63b25..86ece40 100644
--- a/src/gui/itemviews/qheaderview.cpp
+++ b/src/gui/itemviews/qheaderview.cpp
@@ -1267,8 +1267,10 @@ void QHeaderView::setSortIndicator(int logicalIndex, Qt::SortOrder order)
d->sortIndicatorSection = logicalIndex;
d->sortIndicatorOrder = order;
- if (logicalIndex >= d->sectionCount)
+ if (logicalIndex >= d->sectionCount) {
+ emit sortIndicatorChanged(logicalIndex, order);
return; // nothing to do
+ }
if (old != logicalIndex
&& ((logicalIndex >= 0 && resizeMode(logicalIndex) == ResizeToContents)
diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp
index 43feda8..92dfd19 100644
--- a/src/gui/itemviews/qsortfilterproxymodel.cpp
+++ b/src/gui/itemviews/qsortfilterproxymodel.cpp
@@ -1518,7 +1518,8 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
d->clear_mapping();
reset();
- d->update_source_sort_column();
+ if (d->update_source_sort_column() && d->dynamic_sortfilter)
+ d->sort();
}
/*!
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index 62c1277..1070648 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -246,7 +246,7 @@ void QTreeView::setModel(QAbstractItemModel *model)
connect(d->model, SIGNAL(modelAboutToBeReset()), SLOT(_q_modelAboutToBeReset()));
if (d->sortingEnabled)
- sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
+ d->_q_sortIndicatorChanged(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
}
/*!
@@ -846,17 +846,19 @@ void QTreeView::setExpanded(const QModelIndex &index, bool expanded)
void QTreeView::setSortingEnabled(bool enable)
{
Q_D(QTreeView);
- d->sortingEnabled = enable;
header()->setSortIndicatorShown(enable);
header()->setClickable(enable);
if (enable) {
+ //sortByColumn has to be called before we connect or set the sortingEnabled flag
+ // because otherwise it will not call sort on the model.
+ sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
connect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
this, SLOT(_q_sortIndicatorChanged(int, Qt::SortOrder)));
- sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
} else {
disconnect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
this, SLOT(_q_sortIndicatorChanged(int, Qt::SortOrder)));
}
+ d->sortingEnabled = enable;
}
bool QTreeView::isSortingEnabled() const
diff --git a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index bd66fdf..80d90a6 100644
--- a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -2585,6 +2585,16 @@ void tst_QSortFilterProxyModel::task248868_dynamicSorting()
QModelIndex index = proxy1.index(row, 0, QModelIndex());
QCOMPARE(proxy1.data(index, Qt::DisplayRole).toString(), expected.at(row));
}
+
+ //set up the sorting before seting the model up
+ QSortFilterProxyModel proxy2;
+ proxy2.setDynamicSortFilter(true);
+ proxy2.sort(0);
+ proxy2.setSourceModel(&model2);
+ for (int row = 0; row < proxy2.rowCount(QModelIndex()); ++row) {
+ QModelIndex index = proxy2.index(row, 0, QModelIndex());
+ QCOMPARE(proxy2.data(index, Qt::DisplayRole).toString(), expected.at(row));
+ }
}
class QtTestModel: public QAbstractItemModel
diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp
index 655ea4e..54d6619 100644
--- a/tests/auto/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/qtreeview/tst_qtreeview.cpp
@@ -225,6 +225,7 @@ private slots:
void task238873_avoidAutoReopening();
void task244304_clickOnDecoration();
void task246536_scrollbarsNotWorking();
+ void task254234_proxySort();
};
class QtTestModel: public QAbstractItemModel
@@ -2493,7 +2494,6 @@ void tst_QTreeView::sortByColumn()
QCOMPARE(view.header()->sortIndicatorSection(), 0);
QCOMPARE(view.model()->data(view.model()->index(0,0)).toString(), QString::fromLatin1("a"));
QCOMPARE(view.model()->data(view.model()->index(1,0)).toString(), QString::fromLatin1("b"));
-
}
/*
@@ -3272,5 +3272,32 @@ void tst_QTreeView::task246536_scrollbarsNotWorking()
QVERIFY(o.count > 0);
}
+void tst_QTreeView::task254234_proxySort()
+{
+ //based on tst_QTreeView::sortByColumn
+ // it used not to work when setting the source of a proxy after enabling sorting
+ QTreeView view;
+ QStandardItemModel model(4,2);
+ model.setItem(0,0,new QStandardItem("b"));
+ model.setItem(1,0,new QStandardItem("d"));
+ model.setItem(2,0,new QStandardItem("c"));
+ model.setItem(3,0,new QStandardItem("a"));
+ model.setItem(0,1,new QStandardItem("e"));
+ model.setItem(1,1,new QStandardItem("g"));
+ model.setItem(2,1,new QStandardItem("h"));
+ model.setItem(3,1,new QStandardItem("f"));
+
+ view.sortByColumn(1);
+ view.setSortingEnabled(true);
+
+ QSortFilterProxyModel proxy;
+ proxy.setDynamicSortFilter(true);
+ view.setModel(&proxy);
+ proxy.setSourceModel(&model);
+ QCOMPARE(view.header()->sortIndicatorSection(), 1);
+ QCOMPARE(view.model()->data(view.model()->index(0,1)).toString(), QString::fromLatin1("h"));
+ QCOMPARE(view.model()->data(view.model()->index(1,1)).toString(), QString::fromLatin1("g"));
+}
+
QTEST_MAIN(tst_QTreeView)
#include "tst_qtreeview.moc"
--
cgit v0.12
From e33415a700a7d1de706633970ed69936e3b2145e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?=
Date: Tue, 26 May 2009 10:18:46 +0200
Subject: Fix the previous fix.
The previous fix fails on msvc-2005, since QString::setNum()
does not handle rounding of numbers such as 0.015625 consistently.
---
tests/auto/qeasingcurve/tst_qeasingcurve.cpp | 182 +--------------------------
1 file changed, 5 insertions(+), 177 deletions(-)
diff --git a/tests/auto/qeasingcurve/tst_qeasingcurve.cpp b/tests/auto/qeasingcurve/tst_qeasingcurve.cpp
index 8fe15b1..b25cdc7 100644
--- a/tests/auto/qeasingcurve/tst_qeasingcurve.cpp
+++ b/tests/auto/qeasingcurve/tst_qeasingcurve.cpp
@@ -371,182 +371,6 @@ void tst_QEasingCurve::valueForProgress_data()
<< (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
<< (RealList() << 0.5 << 0.7939 << 0.9755 << 0.9755 << 0.7939 << 0.5 << 0.2061 << 0.02447 << 0.02447 << 0.2061 << 0.5);
- /*
- QTest::newRow("InQuad") << int(QEasingCurve::InQuad)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (RealList() << 0 << 0.01 << 0.04 << 0.09 << 0.16 << 0.25 << 0.36 << 0.49 << 0.64 << 0.81 << 1);
- QTest::newRow("OutQuad") << int(QEasingCurve::OutQuad)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0.19 << 0.36 << 0.51 << 0.64 << 0.75 << 0.84 << 0.91 << 0.96 << 0.99 << 1);
-
- QTest::newRow("InOutQuad") << int(QEasingCurve::InOutQuad)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 2 << 8 << 18 << 32 << 50 << 68 << 82 << 92 << 98 << 100);
-
- QTest::newRow("OutInQuad") << int(QEasingCurve::OutInQuad)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 18 << 32 << 42 << 48 << 50 << 52 << 57 << 68 << 82 << 100);
-
- QTest::newRow("InCubic") << int(QEasingCurve::InCubic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 2 << 6 << 12 << 21 << 34 << 51 << 72 << 100);
-
- QTest::newRow("OutCubic") << int(QEasingCurve::OutCubic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 27 << 48 << 65 << 78 << 87 << 93 << 97 << 99 << 99 << 100);
-
- QTest::newRow("InOutCubic") << int(QEasingCurve::InOutCubic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 3 << 10 << 25 << 50 << 74 << 89 << 96 << 99 << 100);
-
- QTest::newRow("OutInCubic") << int(QEasingCurve::OutInCubic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 24 << 39 << 46 << 49 << 50 << 50 << 53 << 60 << 75 << 100);
-
- QTest::newRow("InQuart") << int(QEasingCurve::InQuart)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 0 << 2 << 6 << 12 << 24 << 40 << 65 << 100);
-
- QTest::newRow("OutQuart") << int(QEasingCurve::OutQuart)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 34 << 59 << 75 << 87 << 93 << 97 << 99 << 99 << 99 << 100);
-
- QTest::newRow("InOutQuart") << int(QEasingCurve::InOutQuart)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 1 << 6 << 20 << 50 << 79 << 93 << 98 << 99 << 100);
-
- QTest::newRow("OutInQuart") << int(QEasingCurve::OutInQuart)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 29 << 43 << 48 << 49 << 50 << 50 << 51 << 56 << 70 << 100);
-
- QTest::newRow("InQuint") << int(QEasingCurve::InQuint)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 0 << 1 << 3 << 7 << 16 << 32 << 59 << 100);
-
- QTest::newRow("OutQuint") << int(QEasingCurve::OutQuint)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 40 << 67 << 83 << 92 << 96 << 98 << 99 << 99 << 99 << 100);
-
- QTest::newRow("InOutQuint") << int(QEasingCurve::InOutQuint)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 3 << 16 << 50 << 83 << 96 << 99 << 99 << 100);
-
- QTest::newRow("OutInQuint") << int(QEasingCurve::OutInQuint)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 33 << 46 << 49 << 49 << 50 << 50 << 50 << 53 << 66 << 100);
-
- QTest::newRow("InSine") << int(QEasingCurve::InSine)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 1 << 4 << 10 << 19 << 29 << 41 << 54 << 69 << 84 << 100);
-
- QTest::newRow("OutSine") << int(QEasingCurve::OutSine)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 15 << 30 << 45 << 58 << 70 << 80 << 89 << 95 << 98 << 100);
-
- QTest::newRow("InOutSine") << int(QEasingCurve::InOutSine)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 2 << 9 << 20 << 34 << 49 << 65 << 79 << 90 << 97 << 100);
-
- QTest::newRow("OutInSine") << int(QEasingCurve::OutInSine)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 15 << 29 << 40 << 47 << 50 << 52 << 59 << 70 << 84 << 100);
-
- QTest::newRow("InExpo") << int(QEasingCurve::InExpo)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 0 << 1 << 3 << 6 << 12 << 24 << 49 << 100);
-
- QTest::newRow("OutExpo") << int(QEasingCurve::OutExpo)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 50 << 75 << 87 << 93 << 96 << 98 << 99 << 99 << 99 << 100);
-
- QTest::newRow("InOutExpo") << int(QEasingCurve::InOutExpo)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 3 << 12 << 50 << 87 << 96 << 99 << 99 << 100);
-
- QTest::newRow("OutInExpo") << int(QEasingCurve::OutInExpo)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 37 << 46 << 49 << 49 << 50 << 50 << 50 << 53 << 62 << 100);
-
- QTest::newRow("InCirc") << int(QEasingCurve::InCirc)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 2 << 4 << 8 << 13 << 19 << 28 << 40 << 56 << 100);
-
- QTest::newRow("OutCirc") << int(QEasingCurve::OutCirc)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 43 << 59 << 71 << 80 << 86 << 91 << 95 << 97 << 99 << 100);
-
- QTest::newRow("InOutCirc") << int(QEasingCurve::InOutCirc)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 1 << 4 << 9 << 20 << 50 << 80 << 89 << 95 << 98 << 100);
-
- QTest::newRow("OutInCirc") << int(QEasingCurve::OutInCirc)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 29 << 40 << 45 << 48 << 50 << 51 << 54 << 60 << 70 << 100);
-
- QTest::newRow("InElastic") << int(QEasingCurve::InElastic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << 0 << 1 << -1 << -3 << 12 << -12 << -25 << 100);
-
- QTest::newRow("OutElastic") << int(QEasingCurve::OutElastic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 125 << 112 << 87 << 103 << 101 << 98 << 100 << 100 << 99 << 100);
-
- QTest::newRow("InOutElastic") << int(QEasingCurve::InOutElastic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 0 << 0 << -1 << -6 << 50 << 106 << 101 << 99 << 100 << 100);
-
- QTest::newRow("OutInElastic") << int(QEasingCurve::OutInElastic)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 37 << 56 << 49 << 49 << 50 << 49 << 50 << 53 << 24 << 100);
-
- QTest::newRow("InBack") << int(QEasingCurve::InBack)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << -1 << -4 << -8 << -9 << -8 << -2 << 9 << 29 << 59 << 100);
-
- QTest::newRow("OutBack") << int(QEasingCurve::OutBack)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 40 << 70 << 90 << 102 << 108 << 109 << 108 << 104 << 101 << 100);
-
- QTest::newRow("InOutBack") << int(QEasingCurve::InOutBack)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << -3 << -9 << -7 << 8 << 50 << 91 << 107 << 109 << 103 << 100);
-
- QTest::newRow("OutInBack") << int(QEasingCurve::OutInBack)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 35 << 51 << 54 << 52 << 50 << 47 << 45 << 48 << 64 << 100);
-
- QTest::newRow("InBounce") << int(QEasingCurve::InBounce)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 1 << 6 << 6 << 22 << 23 << 9 << 31 << 69 << 92 << 100);
-
- QTest::newRow("OutBounce") << int(QEasingCurve::OutBounce)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 7 << 30 << 68 << 90 << 76 << 77 << 93 << 94 << 98 << 100);
-
- QTest::newRow("InOutBounce") << int(QEasingCurve::InOutBounce)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 3 << 11 << 4 << 34 << 50 << 65 << 95 << 88 << 97 << 100);
-
- QTest::newRow("OutInBounce") << int(QEasingCurve::OutInBounce)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 15 << 40 << 27 << 43 << 50 << 56 << 72 << 58 << 84 << 100);
-
- QTest::newRow("InCurve") << int(QEasingCurve::InCurve)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 2 << 10 << 23 << 37 << 50 << 60 << 70 << 80 << 90 << 100);
-
- QTest::newRow("OutCurve") << int(QEasingCurve::OutCurve)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 10 << 20 << 30 << 39 << 50 << 62 << 76 << 89 << 97 << 100);
-
- QTest::newRow("SineCurve") << int(QEasingCurve::SineCurve)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 0 << 9 << 34 << 65 << 90 << 100 << 90 << 65 << 34 << 9 << 0);
-
- QTest::newRow("CosineCurve") << int(QEasingCurve::CosineCurve)
- << (IntList() << 0 << 10 << 20 << 30 << 40 << 50 << 60 << 70 << 80 << 90 << 100)
- << (IntList() << 50 << 79 << 97 << 97 << 79 << 50 << 20 << 2 << 2 << 20 << 49);
-*/
}
@@ -590,7 +414,11 @@ void tst_QEasingCurve::valueForProgress()
// converting ease to 4 precision qreal to match the generated samples
qreal easeConv = qreal(QString().setNum(ease, 'g', 4).toDouble());
qreal ex = expected.at(i);
- QVERIFY(qFuzzyCompare(easeConv, ex));
+
+ // the least significant digit it is still subject to rounding errors
+ qreal error = easeConv - ex;
+ // accept the potential rounding error in the least significant digit
+ QVERIFY(error <= 0.00001 );
}
#endif
}
--
cgit v0.12
From 86598234d8c055fe8dbc474d292619d453cc9f56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?=
Date: Tue, 26 May 2009 11:03:24 +0200
Subject: BT: Google suggest example not launching from the Qt Demo app.
The example was installed in the wrong directory.
Task-number: 254452
Reviewed-by: Kim
---
examples/network/googlesuggest/googlesuggest.pro | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/examples/network/googlesuggest/googlesuggest.pro b/examples/network/googlesuggest/googlesuggest.pro
index afd600f..33b79de 100644
--- a/examples/network/googlesuggest/googlesuggest.pro
+++ b/examples/network/googlesuggest/googlesuggest.pro
@@ -3,7 +3,7 @@ SOURCES = main.cpp searchbox.cpp googlesuggest.cpp
HEADERS = searchbox.h googlesuggest.h
# install
-target.path = $$[QT_INSTALL_EXAMPLES]/webkit/googlesuggest
+target.path = $$[QT_INSTALL_EXAMPLES]/network/googlesuggest
sources.files = $$SOURCES $$HEADERS *.pro
-sources.path = $$[QT_INSTALL_EXAMPLES]/webkit/googlesuggest
+sources.path = $$[QT_INSTALL_EXAMPLES]/network/googlesuggest
INSTALLS += target sources
--
cgit v0.12
From 7733f81af953a1ddaa7debc12bb29b101c5bc101 Mon Sep 17 00:00:00 2001
From: Thierry Bastian
Date: Tue, 26 May 2009 10:40:26 +0200
Subject: Fixed keywords signals and slots to Q_SIGNALS and Q_SLOTS
---
src/corelib/io/qfilesystemwatcher.cpp | 2 +-
src/corelib/io/qnoncontiguousbytedevice_p.h | 2 +-
src/corelib/io/qtextstream.cpp | 2 +-
src/corelib/kernel/qtimer.cpp | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp
index e073a08..65cfb71 100644
--- a/src/corelib/io/qfilesystemwatcher.cpp
+++ b/src/corelib/io/qfilesystemwatcher.cpp
@@ -118,7 +118,7 @@ public:
void stop();
-private slots:
+private Q_SLOTS:
void timeout();
};
diff --git a/src/corelib/io/qnoncontiguousbytedevice_p.h b/src/corelib/io/qnoncontiguousbytedevice_p.h
index 2a7e40b..acfc6eb 100644
--- a/src/corelib/io/qnoncontiguousbytedevice_p.h
+++ b/src/corelib/io/qnoncontiguousbytedevice_p.h
@@ -77,7 +77,7 @@ protected:
virtual ~QNonContiguousByteDevice();
bool resetDisabled;
-signals:
+Q_SIGNALS:
void readyRead();
void readProgress(qint64 current, qint64 total);
};
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp
index 4563e84..7c925f1 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/io/qtextstream.cpp
@@ -333,7 +333,7 @@ public:
this->stream = stream;
}
-public slots:
+public Q_SLOTS:
inline void flushStream() { stream->flush(); }
private:
diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp
index 4b3feb0..08821d4 100644
--- a/src/corelib/kernel/qtimer.cpp
+++ b/src/corelib/kernel/qtimer.cpp
@@ -269,7 +269,7 @@ class QSingleShotTimer : public QObject
public:
~QSingleShotTimer();
QSingleShotTimer(int msec, QObject *r, const char * m);
-signals:
+Q_SIGNALS:
void timeout();
protected:
void timerEvent(QTimerEvent *);
--
cgit v0.12
From 5345306c9a0a3b10dbf640253b8b2287c762b081 Mon Sep 17 00:00:00 2001
From: Thierry Bastian
Date: Tue, 26 May 2009 11:36:16 +0200
Subject: Fixed a bug in animation when you set a start value that doesn't have
the same type as the property
For example, if you set a start value of 0 (integer) for a qreal
animation, it would not work.
Reviewed-by: janarve
---
src/corelib/animation/qvariantanimation.cpp | 10 ++-
.../qpropertyanimation/tst_qpropertyanimation.cpp | 77 ++++++++++++++++------
2 files changed, 65 insertions(+), 22 deletions(-)
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index 4542a86..239add9 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -179,10 +179,14 @@ void QVariantAnimationPrivate::convertValues(int t)
//this ensures that all the keyValues are of type t
for (int i = 0; i < keyValues.count(); ++i) {
QVariantAnimation::KeyValue &pair = keyValues[i];
- if (pair.second.userType() != t)
- pair.second.convert(static_cast(t));
+ pair.second.convert(static_cast(t));
}
- interpolator = 0; // if the type changed we need to update the interpolator
+ //we also need update to the current interval if needed
+ currentInterval.start.second.convert(static_cast(t));
+ currentInterval.end.second.convert(static_cast(t));
+
+ //... and the interpolator
+ interpolator = 0;
}
/*!
diff --git a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
index 7e910d4..0aeac91 100644
--- a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
+++ b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
@@ -63,6 +63,18 @@ protected:
}
};
+class MyObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(qreal x READ x WRITE setX)
+public:
+ MyObject() : m_x(0) { }
+ qreal x() const { return m_x; }
+ void setX(qreal x) { m_x = x; }
+private:
+ qreal m_x;
+};
+
class tst_QPropertyAnimation : public QObject
{
Q_OBJECT
@@ -92,6 +104,7 @@ private slots:
void startWithoutStartValue();
void playForwardBackward();
void interpolated();
+ void setStartEndValues_data();
void setStartEndValues();
void zeroDurationStart();
void operationsInStates_data();
@@ -283,7 +296,7 @@ void tst_QPropertyAnimation::statesAndSignals()
void tst_QPropertyAnimation::deletion1()
{
QObject *object = new QWidget;
- QPointer anim = new QPropertyAnimation(object,"minimumWidth");
+ QPointer anim = new QPropertyAnimation(object, "minimumWidth");
//test that the animation is deleted correctly depending of the deletion flag passed in start()
QSignalSpy runningSpy(anim, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
@@ -686,52 +699,78 @@ void tst_QPropertyAnimation::interpolated()
}
}
+Q_DECLARE_METATYPE(QVariant)
+
+void tst_QPropertyAnimation::setStartEndValues_data()
+{
+ QTest::addColumn("propertyName");
+ QTest::addColumn("initialValue");
+ QTest::addColumn("startValue");
+ QTest::addColumn("endValue");
+
+ QTest::newRow("dynamic property") << QByteArray("ole") << QVariant(42) << QVariant(0) << QVariant(10);
+ QTest::newRow("real property, with unmatching types") << QByteArray("x") << QVariant(42.) << QVariant(0) << QVariant(10.);
+}
+
void tst_QPropertyAnimation::setStartEndValues()
{
+ MyObject object;
+ QFETCH(QByteArray, propertyName);
+ QFETCH(QVariant, initialValue);
+ QFETCH(QVariant, startValue);
+ QFETCH(QVariant, endValue);
+
//this tests the start value, end value and default start value
- QObject o;
- o.setProperty("ole", 42);
- QPropertyAnimation anim(&o, "ole");
+ object.setProperty(propertyName, initialValue);
+ QPropertyAnimation anim(&object, propertyName);
QVariantAnimation::KeyValues values;
QCOMPARE(anim.keyValues(), values);
//let's add a start value
- anim.setStartValue(0);
- values << QVariantAnimation::KeyValue(0, 0);
+ anim.setStartValue(startValue);
+ values << QVariantAnimation::KeyValue(0, startValue);
QCOMPARE(anim.keyValues(), values);
- anim.setEndValue(10);
- values << QVariantAnimation::KeyValue(1, 10);
+ anim.setEndValue(endValue);
+ values << QVariantAnimation::KeyValue(1, endValue);
QCOMPARE(anim.keyValues(), values);
//now we can play with objects
- QCOMPARE(o.property("ole").toInt(), 42);
- QCOMPARE(o.property("ole").toInt(), 42);
+ QCOMPARE(object.property(propertyName).toDouble(), initialValue.toDouble());
anim.start();
QVERIFY(anim.startValue().isValid());
- QCOMPARE(o.property("ole"), anim.startValue());
+ QCOMPARE(object.property(propertyName), anim.startValue());
+ anim.setCurrentTime(anim.duration()/2);
+ QCOMPARE(object.property(propertyName).toDouble(), (startValue.toDouble() + endValue.toDouble())/2 ); //just in the middle of the animation
+ anim.setCurrentTime(anim.duration()); //we go to the end of the animation
+ QCOMPARE(anim.state(), QAnimationGroup::Stopped); //it should have stopped
+ QVERIFY(anim.endValue().isValid());
+ QCOMPARE(object.property(propertyName), anim.endValue()); //end of the animations
//now we remove the explicit start value and test the implicit one
anim.stop();
- o.setProperty("ole", 42);
+ object.setProperty(propertyName, initialValue);
+
+ //let's reset the start value
values.remove(0);
- anim.setStartValue(QVariant()); //reset the start value
+ anim.setStartValue(QVariant());
QCOMPARE(anim.keyValues(), values);
QVERIFY(!anim.startValue().isValid());
+
anim.start();
- QCOMPARE(o.property("ole").toInt(), 42);
+ QCOMPARE(object.property(propertyName), initialValue);
anim.setCurrentTime(anim.duration()/2);
- QCOMPARE(o.property("ole").toInt(), 26); //just in the middle of the animation
- anim.setCurrentTime(anim.duration());
+ QCOMPARE(object.property(propertyName).toDouble(), (initialValue.toDouble() + endValue.toDouble())/2 ); //just in the middle of the animation
+ anim.setCurrentTime(anim.duration()); //we go to the end of the animation
QCOMPARE(anim.state(), QAnimationGroup::Stopped); //it should have stopped
QVERIFY(anim.endValue().isValid());
- QCOMPARE(o.property("ole"), anim.endValue()); //end of the animations
+ QCOMPARE(object.property(propertyName), anim.endValue()); //end of the animations
//now we set back the startValue
- anim.setStartValue(5);
+ anim.setStartValue(startValue);
QVERIFY(anim.startValue().isValid());
anim.start();
- QCOMPARE(o.property("ole").toInt(), 5);
+ QCOMPARE(object.property(propertyName), startValue);
}
void tst_QPropertyAnimation::zeroDurationStart()
--
cgit v0.12
From 72ecfb3eb9b65ed2617942510fa0c9af5075f209 Mon Sep 17 00:00:00 2001
From: Kavindra Devi Palaraja
Date: Tue, 26 May 2009 12:03:13 +0200
Subject: Doc - more screenshots and adding better description Details: Work in
progress
---
doc/src/designer-manual.qdoc | 28 ++++++++++++++-------------
doc/src/images/designer-choosing-form.png | Bin 38078 -> 39080 bytes
doc/src/images/rgbController-arrangement.png | Bin 0 -> 10813 bytes
3 files changed, 15 insertions(+), 13 deletions(-)
create mode 100644 doc/src/images/rgbController-arrangement.png
diff --git a/doc/src/designer-manual.qdoc b/doc/src/designer-manual.qdoc
index 03b74e6..77b208b 100644
--- a/doc/src/designer-manual.qdoc
+++ b/doc/src/designer-manual.qdoc
@@ -235,6 +235,7 @@
\page designer-to-know.html
\contentspage {Qt Designer Manual}{Contents}
+
\title Getting to Know Qt Designer
\tableofcontents
@@ -408,6 +409,7 @@
\page designer-quick-start.html
\contentspage {Qt Designer Manual}{Contents}
+
\title A Quick Start to Qt Designer
Using \QD involves \bold four basic steps:
@@ -419,16 +421,14 @@
\o Preview the form
\endlist
- \omit
\image rgbController-screenshot.png
- \endomit
- Suppose you would like to design a small widget (see screenshot above)
- that contains the controls needed to manipulate Red, Green and Blue (RGB)
- values -- a type of widget that can be seen everywhere in image
- manipulation programs.
+ Suppose you would like to design a small widget (see screenshot above) that
+ contains the controls needed to manipulate Red, Green and Blue (RGB) values
+ -- a type of widget that can be seen everywhere in image manipulation
+ programs.
- \table
+ \table
\row
\i \inlineimage designer-choosing-form.png
\i \bold{Choosing a Form}
@@ -436,20 +436,22 @@
You start by choosing \gui Widget from the \gui{New Form} dialog.
\endtable
- Then you drag three labels, three spin boxes and three vertical sliders
- on to your form. You can roughly arrange them according to how you would
- like them to be laid out.
+ Then you drag three labels, three spin boxes and three vertical sliders on
+ to your form. To change the label's default text, simply double-click on
+ it. The screenshot below shows the form after all three labels have been
+ renamed.
+
+ You can roughly arrange them according to how you would like them to be
+ laid out.
- \omit
\table
\row \o \inlineimage rgbController-widgetBox.png
\o \inlineimage rgbController-arrangement.png
\endtable
- \endomit
To ensure that they are laid out exactly like this in your program, you
need to place these widgets into a layout. We will do this in groups of
- three. Select the "RED" label. Then, hold down \key Shift while you select
+ three. Select the "RED" label. Then, hold down \key Ctrl while you select
its corresponding spin box and slider. In the \gui{Form} menu, select
\gui{Lay Out in a Grid}.
diff --git a/doc/src/images/designer-choosing-form.png b/doc/src/images/designer-choosing-form.png
index fa6e470..bee4b29 100644
Binary files a/doc/src/images/designer-choosing-form.png and b/doc/src/images/designer-choosing-form.png differ
diff --git a/doc/src/images/rgbController-arrangement.png b/doc/src/images/rgbController-arrangement.png
new file mode 100644
index 0000000..d9e8bab
Binary files /dev/null and b/doc/src/images/rgbController-arrangement.png differ
--
cgit v0.12
From 57df8bc3ddd2bc5aaf5c25cf3e311fe56ad50ffb Mon Sep 17 00:00:00 2001
From: Martin Smith
Date: Tue, 26 May 2009 12:07:01 +0200
Subject: qdoc: Indicate what iterator_categor means for container classes.
Task-number: 245501
---
doc/src/qset.qdoc | 9 +++++----
src/corelib/tools/qlistdata.cpp | 6 ++++--
src/corelib/tools/qmap.cpp | 6 ++++--
3 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/doc/src/qset.qdoc b/doc/src/qset.qdoc
index afbedc3..6326219 100644
--- a/doc/src/qset.qdoc
+++ b/doc/src/qset.qdoc
@@ -685,11 +685,12 @@
*/
/*!
- \typedef QSet::iterator::iterator_category
- \typedef QSet::const_iterator::iterator_category
+ \typedef QSet::iterator::iterator_category
+ \typedef QSet::const_iterator::iterator_category
- \internal
-*/
+ Synonyms for \e {std::bidirectional_iterator_tag} indicating
+ these iterators are bidirectional iterators.
+ */
/*!
\typedef QSet::iterator::difference_type
diff --git a/src/corelib/tools/qlistdata.cpp b/src/corelib/tools/qlistdata.cpp
index d40b6b6..34a5d80 100644
--- a/src/corelib/tools/qlistdata.cpp
+++ b/src/corelib/tools/qlistdata.cpp
@@ -1173,7 +1173,8 @@ void **QListData::erase(void **xi)
/*! \typedef QList::iterator::iterator_category
- \internal
+ A synonym for \e {std::random_access_iterator_tag} indicating
+ this iterator is a random access iterator.
*/
/*! \typedef QList::iterator::difference_type
@@ -1432,7 +1433,8 @@ void **QListData::erase(void **xi)
/*! \typedef QList::const_iterator::iterator_category
- \internal
+ A synonym for \e {std::random_access_iterator_tag} indicating
+ this iterator is a random access iterator.
*/
/*! \typedef QList::const_iterator::difference_type
diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp
index 0699400..07df28d 100644
--- a/src/corelib/tools/qmap.cpp
+++ b/src/corelib/tools/qmap.cpp
@@ -902,7 +902,8 @@ void QMapData::dump()
/*! \typedef QMap::iterator::iterator_category
- \internal
+ A synonym for \e {std::bidirectional_iterator_tag} indicating
+ this iterator is a bidirectional iterator.
*/
/*! \typedef QMap::iterator::pointer
@@ -1123,7 +1124,8 @@ void QMapData::dump()
/*! \typedef QMap::const_iterator::iterator_category
- \internal
+ A synonym for \e {std::bidirectional_iterator_tag} indicating
+ this iterator is a bidirectional iterator.
*/
/*! \typedef QMap::const_iterator::pointer
--
cgit v0.12
From 337ffb38e35ca43e4119ac0634499b226137692e Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Tue, 26 May 2009 12:08:45 +0200
Subject: Doc: Removed irrelevant links from the Qt for Windows CE
documentation.
Reviewed-by: Maurice Kalinowski
---
doc/src/topics.qdoc | 2 --
1 file changed, 2 deletions(-)
diff --git a/doc/src/topics.qdoc b/doc/src/topics.qdoc
index 301f0d4..6ef3a89 100644
--- a/doc/src/topics.qdoc
+++ b/doc/src/topics.qdoc
@@ -286,11 +286,9 @@ including ARM, Intel x86, MIPS and SH-4.
\o \l {Qt for Windows CE Requirements}
\o \l {Installing Qt on Windows CE}
\o \l {Windows CE - Introduction to using Qt}{Introduction to using Qt}
- \o \l {Qt Examples#Qt for Embedded Linux}{Examples}
\endlist
\o
\list
- \o \l {Qt for Embedded Linux Classes}{Classes}
\o \l {Windows CE - Using shadow builds}{Using shadow builds}
\o \l {Windows CE - Working with Custom SDKs}{Working with Custom SDKs}
\endlist
--
cgit v0.12
From 3037e466ebf21aa4a47a722a1e2ff497690cbef5 Mon Sep 17 00:00:00 2001
From: Jens Bache-Wiig
Date: Tue, 26 May 2009 12:31:23 +0200
Subject: Fix a crash in Phonon::EffectWidget
When creating a UI based on double types we only assigned the
control pointer in certain cases. This would crash because the
tooltip did not check for the pointer, but the real issue was that
we didnt assign the control in the first place.
Task-number: 249710
Reviewed-by: Richard Moe Gustavsen
---
src/3rdparty/phonon/phonon/effectwidget.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/3rdparty/phonon/phonon/effectwidget.cpp b/src/3rdparty/phonon/phonon/effectwidget.cpp
index da5a51a..d5c6c81 100644
--- a/src/3rdparty/phonon/phonon/effectwidget.cpp
+++ b/src/3rdparty/phonon/phonon/effectwidget.cpp
@@ -165,6 +165,7 @@ void EffectWidgetPrivate::autogenerateUi()
if (minValue == -1. && maxValue == 1.) {
//Special case values between -1 and 1.0 to use a slider for improved usability
QSlider *slider = new QSlider(Qt::Horizontal, q);
+ control = slider;
slider->setRange(-SLIDER_RANGE, +SLIDER_RANGE);
slider->setValue(int(SLIDER_RANGE * value.toDouble()));
slider->setTickPosition(QSlider::TicksBelow);
@@ -188,10 +189,10 @@ void EffectWidgetPrivate::autogenerateUi()
break;
}
+ if (control) {
#ifndef QT_NO_TOOLTIP
control->setToolTip(para.description());
#endif
- if (control) {
#ifndef QT_NO_SHORTCUT
label->setBuddy(control);
#endif
--
cgit v0.12
From c666b88abcb2c5c120054ac3b0d304cd8225ded7 Mon Sep 17 00:00:00 2001
From: Joerg Bornemann
Date: Tue, 26 May 2009 12:34:03 +0200
Subject: Windows CE compile fix
QFileInfo doesn't have a constructor for QLatin1Char and implicit
conversion didn't work.
Reviewed-by: Thierry
---
src/corelib/io/qfsfileengine_win.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index aee9fde..82cde8b 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -1298,7 +1298,7 @@ QFileInfoList QFSFileEngine::drives()
}
return ret;
#else
- ret.append(QLatin1Char('/'));
+ ret.append(QFileInfo(QLatin1Char('/')));
return ret;
#endif
}
--
cgit v0.12
From 54f92419b23b425e32ad573db17f608a67936df1 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen
Date: Tue, 26 May 2009 12:40:02 +0200
Subject: Clearifying QWebFrame docs
Adding docs to toHtml() and toPlainText()
Task-number: 253088
Rev-by: Ariya Hidayat
Rev-by: David Boddie
---
src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp
index 5dc6363..e565476 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp
@@ -268,7 +268,7 @@ void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object
}
/*!
- Returns the frame's content, converted to HTML.
+ Returns the frame's content as HTML, enclosed in HTML and BODY tags.
\sa setHtml(), toPlainText()
*/
@@ -280,7 +280,8 @@ QString QWebFrame::toHtml() const
}
/*!
- Returns the content of this frame converted to plain text.
+ Returns the content of this frame converted to plain text, completely
+ stripped of all HTML formatting.
\sa toHtml()
*/
--
cgit v0.12
From f640eca34f63631f938817b1254d0caf92cc9143 Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen
Date: Tue, 26 May 2009 10:04:53 +0200
Subject: Carbon, QFontDialog::getFont() ignore the "initial" parameter
Seems like no code was written to handle other font engines than
CoreText. Unfortunatly the engine on Carbon is ATSUI. This patch
adds general code for converting a QFont to an NSFont so the dialog
can support other engines than CoreText
Task-number: 251957
Reviewed-by: Trenton Schulz
---
src/gui/dialogs/qfontdialog_mac.mm | 39 ++++++++++++++++++++++++++++++--------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm
index 13f7149..3be53db 100644
--- a/src/gui/dialogs/qfontdialog_mac.mm
+++ b/src/gui/dialogs/qfontdialog_mac.mm
@@ -47,6 +47,7 @@
#include
#include
#include
+#include
#include
#include
#import
@@ -123,16 +124,16 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont)
QFont newFont;
if (cocoaFont) {
int pSize = qRound([cocoaFont pointSize]);
- QString family(QCFString::toQString(reinterpret_cast([cocoaFont familyName])));
- QString typeface(QCFString::toQString(reinterpret_cast([cocoaFont fontName])));
-// qDebug() << "original family" << family << "typeface" << typeface << "psize" << pSize;
+ QString family(qt_mac_NSStringToQString([cocoaFont familyName]));
+ QString typeface(qt_mac_NSStringToQString([cocoaFont fontName]));
+
int hyphenPos = typeface.indexOf(QLatin1Char('-'));
if (hyphenPos != -1) {
typeface.remove(0, hyphenPos + 1);
} else {
typeface = QLatin1String("Normal");
}
-// qDebug() << " massaged family" << family << "typeface" << typeface << "psize" << pSize;
+
newFont = QFontDatabase().font(family, typeface, pSize);
newFont.setUnderline(resolveFont.underline());
newFont.setStrikeOut(resolveFont.strikeOut());
@@ -598,15 +599,37 @@ QFont QFontDialogPrivate::execCocoaFontPanel(bool *ok, const QFont &initial,
}
}
-void QFontDialogPrivate::setFont(void * delegate, const QFont &font)
+void QFontDialogPrivate::setFont(void *delegate, const QFont &font)
{
+ QMacCocoaAutoReleasePool pool;
QFontEngine *fe = font.d->engineForScript(QUnicodeTables::Common);
+ NSFontManager *mgr = [NSFontManager sharedFontManager];
+ NSFont *nsFont = 0;
+
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (qstrcmp(fe->name(), "CoreText") == 0) {
- const NSFont *nsFont = reinterpret_cast(static_cast(fe)->ctfont);
- [[NSFontManager sharedFontManager] setSelectedFont:nsFont isMultiple:NO];
- }
+ nsFont = reinterpret_cast(static_cast(fe)->ctfont);
+ } else
#endif
+ {
+ int weight = 5;
+ NSFontTraitMask mask = 0;
+ if (font.style() == QFont::StyleItalic) {
+ mask |= NSItalicFontMask;
+ }
+ if (font.weight() == QFont::Bold) {
+ weight = 9;
+ mask |= NSBoldFontMask;
+ }
+
+ NSFontManager *mgr = [NSFontManager sharedFontManager];
+ nsFont = [mgr fontWithFamily:qt_mac_QStringToNSString(font.family())
+ traits:mask
+ weight:weight
+ size:font.pointSize()];
+ }
+
+ [mgr setSelectedFont:nsFont isMultiple:NO];
[static_cast(delegate) setQtFont:font];
}
--
cgit v0.12
From f552dc200d857505df500b3ce0b99d5f7c74c951 Mon Sep 17 00:00:00 2001
From: Alexis Menard
Date: Tue, 26 May 2009 13:26:14 +0200
Subject: We first remove the pixmap from the cache and then release the key
If we don't remove the pixmap from QCache first then the key is invalid
and the removal failed
Reviewed-by: sroedal
---
src/gui/image/qpixmapcache.cpp | 4 +++-
tests/auto/qpixmapcache/tst_qpixmapcache.cpp | 8 ++++++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp
index 3cfc191..82b42b4 100644
--- a/src/gui/image/qpixmapcache.cpp
+++ b/src/gui/image/qpixmapcache.cpp
@@ -342,8 +342,10 @@ bool QPMCache::remove(const QString &key)
bool QPMCache::remove(const QPixmapCache::Key &key)
{
+ bool result = QCache::remove(key);
+ //We release the key after we removed it from the cache
releaseKey(key);
- return QCache::remove(key);
+ return result;
}
void QPMCache::resizeKeyArray(int size)
diff --git a/tests/auto/qpixmapcache/tst_qpixmapcache.cpp b/tests/auto/qpixmapcache/tst_qpixmapcache.cpp
index 405ac34..fb5998a 100644
--- a/tests/auto/qpixmapcache/tst_qpixmapcache.cpp
+++ b/tests/auto/qpixmapcache/tst_qpixmapcache.cpp
@@ -369,6 +369,14 @@ void tst_QPixmapCache::remove()
key = QPixmapCache::insert(p1);
QCOMPARE(getPrivate(key)->key, 1);
+ //Test if pixmaps are correctly deleted
+ QPixmapCache::clear();
+ key = QPixmapCache::insert(p1);
+ QCOMPARE(getPrivate(key)->key, 1);
+ QVERIFY(QPixmapCache::find(key, &p1) != 0);
+ QPixmapCache::remove(key);
+ QCOMPARE(p1.isDetached(), true);
+
//We mix both part of the API
QPixmapCache::clear();
p1.fill(Qt::red);
--
cgit v0.12
From c37c8370e4897d2e6191df2d1ccde43830ffb8d0 Mon Sep 17 00:00:00 2001
From: Kavindra Devi Palaraja
Date: Tue, 26 May 2009 13:42:33 +0200
Subject: Doc - more screenshots and better description
---
doc/src/designer-manual.qdoc | 35 ++++++++---------------
doc/src/images/rgbController-final-layout.png | Bin 0 -> 11275 bytes
doc/src/images/rgbController-form-gridLayout.png | Bin 0 -> 11235 bytes
doc/src/images/rgbController-selectForLayout.png | Bin 0 -> 20981 bytes
4 files changed, 12 insertions(+), 23 deletions(-)
create mode 100644 doc/src/images/rgbController-final-layout.png
create mode 100644 doc/src/images/rgbController-form-gridLayout.png
create mode 100644 doc/src/images/rgbController-selectForLayout.png
diff --git a/doc/src/designer-manual.qdoc b/doc/src/designer-manual.qdoc
index 77b208b..452782f 100644
--- a/doc/src/designer-manual.qdoc
+++ b/doc/src/designer-manual.qdoc
@@ -436,41 +436,32 @@
You start by choosing \gui Widget from the \gui{New Form} dialog.
\endtable
- Then you drag three labels, three spin boxes and three vertical sliders on
- to your form. To change the label's default text, simply double-click on
- it. The screenshot below shows the form after all three labels have been
- renamed.
-
- You can roughly arrange them according to how you would like them to be
- laid out.
\table
- \row \o \inlineimage rgbController-widgetBox.png
- \o \inlineimage rgbController-arrangement.png
- \endtable
+ \row
+ \i \inlineimage rgbController-arrangement.png
+ \i \bold{Placing Widgets on a Form}
+ Drag three labels, three spin boxes and three vertical sliders on to your
+ form. To change the label's default text, simply double-click on it. You
+ can arrange them according to how you would like them to be laid out.
+ \endtable
+
To ensure that they are laid out exactly like this in your program, you
need to place these widgets into a layout. We will do this in groups of
three. Select the "RED" label. Then, hold down \key Ctrl while you select
its corresponding spin box and slider. In the \gui{Form} menu, select
\gui{Lay Out in a Grid}.
- \omit
\table
\row
\i \inlineimage rgbController-form-gridLayout.png
\i \inlineimage rgbController-selectForLayout.png
\endtable
- \endomit
Repeat the step for the other two labels along with their corresponding
- spin boxes and sliders as well. Your form will now look similar to the
- screenshot below.
-
- \omit
- \image rgbController-almostLaidOut.png
- \endomit
+ spin boxes and sliders as well.
The next step is to combine all three layouts into one \bold{main layout}.
It is important that your form has a main layout; otherwise, the widgets
@@ -478,7 +469,9 @@
layout, \gui{Right click} anywhere on your form, outside of the three
separate layouts, and select \gui{Lay Out Horizontally}. Alternatively, you
could also select \gui{Lay Out in a Grid} -- you will still see the same
- arrangement.
+ arrangement (shown below).
+
+ \image rgbController-final-layout.png
\note Main layouts cannot be seen on the form. To check if you have a main
layout installed, try resizing your form; your widgets should resize
@@ -495,7 +488,6 @@
pressing \key{F4} or something \gui{Edit Signals/Slots} from the \gui{Edit}
menu.
- \omit
\table
\row
\i \inlineimage rgbController-signalsAndSlots.png
@@ -505,11 +497,8 @@
\gui{Configure Connection} dialog, shown below, will pop up. Select the
correct signal and slot and click \gui OK.
\endtable
- \endomit
- \omit
\image rgbController-configureConnection.png
- \endomit
Repeat the step (in reverse order), clicking on the spin box and dragging
the cursor towards the slider, to connect the spin box's
diff --git a/doc/src/images/rgbController-final-layout.png b/doc/src/images/rgbController-final-layout.png
new file mode 100644
index 0000000..d32a93e
Binary files /dev/null and b/doc/src/images/rgbController-final-layout.png differ
diff --git a/doc/src/images/rgbController-form-gridLayout.png b/doc/src/images/rgbController-form-gridLayout.png
new file mode 100644
index 0000000..c8f3dcf
Binary files /dev/null and b/doc/src/images/rgbController-form-gridLayout.png differ
diff --git a/doc/src/images/rgbController-selectForLayout.png b/doc/src/images/rgbController-selectForLayout.png
new file mode 100644
index 0000000..7a8e184
Binary files /dev/null and b/doc/src/images/rgbController-selectForLayout.png differ
--
cgit v0.12
From aec18b0eea741da58a02f7ad95ab5ee9dccfce6c Mon Sep 17 00:00:00 2001
From: Kavindra Devi Palaraja
Date: Tue, 26 May 2009 13:44:35 +0200
Subject: Doc - whitespace cleaning
---
doc/src/designer-manual.qdoc | 48 ++++++++++++++++++++++----------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/doc/src/designer-manual.qdoc b/doc/src/designer-manual.qdoc
index 452782f..9c13d79 100644
--- a/doc/src/designer-manual.qdoc
+++ b/doc/src/designer-manual.qdoc
@@ -299,12 +299,12 @@
\row
\i \inlineimage designer-widget-box.png
\i \bold{Qt Designer's Widget Box}
-
+
The widget box provides a selection of standard Qt widgets, layouts,
and other objects that can be used to create user interfaces on forms.
Each of the categories in the widget box contain widgets with similar
uses or related features.
-
+
\note Since Qt 4.4, new widgets have been included, e.g.,
QPlainTextEdit, QCommandLinkButton, QScrollArea, QMdiArea, and
QWebView.
@@ -358,7 +358,7 @@
using a grid. The coordinates on the screenshot show the position of each
widget within the grid.
- \image addressbook-tutorial-part3-labeled-layout.png
+ \image addressbook-tutorial-part3-labeled-layout.png
\note Inside the grid, the QPushButton objects are actually nested. The
buttons on the right are first placed in a QVBoxLayout; the buttons at the
@@ -367,7 +367,7 @@
To visualize, imagine the layout as a box that shrinks as much as possible,
attempting to \e squeeze your widgets in a neat arrangement, and, at the
- same time, maximize the use of available space.
+ same time, maximize the use of available space.
Qt's layouts help when you:
@@ -446,7 +446,7 @@
form. To change the label's default text, simply double-click on it. You
can arrange them according to how you would like them to be laid out.
\endtable
-
+
To ensure that they are laid out exactly like this in your program, you
need to place these widgets into a layout. We will do this in groups of
three. Select the "RED" label. Then, hold down \key Ctrl while you select
@@ -779,11 +779,11 @@
have a \c text property that can also be edited by double-clicking
on the widget or by pressing \gui F2. \QD interprets the backslash
(\\) character specially, enabling newline (\\n) characters to be
- inserted into the text; the \\\\ character sequence is used to
+ inserted into the text; the \\\\ character sequence is used to
insert a single backslash into the text. A context menu can also be
opened while editing, providing another way to insert special
characters and newlines into the text.
- \endlist
+ \endlist
\section2 Dynamic Properties
@@ -795,12 +795,12 @@
\image designer-property-editor-toolbar.png
- To add a dynamic property, clcik on the \gui Add button
+ To add a dynamic property, clcik on the \gui Add button
\inlineimage designer-property-editor-add-dynamic.png
- . To remove it, click on the \gui Remove button
+ . To remove it, click on the \gui Remove button
\inlineimage designer-property-editor-remove-dynamic.png
instead. You can also sort the properties alphabetically and change the
- color groups by clickinig on the \gui Configure button
+ color groups by clickinig on the \gui Configure button
\inlineimage designer-property-editor-configure.png
.
@@ -902,7 +902,7 @@
\section2 Horizontal and Vertical Layouts
-
+
The simplest way to arrange objects on a form is to place them in a
horizontal or vertical layout. Horizontal layouts ensure that the widgets
within are aligned horizontally; vertical layouts ensure that they are
@@ -1129,7 +1129,7 @@
spacers just provide spacing hints to layouts, so they cannot be connected
to other objects.
-
+
\target HighlightedObjects
\table
\row
@@ -1168,7 +1168,7 @@
\image designer-connection-dialog.png
- To complete the connection, select a signal from the source object and a
+ To complete the connection, select a signal from the source object and a
slot from the destination object, then click \key OK. Click \key Cancel if
you wish to abandon the connection.
@@ -1711,22 +1711,22 @@
\i \bold{Resource Files}
Within the resource browser, you can open existing resource files or
- create new ones. Click the \gui{Edit Resources} button
+ create new ones. Click the \gui{Edit Resources} button
\inlineimage designer-edit-resources-button.png
to edit your resources. To reload resources, click on the \gui Reload
- button
+ button
\inlineimage designer-reload-resources-button.png
.
\endtable
Once a resource file is loaded, you can create or remove entries in it
- using the given \gui{Add Files}
- \inlineimage designer-add-resource-entry-button.png
- and \gui{Remove Files}
+ using the given \gui{Add Files}
+ \inlineimage designer-add-resource-entry-button.png
+ and \gui{Remove Files}
\inlineimage designer-remove-resource-entry-button.png
buttons, and specify resources (e.g., images) using the \gui{Add Files}
- button
+ button
\inlineimage designer-add-files-button.png
. Note that these resources must reside within the current resource file's
directory or one of its subdirectories.
@@ -1738,15 +1738,15 @@
\i \inlineimage designer-edit-resource.png
\i \bold{Editing Resource Files}
- Press the
+ Press the
\inlineimage designer-add-resource-entry-button.png
button to add a new resource entry to the file. Then use the
- \gui{Add Files} button
+ \gui{Add Files} button
\inlineimage designer-add-files-button.png
to specify the resource.
You can remove resources by selecting the corresponding entry in the
- resource editor, and pressing the
+ resource editor, and pressing the
\inlineimage designer-remove-resource-entry-button.png
button.
\endtable
@@ -2554,7 +2554,7 @@ pixmap property in the property editor.
QDesignerTaskMenuExtension is useful for custom widgets. It provides an
extension that allows you to add custom menu entries to \QD's task
menu.
-
+
The \l{designer/taskmenuextension}{Task Menu Extension} example
illustrates how to use this class.
@@ -2655,7 +2655,7 @@ pixmap property in the property editor.
function, making it able to create your extension, such as a
\l{designer/containerextension}{MultiPageWidget} container extension.
- You can either create a new QExtensionFactory and reimplement the
+ You can either create a new QExtensionFactory and reimplement the
QExtensionFactory::createExtension() function:
\snippet doc/src/snippets/code/doc_src_designer-manual.qdoc 8
--
cgit v0.12
From 2c8348f5ccf62be31479dcd78282395a98eed76f Mon Sep 17 00:00:00 2001
From: Olivier Goffart
Date: Tue, 26 May 2009 14:13:21 +0200
Subject: BT: opening datetimepicker in a cell in spreadsheet demo resets the
date
That was a bug in the exemple.
Reviewed-by: Kavindra Palaraja
---
demos/spreadsheet/spreadsheetdelegate.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/demos/spreadsheet/spreadsheetdelegate.cpp b/demos/spreadsheet/spreadsheetdelegate.cpp
index 465c92f..2916757 100644
--- a/demos/spreadsheet/spreadsheetdelegate.cpp
+++ b/demos/spreadsheet/spreadsheetdelegate.cpp
@@ -51,7 +51,7 @@ QWidget *SpreadSheetDelegate::createEditor(QWidget *parent,
{
if (index.column() == 1) {
QDateTimeEdit *editor = new QDateTimeEdit(parent);
- editor->setDisplayFormat("dd/M/yyy");
+ editor->setDisplayFormat("dd/M/yyyy");
editor->setCalendarPopup(true);
return editor;
}
@@ -93,7 +93,7 @@ void SpreadSheetDelegate::setEditorData(QWidget *editor,
if (dateEditor) {
dateEditor->setDate(QDate::fromString(
index.model()->data(index, Qt::EditRole).toString(),
- "d/M/yy"));
+ "d/M/yyyy"));
}
}
}
@@ -107,7 +107,7 @@ void SpreadSheetDelegate::setModelData(QWidget *editor,
} else {
QDateTimeEdit *dateEditor = qobject_cast(editor);
if (dateEditor) {
- model->setData(index, dateEditor->date().toString("dd/M/yyy"));
+ model->setData(index, dateEditor->date().toString("dd/M/yyyy"));
}
}
}
--
cgit v0.12
From 1536b02ed1633555e306bec02398a2a7c1bdabf7 Mon Sep 17 00:00:00 2001
From: Olivier Goffart
Date: Tue, 26 May 2009 14:19:27 +0200
Subject: Test for QDate::fromDate with string format.
Note that two digit years are always in the year 19xx
This is excepted for compatibility reason as discussed with Peter
---
tests/auto/qdate/tst_qdate.cpp | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/tests/auto/qdate/tst_qdate.cpp b/tests/auto/qdate/tst_qdate.cpp
index d4273d0..4d6c80c 100644
--- a/tests/auto/qdate/tst_qdate.cpp
+++ b/tests/auto/qdate/tst_qdate.cpp
@@ -82,6 +82,8 @@ private slots:
void operator_gt_eq();
void fromString_data();
void fromString();
+ void fromString_format_data();
+ void fromString_format();
void toString_format_data();
void toString_format();
void isLeapYear();
@@ -618,6 +620,30 @@ void tst_QDate::fromString()
QCOMPARE( QDate::fromString( str2, Qt::ISODate ), d1 );
}
+void tst_QDate::fromString_format_data()
+{
+ QTest::addColumn("string");
+ QTest::addColumn("format");
+ QTest::addColumn("date");
+
+ //year with yy is always 19xx for compatibility
+ QTest::newRow( "data0" ) << QString("21052006") << QString("ddMMyyyy") << QDate(2006,5,21);
+ QTest::newRow( "data1" ) << QString("210506") << QString("ddMMyy") << QDate(1906,5,21);
+ QTest::newRow( "data2" ) << QString("21/5/2006") << QString("d/M/yyyy") << QDate(2006,5,21);
+ QTest::newRow( "data3" ) << QString("21/5/06") << QString("d/M/yy") << QDate(1906,5,21);
+ QTest::newRow( "data4" ) << QString("20060521") << QString("yyyyMMdd") << QDate(2006,5,21);
+ QTest::newRow( "data5" ) << QString("060521") << QString("yyMMdd") << QDate(1906,5,21);
+}
+
+void tst_QDate::fromString_format()
+{
+ QFETCH( QString, string );
+ QFETCH( QString, format );
+ QFETCH( QDate, date );
+
+ QCOMPARE( QDate::fromString( string, format ), date );
+}
+
void tst_QDate::toString_format_data()
{
QTest::addColumn("t");
--
cgit v0.12
From 8a2ca9b0d8ed23cec44e40f61c0f4983fbc55282 Mon Sep 17 00:00:00 2001
From: Morten Engvoldsen
Date: Tue, 26 May 2009 14:06:56 +0200
Subject: Correcting bugs in classic.css
Correcting invalid padding values. none is not a valid padding value.
Rev-by: David Boddie
---
tools/qdoc3/test/classic.css | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/qdoc3/test/classic.css b/tools/qdoc3/test/classic.css
index 6cf7377..f22a77a 100644
--- a/tools/qdoc3/test/classic.css
+++ b/tools/qdoc3/test/classic.css
@@ -77,10 +77,10 @@ table.annotated td {
table tr pre
{
- padding-top: none;
- padding-bottom: none;
- padding-left: none;
- padding-right: none;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: 0px;
+ padding-right: 0px;
border: none;
background: none
}
--
cgit v0.12
From 871b730da203cef773e159960532888522f16a0b Mon Sep 17 00:00:00 2001
From: Trond Kjernaasen
Date: Tue, 26 May 2009 14:20:34 +0200
Subject: BT: Fixed GL textdrawing in the Boxes demo.
Reworked the 85f98acaa3a38079071bea711e43c9a86edec1f6 fix, since
it broke glyph positioning in the GL engine under Windows.
Instead of changing the glyph cache margin, which impacts where
the glyph is positioned, we just make the image the glyph is drawn
into 4 pixels bigger in width/heigth.
The margin in QImageTextureGlyphCache needs to be reworked..
Task-number: 254450
Reviewed-by: Eskil
---
src/gui/painting/qtextureglyphcache.cpp | 8 ++++++--
src/gui/text/qfontengine_win.cpp | 6 +++---
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 3fd1ffb..89df869 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -92,8 +92,8 @@ void QTextureGlyphCache::populate(const QTextItemInt &ti,
int glyph_height = metrics.height.ceil().toInt();
if (glyph_height == 0 || glyph_width == 0)
continue;
- glyph_width += margin * 2 + 2;
- glyph_height += margin * 2 + 2;
+ glyph_width += margin * 2 + 4;
+ glyph_height += margin * 2 + 4;
// align to 8-bit boundary
if (m_type == QFontEngineGlyphCache::Raster_Mono)
glyph_width = (glyph_width+7)&~7;
@@ -189,7 +189,11 @@ void QImageTextureGlyphCache::createTextureData(int width, int height)
int QImageTextureGlyphCache::glyphMargin() const
{
+#ifdef Q_WS_MAC
return 2;
+#else
+ return m_type == QFontEngineGlyphCache::Raster_RGBMask ? 2 : 0;
+#endif
}
void QImageTextureGlyphCache::fillTexture(const Coord &c, glyph_t g)
diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp
index bf3a176..7341665 100644
--- a/src/gui/text/qfontengine_win.cpp
+++ b/src/gui/text/qfontengine_win.cpp
@@ -1406,8 +1406,8 @@ QNativeImage *QFontEngineWin::drawGDIGlyph(HFONT font, glyph_t glyph, int margin
#endif
#endif
- QNativeImage *ni = new QNativeImage(iw + 2 * margin + 2,
- ih + 2 * margin + 2,
+ QNativeImage *ni = new QNativeImage(iw + 2 * margin + 4,
+ ih + 2 * margin + 4,
QNativeImage::systemFormat(), true);
ni->image.fill(0xffffffff);
@@ -1449,7 +1449,7 @@ QImage QFontEngineWin::alphaMapForGlyph(glyph_t glyph, const QTransform &xform)
font = CreateFontIndirectW(&lf);
}
- QNativeImage *mask = drawGDIGlyph(font, glyph, 2, xform);
+ QNativeImage *mask = drawGDIGlyph(font, glyph, 0, xform);
if (mask == 0)
return QImage();
--
cgit v0.12
From c17f27a9a14c353c6149f2c15f6a0ff6afe3dedd Mon Sep 17 00:00:00 2001
From: Markus Goetz
Date: Tue, 26 May 2009 13:22:00 +0200
Subject: SSL: Remove broken system certificate loading code
Task-number: 254365
Reviewed-by: Peter Hartmann
---
src/network/ssl/qsslsocket_openssl.cpp | 25 +------------------------
1 file changed, 1 insertion(+), 24 deletions(-)
diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
index 6f8cf42..cb101af 100644
--- a/src/network/ssl/qsslsocket_openssl.cpp
+++ b/src/network/ssl/qsslsocket_openssl.cpp
@@ -482,30 +482,7 @@ void QSslSocketPrivate::resetDefaultCiphers()
QList QSslSocketPrivate::systemCaCertificates()
{
-#ifdef QQ_OS_UNIX
- // Check known locations for the system's default bundle. ### On Windows,
- // we should use CAPI to find the bundle, and not rely on default unix
- // locations.
- const char *standardLocations[] = {"/etc/ssl/certs/",
-#if 0
- // KDE uses KConfig for its SSL store,
- // but it also stores the bundle at
- // this location
- "$HOME/.kde/share/apps/kssl/ca-bundle.crt",
-#endif
- 0};
- const char **it = standardLocations;
- QStringList nameFilter;
- nameFilter << QLatin1String("*.pem") << QLatin1String("*.crt");
- while (*it) {
- if (QDirIterator(QLatin1String(*it), nameFilter).hasNext())
- return certificatesFromPath(QLatin1String(*it));
- ++it;
- }
-#endif
-
- // Qt provides a default bundle when we cannot detect the system's default
- // bundle.
+ // Qt provides a default bundle of certificates
QFile caBundle(QLatin1String(":/trolltech/network/ssl/qt-ca-bundle.crt"));
if (caBundle.open(QIODevice::ReadOnly | QIODevice::Text))
return QSslCertificate::fromDevice(&caBundle);
--
cgit v0.12
From a670315152bf0914b8661b584d20752fd4da5b95 Mon Sep 17 00:00:00 2001
From: Martin Smith
Date: Tue, 26 May 2009 14:40:40 +0200
Subject: A GLint is converted to int for passing to qBound().
---
src/opengl/qglframebufferobject.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index 2b7ad4f..338ce1f 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -395,7 +395,7 @@ void QGLFramebufferObjectPrivate::init(const QSize &sz, QGLFramebufferObject::At
GLint maxSamples;
glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples);
- samples = qBound(1, samples, int(maxSamples));
+ samples = qBound(1, int(samples), int(maxSamples));
glGenRenderbuffers(1, &color_buffer);
glBindRenderbuffer(GL_RENDERBUFFER_EXT, color_buffer);
--
cgit v0.12
From 7c383fc79510276439deeb706d48ad5543fb54e7 Mon Sep 17 00:00:00 2001
From: Jens Bache-Wiig
Date: Tue, 26 May 2009 14:46:15 +0200
Subject: Fix a painting issue in the QGtkStyle statusbar
We should use the "statusbar" string when we draw the sizegrip.
Since gtkstatusbar is the only gtk widget using the paint_resize_grip
and it uses the "statusbar" string itself it should be safe to
assume this.
Task-number: 254535
Reviewed-by: rosch
---
src/gui/styles/qgtkstyle.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp
index 86653df..14be518 100644
--- a/src/gui/styles/qgtkstyle.cpp
+++ b/src/gui/styles/qgtkstyle.cpp
@@ -2344,7 +2344,7 @@ void QGtkStyle::drawControl(ControlElement element,
case CE_SizeGrip: {
GtkWidget *gtkStatusbar = QGtk::gtkWidget(QLS("GtkStatusbar.GtkFrame"));
QRect gripRect = option->rect.adjusted(0, 0, -gtkStatusbar->style->xthickness, -gtkStatusbar->style->ythickness);
- gtkPainter.paintResizeGrip( gtkStatusbar, "window", gripRect, GTK_STATE_NORMAL,
+ gtkPainter.paintResizeGrip( gtkStatusbar, "statusbar", gripRect, GTK_STATE_NORMAL,
GTK_SHADOW_OUT, QApplication::isRightToLeft() ?
GDK_WINDOW_EDGE_SOUTH_WEST : GDK_WINDOW_EDGE_SOUTH_EAST,
gtkStatusbar->style);
--
cgit v0.12
From 0ae04e9d7872d170974d15e8fbae8da1949c94df Mon Sep 17 00:00:00 2001
From: Richard Moe Gustavsen
Date: Tue, 26 May 2009 15:33:47 +0200
Subject: Mac: Prefix sat in qt.conf is ignored on Mac
Fix: Make sure to add the prefix to the value we return in QLibraryInfo
Task-number: 254545
Reviewed-by: Trenton Schulz
---
src/corelib/global/qlibraryinfo.cpp | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 29e356e..7f6ff20 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -434,14 +434,14 @@ QLibraryInfo::location(LibraryLocation loc)
#else
if (QCoreApplication::instance()) {
#ifdef Q_OS_MAC
- CFBundleRef bundleRef = CFBundleGetMainBundle();
- if (bundleRef) {
- QCFType urlRef = CFBundleCopyBundleURL(bundleRef);
- if (urlRef) {
- QCFString path = CFURLCopyFileSystemPath(urlRef, kCFURLPOSIXPathStyle);
- return QDir::cleanPath(path + QLatin1String("/Contents"));
- }
- }
+ CFBundleRef bundleRef = CFBundleGetMainBundle();
+ if (bundleRef) {
+ QCFType urlRef = CFBundleCopyBundleURL(bundleRef);
+ if (urlRef) {
+ QCFString path = CFURLCopyFileSystemPath(urlRef, kCFURLPOSIXPathStyle);
+ return QDir::cleanPath(path + QLatin1String("/Contents/") + ret);
+ }
+ }
#endif
return QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(ret);
} else {
--
cgit v0.12
From 1164e61393349fc3d6bf06d0789fa6ea2cfb5909 Mon Sep 17 00:00:00 2001
From: Kavindra Devi Palaraja
Date: Tue, 26 May 2009 15:37:45 +0200
Subject: Doc - more images and additional description
---
doc/src/designer-manual.qdoc | 24 +++++++++++----------
.../images/rgbController-configure-connection1.png | Bin 0 -> 29210 bytes
.../images/rgbController-configure-connection2.png | Bin 0 -> 28655 bytes
doc/src/images/rgbController-property-editing.png | Bin 0 -> 9158 bytes
doc/src/images/rgbController-screenshot.png | Bin 0 -> 8995 bytes
doc/src/images/rgbController-signalsAndSlots.png | Bin 0 -> 10050 bytes
6 files changed, 13 insertions(+), 11 deletions(-)
create mode 100644 doc/src/images/rgbController-configure-connection1.png
create mode 100644 doc/src/images/rgbController-configure-connection2.png
create mode 100644 doc/src/images/rgbController-property-editing.png
create mode 100644 doc/src/images/rgbController-screenshot.png
create mode 100644 doc/src/images/rgbController-signalsAndSlots.png
diff --git a/doc/src/designer-manual.qdoc b/doc/src/designer-manual.qdoc
index 9c13d79..58d0f71 100644
--- a/doc/src/designer-manual.qdoc
+++ b/doc/src/designer-manual.qdoc
@@ -478,11 +478,12 @@
accordingly.
When you click on the slider and drag it to a certain value, you want the
- spin box to display the slider's position. To do this, you need to connect
- the slider's \l{QAbstractSlider::}{valueChanged()} signal to the spin box's
- \l{QSpinBox::}{setValue()} slot. You also need to make the reverse
- connections, e.g., connect the spin box's \l{QSpinBox::}{valueChanged()}
- signal to the slider's \l{QAbstractSlider::value()}{setValue()} slot.
+ spin box to display the slider's position. To accomplish this behavior, you
+ need to connect the slider's \l{QAbstractSlider::}{valueChanged()} signal
+ to the spin box's \l{QSpinBox::}{setValue()} slot. You also need to make
+ the reverse connections, e.g., connect the spin box's \l{QSpinBox::}
+ {valueChanged()} signal to the slider's \l{QAbstractSlider::value()}
+ {setValue()} slot.
To do this, you have to switch to \gui{Edit Signals/Slots} mode, either by
pressing \key{F4} or something \gui{Edit Signals/Slots} from the \gui{Edit}
@@ -498,13 +499,18 @@
correct signal and slot and click \gui OK.
\endtable
- \image rgbController-configureConnection.png
+ \image rgbController-configureConnection1.png
Repeat the step (in reverse order), clicking on the spin box and dragging
the cursor towards the slider, to connect the spin box's
\l{QSpinBox::}{valueChanged()} signal to the slider's
\l{QAbstractSlider::value()}{setValue()} slot.
+ You can use the screenshot below as a guide to selecting the correct signal
+ and slot.
+
+ \image rgbController-configure-connection2.png
+
Now that you have successfully connected the objects for the "RED"
component of the RGB Controller, do the same for the "GREEN" and "BLUE"
components as well.
@@ -512,7 +518,6 @@
Since RGB values range between 0 and 255, we need to limit the spin box
and slider to that particular range.
- \omit
\table
\row
\i \inlineimage rgbController-property-editing.png
@@ -523,17 +528,14 @@
\l{QSpinBox::}{maximum} property. Then, click on the first vertical
slider, you will see \l{QAbstractSlider}'s properties. Enter "255" for
the \l{QAbstractSlider::}{maximum} property as well. Repeat this
- process for the remaining spin boxes and sliders.
+ process for the remaining spin boxes and sliders.
\endtable
- \endomit
Now, we preview your form to see how it would look in your application. To
preview your form, press \key{Ctrl + R} or select \gui Preview from the
\gui Form menu.
- \omit
\image rgbController-preview.png
- \endomit
Try dragging the slider - the spin box will mirror its value too (and vice
versa). Also, you can resize it to see how the layouts used to manage the
diff --git a/doc/src/images/rgbController-configure-connection1.png b/doc/src/images/rgbController-configure-connection1.png
new file mode 100644
index 0000000..0798184
Binary files /dev/null and b/doc/src/images/rgbController-configure-connection1.png differ
diff --git a/doc/src/images/rgbController-configure-connection2.png b/doc/src/images/rgbController-configure-connection2.png
new file mode 100644
index 0000000..f3fcc62
Binary files /dev/null and b/doc/src/images/rgbController-configure-connection2.png differ
diff --git a/doc/src/images/rgbController-property-editing.png b/doc/src/images/rgbController-property-editing.png
new file mode 100644
index 0000000..64fc500
Binary files /dev/null and b/doc/src/images/rgbController-property-editing.png differ
diff --git a/doc/src/images/rgbController-screenshot.png b/doc/src/images/rgbController-screenshot.png
new file mode 100644
index 0000000..6019233
Binary files /dev/null and b/doc/src/images/rgbController-screenshot.png differ
diff --git a/doc/src/images/rgbController-signalsAndSlots.png b/doc/src/images/rgbController-signalsAndSlots.png
new file mode 100644
index 0000000..2ba3aba
Binary files /dev/null and b/doc/src/images/rgbController-signalsAndSlots.png differ
--
cgit v0.12
From a088a3e5698881b0466cd072380fc7347ea68fba Mon Sep 17 00:00:00 2001
From: kh
Date: Tue, 26 May 2009 15:53:52 +0200
Subject: Fix broken search inside search results.
Reviewed-by: kh
---
tools/assistant/tools/assistant/centralwidget.cpp | 131 ++++++++++------------
tools/assistant/tools/assistant/centralwidget.h | 5 +-
2 files changed, 66 insertions(+), 70 deletions(-)
diff --git a/tools/assistant/tools/assistant/centralwidget.cpp b/tools/assistant/tools/assistant/centralwidget.cpp
index b78f346..98245c0 100644
--- a/tools/assistant/tools/assistant/centralwidget.cpp
+++ b/tools/assistant/tools/assistant/centralwidget.cpp
@@ -848,60 +848,64 @@ void CentralWidget::keyPressEvent(QKeyEvent *e)
QWidget::keyPressEvent(e);
}
-void CentralWidget::find(QString ttf, bool forward, bool backward)
+void CentralWidget::find(const QString &ttf, bool forward, bool backward)
{
- QTextCursor cursor;
- QTextDocument *doc = 0;
- QTextBrowser *browser = 0;
-
- HelpViewer *viewer = currentHelpViewer();
QPalette p = findWidget->editFind->palette();
p.setColor(QPalette::Active, QPalette::Base, Qt::white);
-#if !defined(QT_NO_WEBKIT)
- Q_UNUSED(forward)
- Q_UNUSED(doc)
- Q_UNUSED(browser)
-
- if (viewer) {
- QWebPage::FindFlags options;
- if (backward)
- options |= QWebPage::FindBackward;
+ if (!ttf.isEmpty()) {
+ HelpViewer *viewer = currentHelpViewer();
- if (findWidget->checkCase->isChecked())
- options |= QWebPage::FindCaseSensitively;
+ bool found = false;
+#if !defined(QT_NO_WEBKIT)
+ if (viewer) {
+ QWebPage::FindFlags options;
+ if (backward)
+ options |= QWebPage::FindBackward;
- bool found = viewer->findText(ttf, options);
- findWidget->labelWrapped->hide();
+ if (findWidget->checkCase->isChecked())
+ options |= QWebPage::FindCaseSensitively;
- if (!found) {
- options |= QWebPage::FindWrapsAroundDocument;
found = viewer->findText(ttf, options);
+ findWidget->labelWrapped->hide();
if (!found) {
- p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102));
- } else {
- findWidget->labelWrapped->show();
+ options |= QWebPage::FindWrapsAroundDocument;
+ found = viewer->findText(ttf, options);
+ if (found)
+ findWidget->labelWrapped->show();
}
+ } else if (tabWidget->currentWidget() == m_searchWidget) {
+ QTextBrowser *browser = qFindChild(m_searchWidget);
+ found = findInTextBrowser(browser, ttf, forward, backward);
}
- }
#else
- if (viewer) {
- doc = viewer->document();
- cursor = viewer->textCursor();
- browser = qobject_cast(viewer);
- }
+ QTextBrowser *browser = qobject_cast(viewer);
+ if (tabWidget->currentWidget() == m_searchWidget)
+ browser = qFindChild(m_searchWidget);
+ found = findInTextBrowser(browser, ttf, forward, backward);
+#endif
- if (tabWidget->currentWidget() == m_searchWidget) {
- QTextBrowser *browser = qFindChild(m_searchWidget);
- if (browser) {
- doc = browser->document();
- cursor = browser->textCursor();
- }
+ if (!found)
+ p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102));
}
- if (!browser || !doc || cursor.isNull())
- return;
+ if (!findWidget->isVisible())
+ findWidget->show();
+ findWidget->editFind->setPalette(p);
+}
+
+bool CentralWidget::findInTextBrowser(QTextBrowser* browser, const QString &ttf,
+ bool forward, bool backward)
+{
+ if (!browser)
+ return false;
+
+ QTextDocument *doc = browser->document();
+ QTextCursor cursor = browser->textCursor();
+
+ if (!doc || cursor.isNull())
+ return false;
QTextDocument::FindFlags options;
@@ -910,44 +914,33 @@ void CentralWidget::find(QString ttf, bool forward, bool backward)
QTextCursor::MoveAnchor);
}
- QTextCursor newCursor = cursor;
+ if (backward)
+ options |= QTextDocument::FindBackward;
- if (!ttf.isEmpty()) {
- if (backward)
- options |= QTextDocument::FindBackward;
-
- if (findWidget->checkCase->isChecked())
- options |= QTextDocument::FindCaseSensitively;
+ if (findWidget->checkCase->isChecked())
+ options |= QTextDocument::FindCaseSensitively;
- if (findWidget->checkWholeWords->isChecked())
- options |= QTextDocument::FindWholeWords;
+ if (findWidget->checkWholeWords->isChecked())
+ options |= QTextDocument::FindWholeWords;
- newCursor = doc->find(ttf, cursor, options);
- findWidget->labelWrapped->hide();
+ findWidget->labelWrapped->hide();
+ bool found = true;
+ QTextCursor newCursor = doc->find(ttf, cursor, options);
+ if (newCursor.isNull()) {
+ QTextCursor ac(doc);
+ ac.movePosition(options & QTextDocument::FindBackward
+ ? QTextCursor::End : QTextCursor::Start);
+ newCursor = doc->find(ttf, ac, options);
if (newCursor.isNull()) {
- QTextCursor ac(doc);
- ac.movePosition(options & QTextDocument::FindBackward
- ? QTextCursor::End : QTextCursor::Start);
- newCursor = doc->find(ttf, ac, options);
- if (newCursor.isNull()) {
- p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102));
- newCursor = cursor;
- } else {
- findWidget->labelWrapped->show();
- }
+ found = false;
+ newCursor = cursor;
+ } else {
+ findWidget->labelWrapped->show();
}
}
-#endif
-
- if (!findWidget->isVisible())
- findWidget->show();
-
-#if defined(QT_NO_WEBKIT)
- if (browser)
- browser->setTextCursor(newCursor);
-#endif
- findWidget->editFind->setPalette(p);
+ browser->setTextCursor(newCursor);
+ return found;
}
void CentralWidget::updateBrowserFont()
diff --git a/tools/assistant/tools/assistant/centralwidget.h b/tools/assistant/tools/assistant/centralwidget.h
index e3ce200..1342a75 100644
--- a/tools/assistant/tools/assistant/centralwidget.h
+++ b/tools/assistant/tools/assistant/centralwidget.h
@@ -55,6 +55,7 @@ class QLabel;
class QAction;
class QCheckBox;
class QLineEdit;
+class QTextBrowser;
class QToolButton;
class HelpViewer;
@@ -176,7 +177,9 @@ private slots:
private:
void connectSignals();
bool eventFilter(QObject *object, QEvent *e);
- void find(QString ttf, bool forward, bool backward);
+ void find(const QString &ttf, bool forward, bool backward);
+ bool findInTextBrowser(QTextBrowser* browser, const QString &ttf,
+ bool forward, bool backward);
void initPrinter();
QString quoteTabTitle(const QString &title) const;
void highlightSearchTerms();
--
cgit v0.12
From b03f598df2aa4037815eab9249ba1213236216c5 Mon Sep 17 00:00:00 2001
From: kh
Date: Tue, 26 May 2009 15:57:45 +0200
Subject: Workaround the palette issue, set it only when we search is open.
---
tools/assistant/tools/assistant/centralwidget.cpp | 35 +++++++++++++++++++++--
tools/assistant/tools/assistant/centralwidget.h | 5 ++++
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/tools/assistant/tools/assistant/centralwidget.cpp b/tools/assistant/tools/assistant/centralwidget.cpp
index 98245c0..52d48d5 100644
--- a/tools/assistant/tools/assistant/centralwidget.cpp
+++ b/tools/assistant/tools/assistant/centralwidget.cpp
@@ -87,6 +87,7 @@ namespace {
FindWidget::FindWidget(QWidget *parent)
: QWidget(parent)
+ , appPalette(qApp->palette())
{
QHBoxLayout *hboxLayout = new QHBoxLayout(this);
QString resourcePath = QLatin1String(":/trolltech/assistant/images/");
@@ -148,6 +149,34 @@ FindWidget::~FindWidget()
{
}
+void FindWidget::hideEvent(QHideEvent* event)
+{
+#if !defined(QT_NO_WEBKIT)
+ // TODO: remove this once webkit supports setting the palette
+ if (!event->spontaneous())
+ qApp->setPalette(appPalette);
+#else
+ Q_UNUSED(event);
+#endif
+}
+
+void FindWidget::showEvent(QShowEvent* event)
+{
+#if !defined(QT_NO_WEBKIT)
+ // TODO: remove this once webkit supports setting the palette
+ if (!event->spontaneous()) {
+ QPalette p = appPalette;
+ p.setColor(QPalette::Inactive, QPalette::Highlight,
+ p.color(QPalette::Active, QPalette::Highlight));
+ p.setColor(QPalette::Inactive, QPalette::HighlightedText,
+ p.color(QPalette::Active, QPalette::HighlightedText));
+ qApp->setPalette(p);
+ }
+#else
+ Q_UNUSED(event);
+#endif
+}
+
void FindWidget::updateButtons()
{
if (editFind->text().isEmpty()) {
@@ -245,12 +274,14 @@ CentralWidget::CentralWidget(QHelpEngine *engine, MainWindow *parent)
SLOT(showTabBarContextMenu(QPoint)));
}
- QPalette p = qApp->palette();
+#if defined(QT_NO_WEBKIT)
+ QPalette p = palette();
p.setColor(QPalette::Inactive, QPalette::Highlight,
p.color(QPalette::Active, QPalette::Highlight));
p.setColor(QPalette::Inactive, QPalette::HighlightedText,
p.color(QPalette::Active, QPalette::HighlightedText));
- qApp->setPalette(p);
+ setPalette(p);
+#endif
}
CentralWidget::~CentralWidget()
diff --git a/tools/assistant/tools/assistant/centralwidget.h b/tools/assistant/tools/assistant/centralwidget.h
index 1342a75..d59dbe5 100644
--- a/tools/assistant/tools/assistant/centralwidget.h
+++ b/tools/assistant/tools/assistant/centralwidget.h
@@ -80,6 +80,10 @@ signals:
void findNext();
void findPrevious();
+protected:
+ void hideEvent(QHideEvent* event);
+ void showEvent(QShowEvent * event);
+
private slots:
void updateButtons();
@@ -95,6 +99,7 @@ private:
QToolButton *toolPrevious;
QCheckBox *checkWholeWords;
+ QPalette appPalette;
friend class CentralWidget;
};
--
cgit v0.12
From f61056a556259c12a6de23f12756e45737345111 Mon Sep 17 00:00:00 2001
From: David Boddie
Date: Tue, 26 May 2009 16:08:59 +0200
Subject: Doc: Updated the list of tools to include makeqpf and qvfb.
Reviewed-by: Marcel Schuette
---
doc/src/emb-fonts.qdoc | 2 +-
doc/src/emb-makeqpf.qdoc | 9 ++++++---
doc/src/tools-list.qdoc | 6 ++----
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/doc/src/emb-fonts.qdoc b/doc/src/emb-fonts.qdoc
index 3ed23c3..86e169d 100644
--- a/doc/src/emb-fonts.qdoc
+++ b/doc/src/emb-fonts.qdoc
@@ -131,7 +131,7 @@
The Qt Prerendered Font (QPF2) is an architecture-independent,
light-weight and non-scalable font format specific to \l{Qt for Embedded Linux}.
- Nokia provides the cross-platform \c makeqpf tool, included in the
+ Nokia provides the cross-platform \l makeqpf tool, included in the
\c tools directory of both \l {Qt} and \l{Qt for Embedded Linux}, which allows
generation of QPF2 files from system fonts.
diff --git a/doc/src/emb-makeqpf.qdoc b/doc/src/emb-makeqpf.qdoc
index ca33eda..8f5d10b 100644
--- a/doc/src/emb-makeqpf.qdoc
+++ b/doc/src/emb-makeqpf.qdoc
@@ -44,7 +44,10 @@
\title makeqpf
\ingroup qt-embedded-linux
- \c makeqpf is not part of Qt 4. However, Qt 4 can still read QPF
- files generated by Qt 2 or 3. To generate QPF files, use makeqpf from Qt 2
- or 3.
+ \c makeqpf is a tool to generate pre-rendered fonts in QPF2 format for use on Embedded Linux.
+
+ Qt 4 can read files in QPF2 format in addition to QPF files generated by older versions of
+ \c makeqpf from Qt 2 or 3.
+
+ \sa {Qt for Embedded Linux Fonts}
*/
diff --git a/doc/src/tools-list.qdoc b/doc/src/tools-list.qdoc
index 7af9936..caef268 100644
--- a/doc/src/tools-list.qdoc
+++ b/doc/src/tools-list.qdoc
@@ -58,12 +58,10 @@
\o Translate applications to reach international markets.
\row \o \l{qmake Manual}{qmake}
\o Create makefiles from simple platform-independent project files (\c .pro files).
- \omit
- \row \o \l{emb-qvfb.html}{qvfb}
+ \row \o \l{The Virtual Framebuffer}{qvfb}
\o Run and test embedded applications on the desktop.
- \row \o \l{emb-makeqpf.html}{makeqpf}
+ \row \o \l{makeqpf}
\o Create pre-rendered fonts for embedded devices.
- \endomit
\row \o \l{moc}{Meta-Object Compiler (moc)}
\o Generate meta-object information for QObject subclasses.
\row \o \l{User Interface Compiler (uic)}
--
cgit v0.12
From bcd23411c8e22e15b863212a544bd64b78fe04b9 Mon Sep 17 00:00:00 2001
From: Thierry Bastian
Date: Tue, 26 May 2009 17:13:57 +0200
Subject: some cleanups on private exported symbols
---
src/gui/accessible/qaccessiblewidget.cpp | 19 +------------------
src/gui/image/qpixmapdatafactory_p.h | 2 +-
src/gui/kernel/qapplication_win.cpp | 2 +-
src/gui/kernel/qdnd_p.h | 2 +-
src/gui/kernel/qkeysequence.cpp | 2 +-
src/gui/painting/qgraphicssystemfactory_p.h | 2 +-
src/gui/painting/qgraphicssystemplugin_p.h | 2 +-
src/gui/text/qfontengine.cpp | 6 ------
src/gui/text/qfontengine_p.h | 6 ++++--
src/gui/text/qtextcontrol_p.h | 2 +-
src/gui/text/qtextimagehandler_p.h | 4 ++--
src/opengl/qpaintengine_opengl.cpp | 1 -
src/qt3support/other/q3dragobject.cpp | 5 -----
13 files changed, 14 insertions(+), 41 deletions(-)
diff --git a/src/gui/accessible/qaccessiblewidget.cpp b/src/gui/accessible/qaccessiblewidget.cpp
index 753ac57..1c2fcef 100644
--- a/src/gui/accessible/qaccessiblewidget.cpp
+++ b/src/gui/accessible/qaccessiblewidget.cpp
@@ -102,24 +102,7 @@ static QString buddyString(const QWidget *widget)
QString Q_GUI_EXPORT qt_accStripAmp(const QString &text)
{
- if (text.isEmpty())
- return text;
-
- const QChar *ch = text.unicode();
- int length = text.length();
- QString str;
- while (length > 0) {
- if (*ch == QLatin1Char('&')) {
- ++ch;
- --length;
- if (!ch)
- --ch;
- }
- str += *ch;
- ++ch;
- --length;
- }
- return str;
+ return QString(text).remove(QLatin1Char('&'));
}
QString Q_GUI_EXPORT qt_accHotKey(const QString &text)
diff --git a/src/gui/image/qpixmapdatafactory_p.h b/src/gui/image/qpixmapdatafactory_p.h
index 65e3f11..9604346 100644
--- a/src/gui/image/qpixmapdatafactory_p.h
+++ b/src/gui/image/qpixmapdatafactory_p.h
@@ -65,7 +65,7 @@ QT_MODULE(Gui)
class QPixmapData;
-class Q_GUI_EXPORT QPixmapDataFactory
+class QPixmapDataFactory
{
public:
static QPixmapDataFactory* instance(int screen = 0);
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 77625de..f264d12 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -1106,7 +1106,7 @@ void qWinRequestConfig(WId id, int req, int x, int y, int w, int h)
configRequests->append(r); // store request in queue
}
-Q_GUI_EXPORT void qWinProcessConfigRequests() // perform requests in queue
+static void qWinProcessConfigRequests() // perform requests in queue
{
if (!configRequests)
return;
diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h
index 7a0cb7a..9871658 100644
--- a/src/gui/kernel/qdnd_p.h
+++ b/src/gui/kernel/qdnd_p.h
@@ -202,7 +202,7 @@ public:
#endif
};
-class Q_GUI_EXPORT QDragManager: public QObject {
+class QDragManager: public QObject {
Q_OBJECT
QDragManager();
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index d1cb572..21f8859 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -145,7 +145,7 @@ static int qtkeyForMacSymbol(const QChar ch)
#else
static bool qt_sequence_no_mnemonics = false;
#endif
-void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemonics = !b; }
+void Q_AUTOTEST_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemonics = !b; }
/*!
\class QKeySequence
diff --git a/src/gui/painting/qgraphicssystemfactory_p.h b/src/gui/painting/qgraphicssystemfactory_p.h
index 9e95324..523b908 100644
--- a/src/gui/painting/qgraphicssystemfactory_p.h
+++ b/src/gui/painting/qgraphicssystemfactory_p.h
@@ -63,7 +63,7 @@ QT_MODULE(Gui)
class QGraphicsSystem;
-class Q_GUI_EXPORT QGraphicsSystemFactory
+class QGraphicsSystemFactory
{
public:
static QStringList keys();
diff --git a/src/gui/painting/qgraphicssystemplugin_p.h b/src/gui/painting/qgraphicssystemplugin_p.h
index 2e70333..ea7aa2d 100644
--- a/src/gui/painting/qgraphicssystemplugin_p.h
+++ b/src/gui/painting/qgraphicssystemplugin_p.h
@@ -64,7 +64,7 @@ QT_MODULE(Gui)
class QGraphicsSystem;
-struct Q_GUI_EXPORT QGraphicsSystemFactoryInterface : public QFactoryInterface
+struct QGraphicsSystemFactoryInterface : public QFactoryInterface
{
virtual QGraphicsSystem *create(const QString &key) = 0;
};
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index 97cb1ed..6e8adcf 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -1646,12 +1646,6 @@ bool QFontEngineMulti::canRender(const QChar *string, int len)
return allExist;
}
-QFontEngine *QFontEngineMulti::engine(int at) const
-{
- Q_ASSERT(at < engines.size());
- return engines.at(at);
-}
-
QImage QFontEngineMulti::alphaMapForGlyph(glyph_t)
{
Q_ASSERT(false);
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 92efb6c..0f8d81c 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -353,7 +353,7 @@ private:
int _size;
};
-class Q_GUI_EXPORT QFontEngineMulti : public QFontEngine
+class QFontEngineMulti : public QFontEngine
{
public:
explicit QFontEngineMulti(int engineCount);
@@ -389,7 +389,9 @@ public:
inline virtual const char *name() const
{ return "Multi"; }
- QFontEngine *engine(int at) const;
+ QFontEngine *engine(int at) const
+ {Q_ASSERT(at < engines.size()); return engines.at(at); }
+
protected:
friend class QPSPrintEnginePrivate;
diff --git a/src/gui/text/qtextcontrol_p.h b/src/gui/text/qtextcontrol_p.h
index e50540a..4dac4f7 100644
--- a/src/gui/text/qtextcontrol_p.h
+++ b/src/gui/text/qtextcontrol_p.h
@@ -83,7 +83,7 @@ class QAbstractScrollArea;
class QEvent;
class QTimerEvent;
-class Q_GUI_EXPORT QTextControl : public QObject
+class Q_AUTOTEST_EXPORT QTextControl : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QTextControl)
diff --git a/src/gui/text/qtextimagehandler_p.h b/src/gui/text/qtextimagehandler_p.h
index f5426b5..1f29642 100644
--- a/src/gui/text/qtextimagehandler_p.h
+++ b/src/gui/text/qtextimagehandler_p.h
@@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE
class QTextImageFormat;
-class Q_GUI_EXPORT QTextImageHandler : public QObject,
+class QTextImageHandler : public QObject,
public QTextObjectInterface
{
Q_OBJECT
@@ -72,7 +72,7 @@ public:
virtual void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format);
typedef QImage (*ExternalImageLoaderFunction)(const QString &name, const QString &context);
- static ExternalImageLoaderFunction externalLoader;
+ static Q_GUI_EXPORT ExternalImageLoaderFunction externalLoader; //this is needed by Qt3Support
};
QT_END_NAMESPACE
diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp
index 6f7078a..d98cd7c 100644
--- a/src/opengl/qpaintengine_opengl.cpp
+++ b/src/opengl/qpaintengine_opengl.cpp
@@ -39,7 +39,6 @@
**
****************************************************************************/
-#include
#include
#include
#include
diff --git a/src/qt3support/other/q3dragobject.cpp b/src/qt3support/other/q3dragobject.cpp
index fb57220..50b75a4 100644
--- a/src/qt3support/other/q3dragobject.cpp
+++ b/src/qt3support/other/q3dragobject.cpp
@@ -208,11 +208,6 @@ void Q3DragObject::setPixmap(QPixmap pm, const QPoint& hotspot)
Q_D(Q3DragObject);
d->pixmap = pm;
d->hot = hotspot;
-#if 0
- QDragManager *manager = QDragManager::self();
- if (manager && manager->object == d->data)
- manager->updatePixmap();
-#endif
}
/*!
--
cgit v0.12
From 702a50367b13a137a9a87b499e4ab397be61383a Mon Sep 17 00:00:00 2001
From: Thierry Bastian
Date: Tue, 26 May 2009 16:26:33 +0200
Subject: doc update
no more warnings while generating the docs
---
src/gui/graphicsview/qgraphicsitem.cpp | 176 ++++++++++++++++++++++++-------
src/gui/graphicsview/qgraphicswidget.cpp | 50 ++++++++-
2 files changed, 186 insertions(+), 40 deletions(-)
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 0398fac..58b01cb 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -130,7 +130,7 @@
\img graphicsview-parentchild.png
- \section Transformation
+ \section1 Transformation
QGraphicsItem supports affine transformations in addition to its base
position, pos(). To change the item's transformation, you can either pass
@@ -166,7 +166,7 @@
.shear(horizontalShear, verticalShear).scale(xScale, yScale).translate(-xOrigin, -yOrigin);
\endcode
- \section Painting
+ \section1 Painting
The paint() function is called by QGraphicsView to paint the item's
contents. The item has no background or default fill of its own; whatever
@@ -183,7 +183,7 @@
high z-values. Stacking order applies to sibling items; parents are always
drawn before their children.
- \section Events
+ \section1 Events
QGraphicsItem receives events from QGraphicsScene through the virtual
function sceneEvent(). This function distributes the most common events
@@ -210,7 +210,7 @@
by the virtual function sceneEventFilter(). You can remove item
event filters by calling removeSceneEventFilter().
- \section Custom Data
+ \section1 Custom Data
Sometimes it's useful to register custom data with an item, be it a custom
item, or a standard item. You can call setData() on any item to store data
@@ -2614,24 +2614,32 @@ QTransform QGraphicsItem::transform() const
}
/*!
- \property QGraphicsItem::xRotation
-
\since 4.6
- This property holds the rotation angle in degrees around the X axis
+ Returns the rotation around the X axis.
The default is 0
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setXRotation(), {Transformations}
*/
qreal QGraphicsItem::xRotation() const
{
return d_ptr->decomposedTransform()->xRotation;
}
+/*!
+ \since 4.6
+
+ Sets the rotation around the X axis to \a angle degrees.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa xRotation(), {Transformations}
+*/
void QGraphicsItem::setXRotation(qreal angle)
{
if (!d_ptr->dirtyTransform) {
@@ -2647,24 +2655,32 @@ void QGraphicsItem::setXRotation(qreal angle)
}
/*!
- \property QGraphicsItem::yRotation
-
\since 4.6
- This property holds the rotation angle in degrees around the Y axis
+ Returns the rotation around the Y axis.
The default is 0
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setYRotation(), {Transformations}
*/
qreal QGraphicsItem::yRotation() const
{
return d_ptr->decomposedTransform()->yRotation;
}
+/*!
+ \since 4.6
+
+ Sets the rotation around the Y axis to \a angle degrees.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa yRotation(), {Transformations}
+*/
void QGraphicsItem::setYRotation(qreal angle)
{
if (!d_ptr->dirtyTransform) {
@@ -2680,24 +2696,32 @@ void QGraphicsItem::setYRotation(qreal angle)
}
/*!
- \property QGraphicsItem::zRotation
-
\since 4.6
- This property holds the rotation angle in degrees around the Z axis
+ Returns the rotation around the Z axis.
The default is 0
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setZRotation(), {Transformations}
*/
qreal QGraphicsItem::zRotation() const
{
return d_ptr->decomposedTransform()->zRotation;
}
+/*!
+ \since 4.6
+
+ Sets the rotation around the Z axis to \a angle degrees.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa zRotation(), {Transformations}
+*/
void QGraphicsItem::setZRotation(qreal angle)
{
if (!d_ptr->dirtyTransform) {
@@ -2712,6 +2736,14 @@ void QGraphicsItem::setZRotation(qreal angle)
d_ptr->hasTransform = 1;
}
+/*!
+ \since 4.6
+
+ This convenience function set the rotation angles around the 3 axes
+ to \a x, \a y and \a z.
+
+ \sa setXRotation(), setYRotation(), setZRotation()
+*/
void QGraphicsItem::setRotation(qreal x, qreal y, qreal z)
{
setXRotation(x);
@@ -2720,24 +2752,32 @@ void QGraphicsItem::setRotation(qreal x, qreal y, qreal z)
}
/*!
- \property QGraphicsItem::xScale
-
\since 4.6
- This property holds the scale factor on the X axis.
+ Returns the scale factor on the X axis.
The default is 1
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setXScale(), {Transformations}
*/
qreal QGraphicsItem::xScale() const
{
return d_ptr->decomposedTransform()->xScale;
}
+/*!
+ \since 4.6
+
+ Sets the scale factor on the X axis to \a factor.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa xScale(), {Transformations}
+*/
void QGraphicsItem::setXScale(qreal factor)
{
if (!d_ptr->dirtyTransform) {
@@ -2753,24 +2793,32 @@ void QGraphicsItem::setXScale(qreal factor)
}
/*!
- \property QGraphicsItem::yScale
-
\since 4.6
- This property holds the scale factor on the Y axis.
+ Returns the scale factor on the Y axis.
The default is 1
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setYScale(), {Transformations}
*/
qreal QGraphicsItem::yScale() const
{
return d_ptr->decomposedTransform()->yScale;
}
+/*!
+ \since 4.6
+
+ Sets the scale factor on the Y axis to \a factor.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa yScale(), {Transformations}
+*/
void QGraphicsItem::setYScale(qreal factor)
{
if (!d_ptr->dirtyTransform) {
@@ -2785,6 +2833,13 @@ void QGraphicsItem::setYScale(qreal factor)
d_ptr->hasTransform = 1;
}
+/*!
+ \since 4.6
+
+ This convenience function set the scaling factors on X and Y axis to \a sx and \a sy.
+
+ \sa setXScale(), setYScale()
+*/
void QGraphicsItem::setScale(qreal sx, qreal sy)
{
setXScale(sx);
@@ -2792,24 +2847,32 @@ void QGraphicsItem::setScale(qreal sx, qreal sy)
}
/*!
- \property QGraphicsItem::horizontalShear
-
\since 4.6
- This property holds the horizontal shear.
+ Returns the horizontal shear.
- The default is 0.
+ The default is 0
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setHorizontalShear(), {Transformations}
*/
qreal QGraphicsItem::horizontalShear() const
{
return d_ptr->decomposedTransform()->horizontalShear;
}
+/*!
+ \since 4.6
+
+ Sets the horizontal shear to \a shear.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa horizontalShear(), {Transformations}
+*/
void QGraphicsItem::setHorizontalShear(qreal shear)
{
if (!d_ptr->dirtyTransform) {
@@ -2825,24 +2888,32 @@ void QGraphicsItem::setHorizontalShear(qreal shear)
}
/*!
- \property QGraphicsItem::verticalShear
-
\since 4.6
- This property holds the vertical shear.
+ Returns the vertical shear.
- The default is 0.
+ The default is 0
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setHorizontalShear(), {Transformations}
*/
qreal QGraphicsItem::verticalShear() const
{
return d_ptr->decomposedTransform()->verticalShear;
}
+/*!
+ \since 4.6
+
+ Sets the vertical shear to \a shear.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa verticalShear(), {Transformations}
+*/
void QGraphicsItem::setVerticalShear(qreal shear)
{
if (!d_ptr->dirtyTransform) {
@@ -2857,6 +2928,13 @@ void QGraphicsItem::setVerticalShear(qreal shear)
d_ptr->hasTransform = 1;
}
+/*!
+ \since 4.6
+
+ This convenience function sets the horizontal shear to \a sh and the vertical shear to \a sv.
+
+ \sa setHorizontalShear(), setVerticalShear()
+*/
void QGraphicsItem::setShear(qreal sh, qreal sv)
{
setHorizontalShear(sh);
@@ -2864,19 +2942,16 @@ void QGraphicsItem::setShear(qreal sh, qreal sv)
}
/*!
- \property QGraphicsItem::transformOrigin
-
\since 4.6
- This property holds the transformation origin for the transformation properties.
- This does not apply to the transformation set by setTransform.
+ Returns the transformation origin for the transformation properties.
The default is QPointF(0,0).
\warning setting this property is conflicting with calling setTransform.
If a transform has been set, this function return the default value.
- \sa {Transformations}
+ \sa setTransformOrigin(), {Transformations}
*/
QPointF QGraphicsItem::transformOrigin() const
{
@@ -2884,6 +2959,29 @@ QPointF QGraphicsItem::transformOrigin() const
return QPointF(decomposed->xOrigin, decomposed->yOrigin);
}
+/*!
+ \fn inline void setTransformOrigin(qreal x, qreal y)
+
+ \since 4.6
+
+ This is an overloaded member function, provided for convenience.
+ Sets the transformation origin for the transformation
+ properties to the point(\a x, \a y).
+
+ \sa setTransformOrigin(), {Transformations}
+*/
+
+/*!
+ \since 4.6
+
+ Sets the transformation origin for the transformation properties to \a origin.
+ This does not apply to the transformation set by setTransform.
+
+ \warning setting this property is conflicting with calling setTransform.
+ If a transform has been set, it will be overwritten.
+
+ \sa transformOrigin(), {Transformations}
+*/
void QGraphicsItem::setTransformOrigin(const QPointF &origin)
{
if (!d_ptr->dirtyTransform) {
diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index a2e55e1..341f9a2 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -200,7 +200,55 @@ QT_BEGIN_NAMESPACE
/*!
\property QGraphicsWidget::pos
\brief the position of the widget
-*/
+*/
+
+/*!
+ \property QGraphicsWidget::xRotation
+ \since 4.6
+ \brief the rotation angle in degrees around the X axis
+*/
+
+/*!
+ \property QGraphicsWidget::yRotation
+ \since 4.6
+ \brief the rotation angle in degrees around the Y axis
+*/
+
+/*!
+ \property QGraphicsWidget::zRotation
+ \since 4.6
+ \brief the rotation angle in degrees around the Z axis
+*/
+
+/*!
+ \property QGraphicsWidget::xScale
+ \since 4.6
+ \brief the scale factor on the X axis.
+*/
+
+/*!
+ \property QGraphicsWidget::yScale
+ \since 4.6
+ \brief the scale factor on the Y axis.
+*/
+
+/*!
+ \property QGraphicsWidget::horizontalShear
+ \since 4.6
+ \brief the horizontal shear.
+*/
+
+/*!
+ \property QGraphicsWidget::verticalShear
+ \since 4.6
+ \brief the vertical shear.
+*/
+
+/*!
+ \property QGraphicsWidget::transformOrigin
+ \since 4.6
+ \brief the transformation origin for the transformation properties.
+*/
/*!
Constructs a QGraphicsWidget instance. The optional \a parent argument is
--
cgit v0.12
From 8bf5a6986db852525582713cc2f2a760df4fdc60 Mon Sep 17 00:00:00 2001
From: Alexis Menard
Date: Tue, 26 May 2009 16:50:48 +0200
Subject: QFileDialog selection bug when calling it multiple times.
The problem was that we don't clear the selection model if the previous
selection was valid.
Task-number:251341
Reviewed-by:jasplin
---
src/gui/dialogs/qfiledialog.cpp | 11 +++++-----
tests/auto/qfiledialog/tst_qfiledialog.cpp | 33 ++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp
index eeb2743..d42775a 100644
--- a/src/gui/dialogs/qfiledialog.cpp
+++ b/src/gui/dialogs/qfiledialog.cpp
@@ -776,6 +776,7 @@ void QFileDialog::selectFile(const QString &filename)
}
QModelIndex index = d->model->index(filename);
+ QString file;
if (!index.isValid()) {
// save as dialog where we want to input a default value
QString text = filename;
@@ -790,13 +791,13 @@ void QFileDialog::selectFile(const QString &filename)
)
text = text.remove(0,1);
}
- if (!isVisible() || !d->lineEdit()->hasFocus())
- d->lineEdit()->setText(text);
+ file = text;
} else {
- d->qFileDialogUi->listView->selectionModel()->clear();
- if (!isVisible() || !d->lineEdit()->hasFocus())
- d->lineEdit()->setText(index.data().toString());
+ file = index.data().toString();
}
+ d->qFileDialogUi->listView->selectionModel()->clear();
+ if (!isVisible() || !d->lineEdit()->hasFocus())
+ d->lineEdit()->setText(file);
}
/**
diff --git a/tests/auto/qfiledialog/tst_qfiledialog.cpp b/tests/auto/qfiledialog/tst_qfiledialog.cpp
index 689f73d..16c84d8 100644
--- a/tests/auto/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/qfiledialog/tst_qfiledialog.cpp
@@ -159,6 +159,7 @@ private slots:
void task218353_relativePaths();
void task251321_sideBarHiddenEntries();
void task251341_sideBarRemoveEntries();
+ void task254490_selectFileMultipleTimes();
private:
QByteArray userSettings;
@@ -1981,5 +1982,37 @@ void tst_QFiledialog::task251341_sideBarRemoveEntries()
current.rmdir("testDir");
}
+void tst_QFiledialog::task254490_selectFileMultipleTimes()
+{
+ QString tempPath = QDir::tempPath();
+ QTemporaryFile *t;
+ t = new QTemporaryFile;
+ t->open();
+ QNonNativeFileDialog fd(0, "TestFileDialog");
+
+ fd.setDirectory(tempPath);
+ fd.setViewMode(QFileDialog::List);
+ fd.setAcceptMode(QFileDialog::AcceptSave);
+ fd.setFileMode(QFileDialog::AnyFile);
+
+ //This should select the file in the QFileDialog
+ fd.selectFile(t->fileName());
+
+ //This should clear the selection and write it into the filename line edit
+ fd.selectFile("new_file.txt");
+
+ fd.show();
+ QTest::qWait(250);
+
+ QLineEdit *lineEdit = qFindChild(&fd, "fileNameEdit");
+ QVERIFY(lineEdit);
+ QCOMPARE(lineEdit->text(),QLatin1String("new_file.txt"));
+ QListView *list = qFindChild(&fd, "listView");
+ QVERIFY(list);
+ QCOMPARE(list->selectionModel()->selectedRows(0).count(), 0);
+
+ t->deleteLater();
+}
+
QTEST_MAIN(tst_QFiledialog)
#include "tst_qfiledialog.moc"
--
cgit v0.12
From 639557d7e2df5fc1b3ffdc76188b3084c13a8fc3 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint
Date: Tue, 26 May 2009 17:23:22 +0200
Subject: Fixed crash when encountering invalid forms.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Crash when replacing the QDockWidget contents
widget by a widget using a container extension.
Task-number: 254553
---
tools/designer/src/components/formeditor/formwindow.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tools/designer/src/components/formeditor/formwindow.cpp b/tools/designer/src/components/formeditor/formwindow.cpp
index 07d785a..66bab9b 100644
--- a/tools/designer/src/components/formeditor/formwindow.cpp
+++ b/tools/designer/src/components/formeditor/formwindow.cpp
@@ -2136,7 +2136,10 @@ void FormWindow::layoutContainer(QWidget *w, int type)
bool FormWindow::hasInsertedChildren(QWidget *widget) const // ### move
{
if (QDesignerContainerExtension *container = qt_extension(core()->extensionManager(), widget)) {
- widget = container->widget(container->currentIndex());
+ const int index = container->currentIndex();
+ if (index < 0)
+ return false;
+ widget = container->widget(index);
}
const QWidgetList l = widgets(widget);
--
cgit v0.12
From cfe54548131d78db9d58366e35e9b29e5d3ba238 Mon Sep 17 00:00:00 2001
From: Thomas Sondergaard
Date: Fri, 22 May 2009 20:26:46 +0200
Subject: Updated danish translations. Added them to relevant project files.
---
tools/assistant/translations/qt_help.pro | 3 +-
tools/assistant/translations/translations.pro | 3 +-
translations/assistant_da.ts | 606 ++++----
translations/qt_da.ts | 1978 +++++++++++++++++++++----
translations/qt_help_da.ts | 177 ++-
translations/translations.pri | 2 +-
6 files changed, 2132 insertions(+), 637 deletions(-)
diff --git a/tools/assistant/translations/qt_help.pro b/tools/assistant/translations/qt_help.pro
index efad6bf..e6208a6 100644
--- a/tools/assistant/translations/qt_help.pro
+++ b/tools/assistant/translations/qt_help.pro
@@ -44,5 +44,6 @@ TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/qt_help_de.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_pl.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_untranslated.ts \
$$[QT_INSTALL_TRANSLATIONS]/qt_help_zh_CN.ts \
- $$[QT_INSTALL_TRANSLATIONS]/qt_help_zh_TW.ts
+ $$[QT_INSTALL_TRANSLATIONS]/qt_help_zh_TW.ts \
+ $$[QT_INSTALL_TRANSLATIONS]/qt_help_da.ts
error("This is a dummy profile to be used for translations ONLY.")
diff --git a/tools/assistant/translations/translations.pro b/tools/assistant/translations/translations.pro
index 58de554..8572123 100644
--- a/tools/assistant/translations/translations.pro
+++ b/tools/assistant/translations/translations.pro
@@ -45,4 +45,5 @@ TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/assistant_de.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_pl.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_untranslated.ts \
$$[QT_INSTALL_TRANSLATIONS]/assistant_zh_CN.ts \
- $$[QT_INSTALL_TRANSLATIONS]/assistant_zh_TW.ts
+ $$[QT_INSTALL_TRANSLATIONS]/assistant_zh_TW.ts \
+ $$[QT_INSTALL_TRANSLATIONS]/assistant_da.ts
diff --git a/translations/assistant_da.ts b/translations/assistant_da.ts
index d039248..8d134fc 100644
--- a/translations/assistant_da.ts
+++ b/translations/assistant_da.ts
@@ -1,58 +1,77 @@
-
AboutDialog
-
+
&Close
&Luk
+ AboutLabel
+
+
+ Warning
+ Advarsel
+
+
+
+ Unable to launch external application.
+
+ Kunne ikke starte ekstern applikation.
+
+
+
+
+ OK
+
+
+
+
BookmarkDialog
-
-
-
-
-
+
+
+
+
+
Bookmarks
Favoritter
-
+
Add Bookmark
Føj til Favoritter
-
+
Bookmark:
Favorit:
-
+
Add in Folder:
Føj til mappen:
-
+
+
-
+
New Folder
Ny mappe
-
+
Delete Folder
Slet mappe
-
+
Rename Folder
Omdøb mappe
@@ -60,75 +79,79 @@
BookmarkManager
-
+
Bookmarks
Favoritter
-
+
Remove
Fjern
+
You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue?
- Ved at slette denne mappe fjernes hele mappens<br>indhold. Ønsker du alligevel at slette?
+ Ved at slette denne mappe fjernes hele mappens<br>indhold. Ønsker du alligevel at slette?
-
-
+
+
New Folder
Ny mappe
-
You are about to delete a folder which means that its content<br>will also be removed. Do you want to continue?
- Ved at slette denne mappe fjernes hele mappens indhold.<br>Ønsker du alligevel at slette?
+ Ved at slette denne mappe fjernes hele mappens indhold.<br>Ønsker du alligevel at slette?
BookmarkWidget
-
+
+ Filter:
+ Filter:
+
+
+
Remove
Fjern
-
+
Delete Folder
Slet mappe
-
+
Rename Folder
Omdøb mappe
-
+
Show Bookmark
Vis favorit
-
+
Show Bookmark in New Tab
Vis favorit på ny fane
-
+
Delete Bookmark
Slet favorit
-
+
Rename Bookmark
Omdøb favorit
-
Search for:
- Søg efter:
+ Søg efter:
-
+
Add
Tilføj
@@ -136,48 +159,48 @@
CentralWidget
-
+
Add new page
Tilføj ny side
-
+
Close current page
Luk nuværende side
-
+
Print Document
Udskriv dokument
-
-
+
+
unknown
ukendt
-
+
Add New Page
Tilføj ny side
-
+
Close This Page
Luk denne side
-
+
Close Other Pages
Luk de andre sider
-
+
Add Bookmark for this Page...
Føj denne side til Favoritter...
-
+
Search
Søg
@@ -185,12 +208,12 @@
ContentWindow
-
+
Open Link
Åbn link
-
+
Open Link in New Tab
Åbn link på ny fane
@@ -198,69 +221,77 @@
FilterNameDialogClass
-
FilterNameDialog
- FilterNavnDialog
+ FilterNavnDialog
-
+
Filter Name:
Filternavn:
+
+
+ Add Filter Name
+ Tilføj filternavn
+
FindWidget
-
+
+ <img src=":/trolltech/assistant/images/wrap.png"> Search wrapped
+ <img src=":/trolltech/assistant/images/wrap.png"> Søgning gentaget fra start
+
+
+
Previous
Forrige
-
+
Next
Næste
-
+
Case Sensitive
Der skelnes mellem store og små bogstaver
-
+
Whole words
Hele ord
-
<img src="%1"> Search wrapped
<img src=":/trolltech/assistant/images/wrap.png"> Search wrapped
- <img src="%1"> Søgning startet forfra
+ <img src="%1"> Søgning startet forfra
FontPanel
-
+
Font
Skrifttype
-
+
&Writing system
&Skrivesystem
-
+
&Family
&Familie
-
+
&Style
&Stil
-
+
&Point size
&Punktstørrelse
@@ -268,42 +299,41 @@
HelpViewer
-
+
Help
Hjælp
-
+
OK
-
+
<title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div>
<title>Fejl 404...</title><div align="center"><br><br><h1>Siden blev ikke fundet</h1><br><h3>'%1'</h3></div>
-
+
Copy &Link Location
Kopiér &linkets placering
-
+
Open Link in New Tab Ctrl+LMB
Åbn link på ny fane Ctrl+LMB
-
+
Open Link in New Tab
Åbn link på ny fane
-
<b>Page not found:<p>%1.</p></b>
- <b>Kunne ikke finde siden:<p>%1.</p></b>
+ <b>Kunne ikke finde siden:<p>%1.</p></b>
-
+
Unable to launch external application.
Kunne ikke starte ekstern applikation.
@@ -313,17 +343,17 @@
IndexWindow
-
+
&Look for:
&Søg efter:
-
+
Open Link
Åbn link
-
+
Open Link in New Tab
Åbn link på ny fane
@@ -331,99 +361,99 @@
InstallDialog
-
-
+
+
Install Documentation
Installér dokumentation
-
+
Downloading documentation info...
Downloader dokumentationsinformation...
-
+
Download canceled.
Download blev annulleret.
-
-
-
+
+
+
Done.
Færdig.
-
+
The file %1 already exists. Do you want to overwrite it?
Filen %1 findes allerede. Ønsker du at overskrive?
-
+
Unable to save the file %1: %2.
Kunne ikke gemme filen %1: %2.
-
+
Downloading %1...
Downloader %1...
-
-
-
+
+
+
Download failed: %1.
Download mislykkedes: %1.
-
+
Documentation info file is corrupt!
Dokumentationsinformationsfilen er ødelagt!
-
+
Download failed: Downloaded file is corrupted.
Download mislykkedes: Den downloadede fil er ødelagt.
-
+
Installing documentation %1...
Installerer dokumentation %1...
-
+
Error while installing documentation:
%1
Der opstod fejl under installation af dokumentation:
%1
-
+
Available Documentation:
Tilgængeligt dokumentation:
-
+
Install
Installér
-
+
Cancel
Annuller
-
+
Close
Luk
-
+
Installation Path:
Installationssti:
-
+
...
@@ -431,60 +461,62 @@
MainWindow
-
-
+
+
Index
Indeks
-
-
+
+
Contents
Indhold
-
-
+
+
Bookmarks
Favoritter
-
-
+
Search
Søg
-
-
-
+
+
+
Qt Assistant
-
-
+
+
Unfiltered
Ufiltreret
+
Page Set&up...
- Side&opsætning...
+ Side&opsætning...
+
Print Preview...
- Vis udskrift...
+ Vis udskrift...
+
&Print...
- &Udskriv...
+ &Udskriv...
CTRL+P
Ctrl+U
-
+
New &Tab
&Ny Fane
@@ -493,7 +525,7 @@
Ctrl+N
-
+
&Close Tab
&Luk fane
@@ -502,340 +534,326 @@
Ctrl+L
-
+
&Quit
&Afslut
+
CTRL+Q
- Ctrl+A
+ Ctrl+A
+
&Copy selected Text
- &Kopiér markeret tekst
+ &Kopiér markeret tekst
Ctrl+C
Ctrl+K
-
+
&Find in Text...
&Find i tekst...
-
- Ctrl+F
-
-
-
-
+
Find &Next
Find N&æste
-
- F3
-
-
-
-
+
Find &Previous
Find fo&rrige
-
- Shift+F3
-
-
-
-
+
Preferences...
Indstillinger...
-
+
Zoom &in
Zoom &ind
-
- Ctrl++
-
-
-
-
+
Zoom &out
Zoom u&d
-
- Ctrl+-
-
-
-
-
+
Normal &Size
Normal &størrelse
-
+
Ctrl+0
-
+
+ ALT+C
+
+
+
+
+ ALT+I
+
+
+
+
+ ALT+S
+
+
+
+
&Home
&Hjem
-
+
Ctrl+Home
-
+
&Back
&Tilbage
-
+
&Forward
Fr&em
+
Sync with Table of Contents
- Synkronisér med Indholdsfortegnelse
+ Synkronisér med Indholdsfortegnelse
-
+
Next Page
Næste side
-
+
Ctrl+Alt+Right
Ctrl+Alt+Højre
-
+
Previous Page
Forrige side
-
+
Ctrl+Alt+Left
Ctrl+Alt+Venstre
-
+
Add Bookmark...
Føj til Favoritter...
-
+
About...
Om...
-
+
Navigation Toolbar
Navigationsværktøjslinie
-
+
Toolbars
Værktøjslinier
-
+
Filter Toolbar
Filtrer værktøjslinie
-
+
Filtered by:
Filtreret efter:
-
+
Address Toolbar
Adresseværktøjslinie
-
+
Address:
Adresse:
-
+
Could not find the associated content item.
Det tilhørende indholdselement kunne ikke findes.
-
- Open Source Edition
-
-
-
-
This version of Qt Assistant is part of the Qt Open Source Edition, for use in the development of Open Source applications. Qt is a comprehensive C++ framework for cross-platform application development.
- Denne version af Qt Assistant er en del af Qt Open Source Edition til brug med henblik på udvikling af Open Source-applikationer. Qt er et omfattende C++ framework for cross-platform applikationsudvikling.
+ Denne version af Qt Assistant er en del af Qt Open Source Edition til brug med henblik på udvikling af Open Source-applikationer. Qt er et omfattende C++ framework for cross-platform applikationsudvikling.
-
This program is licensed to you under the terms of the Qt Commercial License Agreement. For details, see the file LICENSE that came with this software distribution.
- Dette program er omfattet af Qt Commercial License Agreement. Se filen LICENCE, der var vedlagt denne software-distribution, for yderligere detaljer.
+ Dette program er omfattet af Qt Commercial License Agreement. Se filen LICENCE, der var vedlagt denne software-distribution, for yderligere detaljer.
-
+
About %1
Om %1
-
+
Updating search index
Opdaterer søgeindeks
-
+
Looking for Qt Documentation...
Søger efter Qt-dokumentation...
-
+
&Window
&Vindue
-
+
Minimize
Minimér
-
+
Ctrl+M
Ctrl+M
-
+
Zoom
-
+
&File
&Filer
-
+
&Edit
&Redigér
-
+
&View
&Vis
-
+
&Go
&Gå til
-
+
&Bookmarks
F&avoritter
-
+
&Help
&Hjælp
-
- You need a commercial Qt license for development of proprietary (closed source) applications. Please see <a href="http://trolltech.com/company/about/businessmodel">http://trolltech.com/company/about/businessmodel</a> for an overview of Qt licensing.
-
-
-
+
ALT+O
- Alt+F
+ Alt+F
+
CTRL+D
- Ctrl+Ø
+ Ctrl+Ø
Ctrl+P
Ctrl+U
-
Ctrl+T
- Ctrl+N
+ Ctrl+N
-
Ctrl+W
- Ctrl+L
+ Ctrl+L
-
Ctrl+Q
- Ctrl+A
+ Ctrl+A
-
Alt+C
- Alt+L
-
-
-
- Alt+I
-
+ Alt+L
-
Alt+O
- Alt+F
-
-
-
- Alt+S
-
+ Alt+F
-
Ctrl+D
- Ctrl+Ø
+ Ctrl+Ø
PreferencesDialog
-
-
-
+
+
Add Documentation
Tilføj dokumentation
-
+
Qt Compressed Help Files (*.qch)
Qt komprimeret hjælpefil (*.qch)
-
+
The specified file is not a valid Qt Help File!
Den anførte fil er ikke en gyldig Qt hjælpefil!
-
+
The namespace %1 is already registered!
Navnerummet %1 er allerede registreret!
-
+
+ Remove Documentation
+ Fjern dokumentation
+
+
+
+ Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.
+ Nogle dokumenter der pt er åbne i Assistant refererer til den dokumentation du prøver at fjerne. Fjernelse af dokumentation vil resultere i lukning af disse dokumenter.
+
+
+
+ Cancel
+ Annuller
+
+
+
+ OK
+
+
+
+
Use custom settings
Benyt brugerdefineret opsætning
@@ -843,158 +861,170 @@
PreferencesDialogClass
-
+
Preferences
Indstillinger
-
+
Fonts
Skrifttyper
-
+
Font settings:
Indstillinger for skrifttype:
-
+
Browser
-
+
Application
Applikation
-
+
Filters
Filtre
-
+
Filter:
Filter:
-
+
Attributes:
Attributter:
-
+
1
-
+
Add
Tilføj
-
-
+
Remove
Fjern
-
+
Documentation
Dokumentation
-
+
Registered Documentation:
Registreret dokumentation:
-
+
Add...
Tilføj...
-
Network
- Netværk
+ Netværk
-
Use Http Proxy
- Benyt Http Proxy
+ Benyt Http Proxy
-
- Http Proxy:
-
+
+ Options
+ Indstillinger
-
- Port:
-
+
+ Homepage
+ Hjemmeside
+
+
+
+ Current Page
+ Nuværende side
+
+
+
+ Restore to default
+ Nulstil til default
QObject
-
+
The specified collection file does not exist!
Den angivne hjælpesamling findes ikke!
-
+
Missing collection file!
Hjælpesamling mangler!
-
+
Invalid URL!
Ugyldig URL!
-
+
Missing URL!
URL mangler!
-
-
-
+
+
+
Unknown widget: %1
Ukendt widget: %1
-
-
-
+
+
+
Missing widget!
Widget mangler!
-
-
+
+
The specified Qt help file does not exist!
Den angivne Qt-hjælpefil findes ikke!
-
-
+
+
Missing help file!
Hjælpefilen mangler!
-
+
+ Missing filter argument!
+ Manglende filterargument!
+
+
+
Unknown option: %1
Ukendt parameter: %1
-
-
+
+
Qt Assistant
-
+
Could not register documentation file
%1
@@ -1007,12 +1037,12 @@ Reason:
%2
-
+
Documentation successfully registered.
Dokumentationen blev registreret.
-
+
Could not unregister documentation file
%1
@@ -1025,18 +1055,23 @@ Reason:
%2
-
+
Documentation successfully unregistered.
Dokumentationen blev afregistreret.
-
+
+ Cannot load sqlite database driver!
+ Kan ikke indlæse sqlite database-driver!
+
+
+
The specified collection file could not be read!
Den angivne hjælpesamling kunne ikke læses!
-
-
+
+
Bookmark
Favorit
@@ -1044,11 +1079,10 @@ Reason:
QtDocInstaller
-
The file %1 could not be registered successfully!
Reason: %2
- Filen %1 kunne ikke registreres!
+ Filen %1 kunne ikke registreres!
Årsag: %2
@@ -1056,12 +1090,12 @@ Reason: %2
RemoteControl
-
+
Debugging Remote Control
-
+
Received Command: %1 %2
Modtaget kommando: %1 %2
@@ -1069,56 +1103,54 @@ Reason: %2
SearchWidget
-
+
&Copy
&Kopiér
-
+
Copy &Link Location
Kopiér &linkets placering
-
-
+
Open Link in New Tab
Åbn link på ny fane
-
+
Select All
Markér alt
-
Open Link
- Åbn link
+ Åbn link
TopicChooser
-
+
Choose a topic for <b>%1</b>:
Vælg et emne for <b>%1</b>:
-
+
Choose Topic
Vælg emne
-
+
&Topics
&Emner
-
+
&Display
&Vis
-
+
&Close
&Luk
diff --git a/translations/qt_da.ts b/translations/qt_da.ts
index 9350687..105b572 100644
--- a/translations/qt_da.ts
+++ b/translations/qt_da.ts
@@ -4,15 +4,17 @@
AudioOutput
-
+
<html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html>
<html>Audio-playback-enheden<b>%1</b> virker ikke.<br/>Falder tilbage til <b>%2</b>.</html>
+
<html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html>
- <html>Skifter til audio-playback-enheden, <b>%1</b><br/>der lige er blevet tilgængeligt og har en højere præference.</html>
+ <html>Skifter til audio-playback-enheden, <b>%1</b><br/>der lige er blevet tilgængelig og har en højere præference.</html>
+
Revert back to device '%1'
Gå tilbage til enheden '%1'
@@ -20,7 +22,7 @@
CloseButton
-
+
Close Tab
Luk fane
@@ -28,27 +30,32 @@
Phonon::
-
+
Notifications
Meddelelser
+
Music
Musik
+
Video
+
Communication
Kommunikation
+
Games
Spil
+
Accessibility
Tilgængelighed
@@ -56,13 +63,14 @@
Phonon::Gstreamer::Backend
-
+
Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
Some video features have been disabled.
Advarsel: Det ser ikke ud til, at gstreamer0.10-plugins-good pakken er installeret.
Nogle videofunktioner er deaktiveret.
+
Warning: You do not seem to have the base GStreamer plugins installed.
All audio and video support has been disabled
Advarsel: Det ser ikke ud til, at base GStreamer plugins er installeret.
@@ -72,7 +80,7 @@
Phonon::Gstreamer::MediaObject
-
+
Cannot start playback.
Check your Gstreamer installation and make sure you
@@ -83,26 +91,39 @@ Tjek Gstreamer-installationen og kontrollér, at
libgstreamer-plugins-base er installeret.
+
A required codec is missing. You need to install the following codec(s) to play this content: %0
Der mangler et codec. Følgende codecs skal installeres for at afspille dette indhold: %0
+
+
+
+
+
+
+
+
Could not open media source.
Kunne ikke åbne mediekilden.
+
Invalid source type.
Ugyldig kilde.
+
Could not locate media source.
Kunne ikke lokalisere mediekilden.
+
Could not open audio device. The device is already in use.
Kunne ikke åbne lydenheden. Enheden er allerede i brug.
+
Could not decode media source.
Kunne ikke afkode mediekilden.
@@ -110,10 +131,15 @@ libgstreamer-plugins-base er installeret.
Phonon::VolumeSlider
+
+
Volume: %1%
+
+
+
Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%
Anvend denne skyder til at indstille lydstyrken. Længst til venstre er 0% og længst til højre er %1%
@@ -121,11 +147,12 @@ libgstreamer-plugins-base er installeret.
Q3Accel
-
+
%1, %2 not defined
%1, %2 ikke definerede
+
Ambiguous %1 not handled
Tvetydig %1 ikke behandlet
@@ -133,23 +160,27 @@ libgstreamer-plugins-base er installeret.
Q3DataTable
-
+
True
Sandt
+
False
Falsk
+
Insert
Indsæt
+
Update
Opdater
+
Delete
Slet
@@ -157,242 +188,313 @@ libgstreamer-plugins-base er installeret.
Q3FileDialog
-
+
Copy or Move a File
Kopiér eller flyt en fil
+
Read: %1
Læs: %1
+
+
Write: %1
Skriv: %1
+
+
Cancel
Annuller
-
+
+
+
+
All Files (*)
Alle filer (*)
+
Name
Navn
+
Size
Størrelse
+
Type
+
Date
Dato
+
Attributes
Attributter
+
+
&OK
&OK
+
Look &in:
Kig &i:
+
+
+
File &name:
Fil&navn:
+
File &type:
Fil&type:
+
Back
Tilbage
+
One directory up
En mappe op
+
Create New Folder
Opret ny folder
+
List View
Listevisning
+
Detail View
Detaljevisning
+
Preview File Info
Vis filinformation
+
Preview File Contents
Vis filindhold
+
Read-write
Læs-skriv
+
Read-only
Skrivebeskyttet
+
Write-only
Write-only
+
Inaccessible
Utilgængelig
+
Symlink to File
Symlink til Fil
+
Symlink to Directory
Symlink til katalog
+
Symlink to Special
Symlink til Speciel
+
File
Fil
+
Dir
Katalog
+
Special
Speciel
-
+
+
+
Open
Åbn
-
+
+
Save As
Gem som
+
+
+
&Open
&Åbn
+
+
&Save
&Gem
+
&Rename
&Omdøb
+
&Delete
&Slet
+
R&eload
Gen&indlæs
+
Sort by &Name
Sortér efter n&avn
+
Sort by &Size
Sortér efter s&tørrelse
+
Sort by &Date
Sortér efter &dato
+
&Unsorted
&Usorteret
+
Sort
Sortér
+
Show &hidden files
Vis s&kjulte filer
+
the file
filen
+
the directory
kataloget
+
the symlink
symlinket
+
Delete %1
Slet %1
+
<qt>Are you sure you wish to delete %1 "%2"?</qt>
<qt>Er du sikker på, at du vil slette %1 "%2"?</qt>
+
&Yes
&Ja
+
&No
&Nej
+
New Folder 1
Ny folder 1
+
New Folder
Ny folder
+
New Folder %1
Ny folder %1
+
Find Directory
Find katalog
+
+
Directories
Kataloger
+
Directory:
Katalog:
+
+
Error
Fejl
+
%1
File not found.
Check path and filename.
@@ -401,14 +503,17 @@ Filen blev ikke fundet.
Kontrollér sti og filnavn.
+
All Files (*.*)
Alle filer (*.*)
+
Open
Åbn
+
Select a Directory
Vælg et katalog
@@ -416,24 +521,29 @@ Kontrollér sti og filnavn.
Q3LocalFs
+
+
Could not read directory
%1
Kunne ikke læse katalog
%1
+
Could not create directory
%1
Kunne ikke oprette katalog
%1
+
Could not remove file or directory
%1
Kunne ikke fjerne fil eller katalog
%1
+
Could not rename
%1
to
@@ -444,12 +554,14 @@ to
%2
+
Could not open
%1
Kunne ikke åbne
%1
+
Could not write
%1
Kunne ikke skrive
@@ -459,11 +571,12 @@ to
Q3MainWindow
-
+
Line up
Linie op
+
Customize...
Tilpas...
@@ -471,7 +584,7 @@ to
Q3NetworkProtocol
-
+
Operation stopped by the user
Brugeren stoppede handlingen
@@ -479,6 +592,8 @@ to
Q3ProgressDialog
+
+
Cancel
Annuller
@@ -486,22 +601,28 @@ to
Q3TabDialog
+
+
OK
+
Apply
Udfør
+
Help
Hjælp
+
Defaults
Standarder
+
Cancel
Annuller
@@ -509,31 +630,38 @@ to
Q3TextEdit
-
+
&Undo
&Fortryd
+
&Redo
&Gendan
+
Cu&t
&Klip
+
&Copy
K&opiér
+
&Paste
&Sæt ind
+
Clear
Ryd
+
+
Select All
Markér alt
@@ -541,55 +669,67 @@ to
Q3TitleBar
-
+
System
+
Restore up
Gendan op
+
Minimize
Minimer
+
Restore down
Gendan ned
+
Maximize
Maksimér
+
Close
Luk
+
Contains commands to manipulate the window
Indeholder kommandoer til indstilling af vinduet
+
Puts a minimized back to normal
Sætter et minimeret vindue til normal størrelse
+
Moves the window out of the way
Flytter vinduet væk
+
Puts a maximized window back to normal
Sætter et maksimeret vindue til normal størrelse
+
Makes the window full screen
Gør vinduet til fuld skærm
+
Closes the window
Lukker vinduet
+
Displays the name of the window and contains controls to manipulate it
Viser vinduets navn og indeholder kontroller til indstilling af vinduet
@@ -597,7 +737,7 @@ to
Q3ToolBar
-
+
More...
Mere...
@@ -605,38 +745,51 @@ to
Q3UrlOperator
+
+
+
The protocol `%1' is not supported
Protokollen '%1' understøttes ikke
+
The protocol `%1' does not support listing directories
Protokollen '%1' understøtter ikke opremsning af kataloger
+
The protocol `%1' does not support creating new directories
Protokollen '%1' understøtter ikke oprettelse af nye kataloger
+
The protocol `%1' does not support removing files or directories
Protokollen '%1' understøtter ikke, at filer eller kataloger fjernes
+
The protocol `%1' does not support renaming files or directories
Protokollen '%1' understøtter ikke, at filer eller kataloger omdøbes
+
The protocol `%1' does not support getting files
Protokollen '%1' understøtter ikke hentning af filer
+
The protocol `%1' does not support putting files
Protokollen '%1' understøtter ikke upload af filer
+
+
The protocol `%1' does not support copying or moving files or directories
Protokollen '%1' understøtter ikke kopiering eller flytning af filer eller kataloger
+
+
(unknown)
(ukendt)
@@ -644,23 +797,27 @@ to
Q3Wizard
-
+
&Cancel
&Annuller
+
< &Back
< &Tilbage
+
&Next >
&Næste >
+
&Finish
&Udfør
+
&Help
&Hjælp
@@ -668,31 +825,44 @@ to
QAbstractSocket
+
+
+
+
Host not found
Host blev ikke fundet
-
+
+
+
Connection refused
Forbindelse afvist
+
Connection timed out
Forbindelsen timed out
+
+
+
Operation on socket is not supported
Socket-operation ikke understøttet
+
Socket operation timed out
Socket-operation timed out
+
Socket is not connected
Socket ikke forbundet
+
Network unreachable
Netværket er ikke tilgængeligt
@@ -700,15 +870,17 @@ to
QAbstractSpinBox
-
+
&Step up
&Trin op
+
Step &down
Trin &ned
+
&Select All
&Vælg alle
@@ -716,27 +888,28 @@ to
QApplication
-
+
Activate
Aktivér
-
+
Executable '%1' requires Qt %2, found Qt %3.
Eksekverbar '%1' kræver Qt %2, ikke fundet Qt %3.
+
Incompatible Qt Library Error
Inkompatibel Qt Library fejl
-
+
QT_LAYOUT_DIRECTION
Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.
-
+
Activates the program's main window
Aktiverer programmets hovedvindue
@@ -744,18 +917,22 @@ to
QAxSelect
+
Select ActiveX Control
Vælg ActiveX-kontrol
+
OK
+
&Cancel
&Annuller
+
COM &Object:
COM &Objekt:
@@ -763,15 +940,17 @@ to
QCheckBox
-
+
Uncheck
Fjern markering
+
Check
Kryds af
+
Toggle
Slå til/fra
@@ -779,47 +958,57 @@ to
QColorDialog
-
+
Hu&e:
Ton&e:
+
&Sat:
&Mæt:
+
&Val:
&Vær:
+
&Red:
&Rød:
+
&Green:
&Grøn:
+
Bl&ue:
Bl&å:
+
A&lpha channel:
Al&fa-kanal:
+
Select Color
Vælg farve
+
&Basic colors
&Basisfarver
+
&Custom colors
&Egne farver
+
&Add to Custom Colors
&Føj til egne farver
@@ -827,20 +1016,23 @@ to
QComboBox
+
+
Open
Åbn
-
+
False
Falsk
+
True
Sandt
-
+
Close
Luk
@@ -848,17 +1040,19 @@ to
QCoreApplication
-
+
%1: key is empty
QSystemSemaphore
%1: nøgle er tom
+
%1: unable to make key
QSystemSemaphore
%1: kunne ikke lave nøgle
+
%1: ftok failed
QSystemSemaphore
%1: ftok mislykkedes
@@ -867,19 +1061,22 @@ to
QDB2Driver
-
+
Unable to connect
Kunne ikke skabe forbindelse
+
Unable to commit transaction
Kunne ikke gennemføre transaktion
+
Unable to rollback transaction
Kunne ikke tilbagetrække transaktion
+
Unable to set autocommit
Kunne ikke aktivere autocommit
@@ -887,26 +1084,33 @@ to
QDB2Result
+
+
Unable to execute statement
Kunne ikke udføre statement
+
Unable to prepare statement
Kunne ikke forberede udsagn
+
Unable to bind variable
Kunne ikke binde variabel
+
Unable to fetch record %1
Kunne ikke hente post %1
+
Unable to fetch next
Kunne ikke hente næste
+
Unable to fetch first
Kunne ikke hente første
@@ -914,19 +1118,22 @@ to
QDateTimeEdit
-
+
AM
+
am
+
PM
+
pm
@@ -934,15 +1141,17 @@ to
QDial
-
+
QDial
+
SpeedoMeter
Speedometer
+
SliderHandle
@@ -950,11 +1159,12 @@ to
QDialog
-
+
What's This?
Hvad er dette?
+
Done
Udført
@@ -962,100 +1172,124 @@ to
QDialogButtonBox
-
+
+
+
OK
-
+
&OK
+
&Save
&Gem
+
Save
Gem
+
Open
Åbn
+
&Cancel
&Annuller
+
Cancel
Annuller
+
&Close
&Luk
+
Close
Luk
+
Apply
Udfør
+
Reset
Nulstil
+
Help
Hjælp
+
Don't Save
Gem ikke
+
Discard
Kassér
+
&Yes
&Ja
+
Yes to &All
Ja til &alle
+
&No
&Nej
+
N&o to All
Ne&j til alle
+
Save All
Gem alle
+
Abort
Afbryd
+
Retry
Prøv igen
+
Ignore
Ignorer
+
Restore Defaults
Gendan standardværdier
+
Close without Saving
Luk uden at gemme
@@ -1063,25 +1297,29 @@ to
QDirModel
-
+
Name
Navn
+
Size
Størrelse
+
Kind
Match OS X Finder
Type
+
Type
All other platforms
+
Date Modified
Ændringsdato
@@ -1089,15 +1327,17 @@ to
QDockWidget
-
+
Close
Luk
+
Dock
Låst
+
Float
Flydende
@@ -1105,10 +1345,12 @@ to
QDoubleSpinBox
+
More
Mere
+
Less
Mindre
@@ -1116,23 +1358,27 @@ to
QErrorMessage
-
+
Debug Message:
Debug-besked:
+
Warning:
Advarsel:
+
Fatal Error:
Fatal fejl:
+
&Show this message again
&Vis denne besked igen
+
&OK
@@ -1140,22 +1386,33 @@ to
QFile
+
+
Destination file exists
Destinationsfil findes
+
+ Cannot remove source file
+ Kan ikke fjerne kildefil
+
+
+
Cannot open %1 for input
Kan ikke åbne %1 til input
+
Cannot open for output
Kan ikke åbne til output
+
Failure to write block
Kunne ikke skrive blok
+
Cannot create %1 for output
Kunne ikke oprette %1 til output
@@ -1163,32 +1420,44 @@ to
QFileDialog
+
+
All Files (*)
Alle filer (*)
+
Directories
Kataloger
+
+
+
+
&Open
&Åbn
+
+
&Save
&Gem
+
Open
Åbn
+
%1 already exists.
Do you want to replace it?
%1 findes allerede.
Ønsker du at erstatte den?
+
%1
File not found.
Please verify the correct file name was given.
@@ -1197,47 +1466,64 @@ Filen kunne ikke findes.
Kontrollér, at det rigtige filnavn er indtastet.
-
+
My Computer
Min computer
+
&Rename
&Omdøb
+
&Delete
&Slet
+
Show &hidden files
Vis s&kjulte filer
+
+
Back
Tilbage
+
+
Parent Directory
Ovenliggende katalog
+
+
List View
Listevisning
+
+
Detail View
Detaljevisning
+
+
Files of type:
Filer af typen:
+
+
Directory:
Katalog:
+
+
%1
Directory not found.
Please verify the correct directory name was given.
@@ -1246,84 +1532,105 @@ Katalog kunne ikke findes.
Kontrollér, at det rigtige katalognavn er indtastet.
+
'%1' is write protected.
Do you want to delete it anyway?
'%1' er skrivebeskyttet.
Ønsker du alligevel at slette?
+
Are sure you want to delete '%1'?
Er du sikker på, at '%1' skal slettes?
+
Could not delete directory.
Kunne ikke slette kataloget.
+
Recent Places
Aktuelle steder
-
+
All Files (*.*)
Alle filer (*.*)
+
Save As
Gem som
-
+
Drive
Drev
+
+
File
Fil
+
Unknown
Ukendt
+
Find Directory
Find katalog
+
Show
Vis
+
+
Forward
Frem
-
+
New Folder
Ny folder
+
&New Folder
&Ny folder
+
+
&Choose
&Vælg
-
+
Remove
Fjern
+
+
File &name:
&Filnavn:
+
+
Look in:
Søg i:
+
+
Create New Folder
Opret ny folder
@@ -1331,62 +1638,74 @@ Do you want to delete it anyway?
QFileSystemModel
-
+
Invalid filename
Ugyldigt filnavn
+
<b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.
<b>Navnet, %1, kan ikke benyttes.</b><p>Brug et andet navn med færre tegn og ingen kommatering.
+
Name
Navn
+
Size
Størrelse
+
Kind
Match OS X Finder
Type
+
Type
All other platforms
+
Date Modified
Ændringsdato
-
+
My Computer
Min computer
+
Computer
+
%1 TB
%1 TB
+
%1 GB
%1 GB
+
%1 MB
%1 MB
+
%1 KB
%1 KB'
+
%1 bytes
%1 bytes
@@ -1394,166 +1713,216 @@ Do you want to delete it anyway?
QFontDatabase
+
+
Normal
+
+
+
Bold
Fed
+
+
Demi Bold
+
+
+
Black
Sort
+
Demi
+
+
Light
Lys
+
+
Italic
Kursiv
+
+
Oblique
Skråt
+
Any
Alle
+
Latin
+
Greek
Græsk
+
Cyrillic
Kyrillisk
+
Armenian
Armensk
+
Hebrew
Hebræisk
+
Arabic
Arabisk
+
Syriac
Syrisk
+
Thaana
+
Devanagari
+
Bengali
Bengalsk
+
Gurmukhi
+
Gujarati
+
Oriya
+
Tamil
+
Telugu
+
Kannada
+
Malayalam
+
Sinhala
+
Thai
Thailandsk
+
Lao
+
Tibetan
Tibetansk
+
Myanmar
+
Georgian
georgisk
+
Khmer
+
Simplified Chinese
Forenklet kinesisk
+
Traditional Chinese
Traditionelt kinesisk
+
Japanese
Japansk
+
Korean
Koreansk
+
Vietnamese
Vietnamesisk
+
Symbol
+
Ogham
+
Runic
@@ -1561,39 +1930,48 @@ Do you want to delete it anyway?
QFontDialog
-
+
&Font
S&krifttype
+
Font st&yle
S&til
+
&Size
&Størrelse
+
Effects
Effekter
+
Stri&keout
&Overstreget
+
&Underline
&Understreg
+
Sample
Eksempel
+
Wr&iting System
Skr&ivesystem
+
+
Select Font
Vælg skrifttype
@@ -1601,116 +1979,145 @@ Do you want to delete it anyway?
QFtp
-
+
+
Not connected
Ingen forbindelse
-
+
+
Host %1 not found
Vært %1 ikke fundet
-
+
+
Connection refused to host %1
Forbindelse til vært %1 afvist
+
Connection timed out to host %1
Forbindelsen timed out til host %1
+
+
+
Connected to host %1
Tilsluttet vært %1
+
+
Connection refused for data connection
Dataforbindelse afvist
+
+
+
+
Unknown error
Ukendt fejl
-
+
+
Connecting to host failed:
%1
Forbindelse til vært mislykkedes:
%1
-
+
+
Login failed:
%1
Login mislykkedes:
%1
-
+
+
Listing directory failed:
%1
Opremsning af katalogindhold mislykkedes:
%1
-
+
+
Changing directory failed:
%1
Ændring af katalog mislykkedes:
%1
-
+
+
Downloading file failed:
%1
Downloading af fil mislykkedes:
%1
-
+
+
Uploading file failed:
%1
Uploading af fil mislykkedes:
%1
-
+
+
Removing file failed:
%1
Det mislykkedes at fjerne fil:
%1
-
+
+
Creating directory failed:
%1
Oprettelse af katalog mislykkedes:
%1
-
+
+
Removing directory failed:
%1
Det mislykkedes at fjerne katalog:
%1
+
+
+
Connection closed
Forbindelse lukket
+
Host %1 found
Vært %1 fundet
+
Connection to %1 closed
Forbindelse til %1 lukket
+
Host found
Vært fundet
+
Connected to host
Tilsluttet vært
@@ -1718,7 +2125,7 @@ Do you want to delete it anyway?
QHostInfo
-
+
Unknown error
Ukendt fejl
@@ -1726,14 +2133,29 @@ Do you want to delete it anyway?
QHostInfoAgent
+
+
+
+
+
+
+
+
Host not found
Vært ikke fundet
+
+
+
+
Unknown address type
Ukendt adressetype
+
+
+
Unknown error
Ukendt fejl
@@ -1741,116 +2163,155 @@ Do you want to delete it anyway?
QHttp
+
+
+
+
Unknown error
Ukendt fejl
+
+
Request aborted
Forespørgsel blev annulleret
-
+
+
No server set to connect to
Ingen server at forbinde til
-
+
+
Wrong content length
Forkert indholdslængde
-
+
+
Server closed connection unexpectedly
Serveren afsluttede uventet forbindelsen
+
+ Unknown authentication method
+ Ukendt autentifikationsmetode
+
+
+
Error writing response to device
Skrivefejl mens der blev skrevet til enheden
-
+
+
Connection refused
Forbindelse afvist
-
+
+
+
Host %1 not found
Vært %1 ikke fundet
-
+
+
+
+
HTTP request failed
HTTP anmodning mislykkedes
-
+
+
Invalid HTTP response header
Ugyldig HTTP-svar-header
+
+
+
+
Invalid HTTP chunked body
Ugyldig HTTP chunked body
-
+
Host %1 found
Vært %1 fundet
+
Connected to host %1
Tilsluttet vært %1
+
Connection to %1 closed
Forbindelse til %1 lukket
+
Host found
Vært fundet
+
Connected to host
Tilsluttet vært
-
+
+
Connection closed
Forbindelse lukket
+
Proxy authentication required
Kræver proxy-autentificering
+
Authentication required
Autentificering påkrævet
+
Connection refused (or timed out)
Forbindelse blev afvist (eller tid udløb)
-
+
Proxy requires authentication
Proxy kræver autentificering
+
Host requires authentication
Vært kræver autentificering
+
Data corrupted
Data er ødelagt
+
Unknown protocol specified
En ukendt protokol blev angivet
+
SSL handshake failed
SSL handshake mislykkedes
+
HTTPS connection requested but SSL support not compiled in
Der blevet anmodet om en HTTPS-forbindelse, men SSL understøttelse er ikke kompileret ind
@@ -1858,38 +2319,47 @@ Do you want to delete it anyway?
QHttpSocketEngine
+
Did not receive HTTP response from proxy
Modtog ikke HTTP-svar fra proxy
+
Error parsing authentication request from proxy
Fejl under fortolking af autentificeringsanmodning fra proxy
+
Authentication required
Autentificering påkrævet
+
Proxy denied connection
Proxy nægtede forbindelse
+
Error communicating with HTTP proxy
Fejl under kommunikation med HTTP-proxy
+
Proxy server not found
Proxy-server kunne ikke findes
+
Proxy connection refused
Proxy-forbindelse nægtede
+
Proxy server connection timed out
Proxy-serverforbindelse timed out
+
Proxy connection closed prematurely
Proxy-forbindelse afsluttede i utide
@@ -1897,19 +2367,22 @@ Do you want to delete it anyway?
QIBaseDriver
-
+
Error opening database
Der opstod fejl ved åbning af database
+
Could not start transaction
Kunne ikke påbegynde transaktionen
+
Unable to commit transaction
Kunne ikke gennemføre transaktionen
+
Unable to rollback transaction
Kunne ikke tilbagetrække transaktionen
@@ -1917,70 +2390,89 @@ Do you want to delete it anyway?
QIBaseResult
+
Unable to create BLOB
Kunne ikke oprette BLOB
+
Unable to write BLOB
Kunne ikke skrive BLOB
+
Unable to open BLOB
Kunne ikke åbne BLOB
+
Unable to read BLOB
Kunne ikke læse BLOB
+
+
Could not find array
Kunne ikke finde array
+
Could not get array data
Kunne ikke hente arraydata
+
Could not get query info
Kunne ikke hente forespørgselsinfo
+
Could not start transaction
Kunne ikke påbegynde transaktionen
+
Unable to commit transaction
Kunne ikke gennemføre transaktionen
+
Could not allocate statement
Kunne ikke allokere statement
+
Could not prepare statement
Kunne ikke forberede udsagn
+
+
Could not describe input statement
Kunne ikke beskrive input-statement
+
Could not describe statement
Kunne ikke beskrive statement
+
Unable to close statement
Kunne ikke lukke udsagn
+
Unable to execute query
Kunne ikke udføre forespørgsel
+
Could not fetch next item
Kunne ikke hente næste element
+
Could not get statement info
Kunne ikke hente udsagnsinformation
@@ -1988,24 +2480,27 @@ Do you want to delete it anyway?
QIODevice
-
+
Permission denied
Tilladelse nægtet
+
Too many open files
Der er for mange åbne filer
+
No such file or directory
Fil eller katalog findes ikke
+
No space left on device
Ingen plads tilbage på enheden
-
+
Unknown error
Ukendt fejl
@@ -2013,19 +2508,22 @@ Do you want to delete it anyway?
QInputContext
-
+
XIM
+
XIM input method
XIM input-metode
+
Windows input method
Windows input-metode
+
Mac OS X input method
Mac OS X input-metode
@@ -2033,7 +2531,7 @@ Do you want to delete it anyway?
QInputDialog
-
+
Enter a value:
Indtast en værdi:
@@ -2041,55 +2539,66 @@ Do you want to delete it anyway?
QLibrary
-
+
Could not mmap '%1': %2
+
Plugin verification data mismatch in '%1'
Plugin-verifikationsdata er sat forkert sammen i '%1'
+
Could not unmap '%1': %2
Der var ikke muligt at lave unmap på '%1': %2
+
The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]
Plugin '%1' bruger inkompatibelt Qt-bibliotek. (%2.%3.%4) [%5]
+
The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"
Plugin '%1' bruger inkompatibelt Qt-bibliotek. Forventet build key "%2", hentede "%3"'
+
Unknown error
Ukendt fejl'
-
+
+
The shared library was not found.
DSO blev ikke fundet.
+
The file '%1' is not a valid Qt plugin.
Filen '%1' er ikke et gyldigt Qt-plugin.
+
The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)
Plugin '%1' bruger inkompatibelt Qt-bibliotek. (Ikke muligt at mikse debug og release-biblioteker)
-
+
+
Cannot load library %1: %2
Kan ikke indlæse bibliotek %1: %2
-
+
+
Cannot unload library %1: %2
Kan ikke afregistrere bibliotek %1: %2
-
+
+
Cannot resolve symbol "%1" in %2: %3
Kan ikke løse symbol "%1" i %2: %3
@@ -2097,31 +2606,37 @@ Do you want to delete it anyway?
QLineEdit
-
+
&Undo
&Fortryd
+
&Redo
&Gendan
+
Cu&t
K&lip
+
&Copy
&Kopiér
+
&Paste
&Sæt ind
+
Delete
Slet
+
Select All
Markér alt
@@ -2129,20 +2644,24 @@ Do you want to delete it anyway?
QLocalServer
-
+
+
%1: Name error
%1: Navnefejl
+
%1: Permission denied
%1: Tilladelse nægtet
+
%1: Address in use
%1: Adresse i brug
-
+
+
%1: Unknown error %2
%1: Ukendt fejl %2
@@ -2150,54 +2669,70 @@ Do you want to delete it anyway?
QLocalSocket
-
+
+
%1: Connection refused
%1: Forbindelse afvist
-
+
+
%1: Remote closed
%1: Den anden ende lukkede
+
+
+
+
%1: Invalid name
%1: Ugyldigt navn
-
+
+
%1: Socket access error
%1: Fejl i socket-adgang
-
+
+
%1: Socket resource error
%1: Fejl i socket-ressource
-
+
+
%1: Socket operation timed out
%1: Socket-handling timed out
-
+
+
%1: Datagram too large
%1: Datagram er for stort
+
+
+
%1: Connection error
%1: Forbindelsesfejl
-
+
+
%1: The socket operation is not supported
%1: Socket-handlingen understøttes ikke
+
%1: Unknown error
%1: Ukendt fejl
-
+
+
%1: Unknown error %2
%1: Ukendt fejl %2
@@ -2205,23 +2740,27 @@ Do you want to delete it anyway?
QMYSQLDriver
-
+
Unable to open database '
Kunne ikke åbne databasen '
+
Unable to connect
Kunne ikke forbinde
+
Unable to begin transaction
Kunne ikke påbegynde transaktionen
+
Unable to commit transaction
Kunne ikke gennemføre transaktionen
+
Unable to rollback transaction
Kunne ikke tilbagetrække transaktionen
@@ -2229,46 +2768,59 @@ Do you want to delete it anyway?
QMYSQLResult
+
Unable to fetch data
Kunne ikke hente data
+
Unable to execute query
Kunne ikke udføre forespørgsel
+
Unable to store result
Kunne ikke gemme resultatet
+
+
Unable to prepare statement
Kunne ikke forberede udsagn
+
Unable to reset statement
Kunne ikke nulstille udsagn
+
Unable to bind value
Kunne ikke tildele værdi
+
Unable to execute statement
Kunne ikke udføre udsagn
+
+
Unable to bind outvalues
Kunne ikke binde udværdier
+
Unable to store statement results
Kunne ikke gemme udsagnsresultater
+
Unable to execute next query
Kunne ikke udføre næste forespørgsel
+
Unable to store next result
Kunne ikke gemme næste resultat
@@ -2276,7 +2828,7 @@ Do you want to delete it anyway?
QMdiArea
-
+
(Untitled)
(Uden titel)
@@ -2284,75 +2836,92 @@ Do you want to delete it anyway?
QMdiSubWindow
-
+
%1 - [%2]
+
Close
Luk
+
Minimize
Minimér
+
Restore Down
Gendan Ned
+
&Restore
&Gendan
+
&Move
&Flyt
+
&Size
&Størrelse
+
Mi&nimize
Mi&nimér
+
Ma&ximize
Ma&ksimér
+
Stay on &Top
Bliv &oppe
+
&Close
&Luk
+
- [%1]
+
Maximize
Maksimér
+
Unshade
Fjern skygge
+
Shade
Skygge
+
Restore
Gendan
+
Help
Hjælp
+
Menu
@@ -2360,14 +2929,21 @@ Do you want to delete it anyway?
QMenu
+
+
Close
Luk
+
+
Open
Åbn
+
+
+
Execute
Udfør
@@ -2375,42 +2951,55 @@ Do you want to delete it anyway?
QMessageBox
+
Help
Hjælp
+
+
+
+
OK
+
+ <h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p>
+ <h3>Om Qt</h3><p>Dette program anvender Qt version %1.</p><p>Qt er et C++ toolkit til cross-platform applikationsudvikling.</p><p>Qt tilbyder single-source portabilitet til MS Windows, Mac OS X, Linux, og alle større kommercielle Unix-varianter. Qt er også tilgængeligt til indlejrede systemer som Qt for Embedded Linux and Qt for Windows CE.</p>Qt er tilgængeligt under tre forskellige licenser skabt med henblik på at imødekomme forskellige brugeres behov.</p><p>Qt licenseret under vores kommercielle licensaftale er passende for udvikling af proprietær/kommerciel software, hvor du ikke ønsker at dele sourcekode med tredie part, eller på anden vis ikke kan tiltræde vilkårerne i GNU LGPL version 2.1 eller GNU GPL version 3.0</p><p>Qt licenseret under GLU General Public License version 3.0 er passende for udvikling af Qt applikationer, hvor du ønsker at bruge softwaren i kombination med software under vilkårerne i GNU GPL version 3.0, eller hvor du ellers er villig til at overholde vilkårerne i GNU GPL version 3.0</p><p>See venligst <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for et overblik over Qt licensforhold.</p><p>Qt er et Nokia produkt. Se <a href="http://qtsoftware.com/qt/">qtsoftware.com/qt/</a> for yderligere information.</p>
+
+
+
About Qt
Om Qt
<p>This program uses Qt version %1.</p>
- <p>Dette program bruger Qt-version %1.</p>
+ <p>Dette program bruger Qt-version %1.</p>
+
Show Details...
Vis detaljer...
+
Hide Details...
Skjul detaljer...
<h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS Windows, Mac OS X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://qtsoftware.com/qt/">qtsoftware.com/qt/</a> for more information.</p>
- <h3>Om Qt</h3>%1<p>Qt er et C++ toolkit til cross-platform applikationsudvikling.</p><p>Qt tilbyder single-source portabilitet til MS Windows, Mac OS X, Linux, og alle større kommercielle Unix-varianter. Qt er også tilgængeligt til indlejrede systemer som Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt er et Nokia produkt. Se <a href="http://qtsoftware.com/qt/">qtsoftware.com/qt/</a> for yderligere information.</p>
+ <h3>Om Qt</h3>%1<p>Qt er et C++ toolkit til cross-platform applikationsudvikling.</p><p>Qt tilbyder single-source portabilitet til MS Windows, Mac OS X, Linux, og alle større kommercielle Unix-varianter. Qt er også tilgængeligt til indlejrede systemer som Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt er et Nokia produkt. Se <a href="http://qtsoftware.com/qt/">qtsoftware.com/qt/</a> for yderligere information.</p>
<p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qtsoftware.com/company/model/">qtsoftware.com/company/model/</a> for an overview of Qt licensing.</p>
- <p>Dette program bruger Qt Open Source Edition version %1.</p><p>Qt Open Source Edition er beregnet til udvikling af Open Source applikationer. En kommerciel Qt licens er nødvendig til udvikling af proprietære (lukket sourcekode) applikationer.</p><p>Se venligst <a href="http://qtsoftware.com/company/model/">qtsoftware.com/company/model/</a> for et overblik over Qt licensforhold.</p>
+ <p>Dette program bruger Qt Open Source Edition version %1.</p><p>Qt Open Source Edition er beregnet til udvikling af Open Source applikationer. En kommerciel Qt licens er nødvendig til udvikling af proprietære (lukket sourcekode) applikationer.</p><p>Se venligst <a href="http://qtsoftware.com/company/model/">qtsoftware.com/company/model/</a> for et overblik over Qt licensforhold.</p>
QMultiInputContext
-
+
Select IM
Markér IM
@@ -2418,11 +3007,12 @@ Do you want to delete it anyway?
QMultiInputContextPlugin
-
+
Multiple input method switcher
Multiple input metode-switcher
+
Multiple input method switcher that uses the context menu of the text widgets
Multiple input metode-switcher, der benytter tekstkontrollernes kontekstmenuer
@@ -2430,107 +3020,132 @@ Do you want to delete it anyway?
QNativeSocketEngine
-
+
The remote host closed the connection
Fjern-hosten lukkede forbindelsen
+
Network operation timed out
Netværksoperationen timed out
+
Out of resources
Ikke flere ressourcer
+
Unsupported socket operation
Socket-operation ikke understøttet
+
Protocol type not supported
Protokoltypen understøttes ikke
+
Invalid socket descriptor
Ugyldig socket-deskriptor
+
Network unreachable
Netværket er ikke tilgængeligt
+
Permission denied
Tilladelse nægtet
+
Connection timed out
Forbindelsen timed out
+
Connection refused
Forbindelse afvist
+
The bound address is already in use
Den bundne adresse er allerede i brug
+
The address is not available
Adressen er ikke tilgængelig
+
The address is protected
Adressen er beskyttet
+
Unable to send a message
Kunne ikke sende en besked
+
Unable to receive a message
Kunne ikke modtage en besked
+
Unable to write
Kunne ikke skrive
+
Network error
Netværksfejl
+
Another socket is already listening on the same port
En anden socket lytter allerede på samme port
+
Unable to initialize non-blocking socket
Kunne ikke initialisere non-blocking socket
+
Unable to initialize broadcast socket
Kunne ikke initialisere broadcast-socket
+
Attempt to use IPv6 socket on a platform with no IPv6 support
Forsøg på at bruge IPv6-socket på en platform uden IPv6-support
+
Host unreachable
Vært er ikke tilgængelig
+
Datagram was too large to send
Datagrammet var for stort til at blive sendt
+
Operation on non-socket
Handling på non-socket
+
Unknown error
Ukendt fejl
+
The proxy type is invalid for this operation
Proxytypen er ugyldig til denne handling
@@ -2538,7 +3153,7 @@ Do you want to delete it anyway?
QNetworkAccessCacheBackend
-
+
Error opening %1
Der opstod fejl i at åbne %1
@@ -2546,23 +3161,27 @@ Do you want to delete it anyway?
QNetworkAccessFileBackend
-
+
Request for opening non-local file %1
Anmodning om at åbne ikke-lokal fil %1
+
Error opening %1: %2
Der opstod fejl i at åbne %1: %2
+
Write error writing to %1: %2
Skrivefejl mens der blev skrevet til %1: %2
+
Cannot open %1: Path is a directory
Kan ikke åbne %1: Stien er et katalog
+
Read error reading from %1: %2
Læsefejl mens der blev læst fra %1: %2
@@ -2570,23 +3189,27 @@ Do you want to delete it anyway?
QNetworkAccessFtpBackend
-
+
No suitable proxy found
Ingen passende proxy blev fundet
+
Cannot open %1: is a directory
Kan ikke åbne %1: Er et katalog
+
Logging in to %1 failed: authentication required
Der opstod fejl i at logge på %1: Autentificering kræves
+
Error while downloading %1: %2
Der opstod fejl i at downloade %1: %2
+
Error while uploading %1: %2
Der opstod fejl i at uploade %1: %2
@@ -2594,7 +3217,7 @@ Do you want to delete it anyway?
QNetworkAccessHttpBackend
-
+
No suitable proxy found
Ingen passende proxy blev fundet
@@ -2602,11 +3225,12 @@ Do you want to delete it anyway?
QNetworkReply
+
Error downloading %1 - server replied: %2
Der opstod fejl i at downloade %1 - serveren svarede: %2
-
+
Protocol "%1" is unknown
Protokollen "%1" er ukendt
@@ -2614,6 +3238,8 @@ Do you want to delete it anyway?
QNetworkReplyImpl
+
+
Operation canceled
Handling blev annulleret
@@ -2621,24 +3247,28 @@ Do you want to delete it anyway?
QOCIDriver
-
+
Unable to logon
Kunne ikke logge på
+
Unable to initialize
QOCIDriver
Kunne ikke initialisere
+
Unable to begin transaction
Kunne ikke påbegynde transaktionen
+
Unable to commit transaction
Kunne ikke gennemføre transaktionen
+
Unable to rollback transaction
Kunne ikke tilbagetrække transaktionen
@@ -2646,34 +3276,43 @@ Do you want to delete it anyway?
QOCIResult
+
+
+
Unable to bind column for batch execute
Kunne ikke tildele kolonne til batch-udførsel
+
Unable to execute batch statement
Kunne ikke udføre batch-udsagn
+
Unable to goto next
Kunne ikke gå til den næste
+
Unable to alloc statement
Kunne ikke allokere udsagn
+
Unable to prepare statement
Kunne ikke forberede udsagn
+
Unable to bind value
Kunne ikke tildele værdi
Unable to execute select statement
- Kunne ikke udføre det valgte udsagn
+ Kunne ikke udføre det valgte udsagn
+
Unable to execute statement
Kunne ikke udføre udsagn
@@ -2681,27 +3320,32 @@ Do you want to delete it anyway?
QODBCDriver
-
+
Unable to connect
Kunne ikke forbinde
+
Unable to connect - Driver doesn't support all needed functionality
Kunne ikke forbinde. Driveren understøtter ikke alle de nødvendige funktionaliteter
+
Unable to disable autocommit
Kunne ikke slå auto-udfør fra
+
Unable to commit transaction
Kunne ikke gennemføre transaktionen
+
Unable to rollback transaction
Kunne ikke tilbagetrække transaktionen
+
Unable to enable autocommit
Kunne ikke slå auto-udfør til
@@ -2709,38 +3353,51 @@ Do you want to delete it anyway?
QODBCResult
+
+
QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration
QODBCResult::reset: Kunne ikke indstille 'SQL_CURSOR_STATIC' til udsagnsattribut. Kontrollér ODBC-driver-konfigurationen
+
+
Unable to execute statement
Kunne ikke udføre udsagn
+
Unable to fetch next
Kunne ikke hente den næste
+
Unable to prepare statement
Kunne ikke forberede udsagn
+
Unable to bind variable
Kunne ikke tildele variabel
+
+
+
Unable to fetch last
Kunne ikke hente den sidste
+
Unable to fetch
Kunne ikke hente
+
Unable to fetch first
Kunne ikke hente den første
+
Unable to fetch previous
Kunne ikke hente den forrige
@@ -2748,41 +3405,48 @@ Do you want to delete it anyway?
QObject
-
+
Home
Hjem
-
+
Operation not supported on %1
Handling blev ikke understøttet på %1
+
Invalid URI: %1
Ugyldig URI: %1
-
+
Write error writing to %1: %2
Skrivefejl mens der blev skrevet til %1: %2
+
Read error reading from %1: %2
Læsefejl mens der blev læst fra %1: %2
+
Socket error on %1: %2
Socket-fejl på %1: %2
+
Remote host closed the connection prematurely on %1
Fjern-host lukkede forbindelsen for tidligt på %1
+
Protocol error: packet of size 0 received
Protokolfejl: Pakke på størrelsen 0 modtaget
+
+
No host name given
Hostnavn mangler
@@ -2790,11 +3454,12 @@ Do you want to delete it anyway?
QPPDOptionsModel
-
+
Name
Navn
+
Value
Værdi
@@ -2802,27 +3467,32 @@ Do you want to delete it anyway?
QPSQLDriver
-
+
Unable to connect
Kunne ikke skabe forbindelse
+
Could not begin transaction
Kunne ikke påbegynde transaktion
+
Could not commit transaction
Kunne ikke gennemføre transaktion
+
Could not rollback transaction
Kunne ikke tilbagetrække transaktion
+
Unable to subscribe
Kunne ikke tilmelde
+
Unable to unsubscribe
Kunne ikke afmelde
@@ -2830,10 +3500,12 @@ Do you want to delete it anyway?
QPSQLResult
+
Unable to create query
Kunne ikke oprette forespørgsel
+
Unable to prepare statement
Kunne ikke forberede udsagn
@@ -2841,83 +3513,102 @@ Do you want to delete it anyway?
QPageSetupWidget
-
+
Centimeters (cm)
Centimeter (cm)
+
Millimeters (mm)
Millimeter (mm)
+
Inches (in)
+
Points (pt)
Point (pt)
+
Form
+
Paper
Papir
+
Page size:
Sidestørrelse:
+
Width:
Vidde:
+
Height:
Højde:
+
Paper source:
Papirkilde:
+
Orientation
+
Portrait
Portræt
+
Landscape
Landskab
+
Reverse landscape
Omvendt landskab
+
Reverse portrait
Omvendt portræt
+
Margins
Margener
+
top margin
Margen - øverst
+
left margin
Margen - venstre
+
right margin
Margen - højre
+
bottom margin
Margen - bund
@@ -2925,11 +3616,12 @@ Do you want to delete it anyway?
QPluginLoader
-
+
Unknown error
Ukendt fejl
+
The plugin was not loaded.
Plugin blev ikke indlæst.
@@ -2937,346 +3629,428 @@ Do you want to delete it anyway?
QPrintDialog
-
+
locally connected
lokalt forbundet
+
+
Aliases: %1
Aliasser: %1
+
+
unknown
Ukendt
-
+
A0 (841 x 1189 mm)
+
A1 (594 x 841 mm)
+
A2 (420 x 594 mm)
+
A3 (297 x 420 mm)
+
A4 (210 x 297 mm, 8.26 x 11.7 inches)
+
A5 (148 x 210 mm)
+
A6 (105 x 148 mm)
+
A7 (74 x 105 mm)
+
A8 (52 x 74 mm)
+
A9 (37 x 52 mm)
+
B0 (1000 x 1414 mm)
+
B1 (707 x 1000 mm)
+
B2 (500 x 707 mm)
+
B3 (353 x 500 mm)
+
B4 (250 x 353 mm)
+
B5 (176 x 250 mm, 6.93 x 9.84 inches)
+
B6 (125 x 176 mm)
+
B7 (88 x 125 mm)
+
B8 (62 x 88 mm)
+
B9 (44 x 62 mm)
+
B10 (31 x 44 mm)
+
C5E (163 x 229 mm)
+
DLE (110 x 220 mm)
+
Executive (7.5 x 10 inches, 191 x 254 mm)
+
Folio (210 x 330 mm)
+
Ledger (432 x 279 mm)
+
Legal (8.5 x 14 inches, 216 x 356 mm)
+
Letter (8.5 x 11 inches, 216 x 279 mm)
+
Tabloid (279 x 432 mm)
+
US Common #10 Envelope (105 x 241 mm)
-
+
OK
+
+
+
Print
Udskriv
+
Print To File ...
Udskriv til fil...
-
+
Print range
Udskriftsområde
+
Print all
Udskriv alle
-
+
File %1 is not writable.
Please choose a different file name.
Filen %1 kan ikke skrives.
Vælg et andet filnavn.
+
%1 already exists.
Do you want to overwrite it?
%1 findes allerede.
Ønsker du at overskrive?
+
File exists
Fil findes
+
<qt>Do you want to overwrite it?</qt>
<qt>Ønsker du at overskrive?</qt>
+
Print selection
Udskriv markerede
+
%1 is a directory.
Please choose a different file name.
%1 er et katalog.
Vælg et andet filnavn.
+
A0
+
A1
+
A2
+
A3
+
A4
+
A5
+
A6
+
A7
+
A8
+
A9
+
B0
+
B1
+
B2
+
B3
+
B4
+
B5
+
B6
+
B7
+
B8
+
B9
+
B10
+
C5E
+
DLE
+
Executive
+
Folio
+
Ledger
+
Legal
+
Letter
+
Tabloid
+
US Common #10 Envelope
+
Custom
Brugerdefineret
+
+
&Options >>
&Indstillinger>>
+
&Print
&Udskriv
+
&Options <<
&Indstillinger<<
+
Print to File (PDF)
Udskriv til fil (PDF)
+
Print to File (Postscript)
Udskriv til fil (Postscript)
+
Local file
Lokal fil
+
Write %1 file
Skriv %1 fil
-
+
The 'From' value cannot be greater than the 'To' value.
'Fra'-værdien kan ikke være større end 'til'-værdien.
@@ -3284,87 +4058,108 @@ Vælg et andet filnavn.
QPrintPreviewDialog
+
+
Page Setup
Sideopsætning
-
+
%1%
+
Print Preview
Vis udskrift
+
Next page
Næste side
+
Previous page
Forrige side
+
First page
Første side
+
Last page
Sidste side
+
Fit width
Tilpas bredde
+
Fit page
Tilpas siden
+
Zoom in
Zoom ind
+
Zoom out
Zoom ud
+
Portrait
Portræt
+
Landscape
Landskab
+
Show single page
Vis enkelt side
+
Show facing pages
Vis sideopslag
+
Show overview of all pages
Vis oversigt af alle sider
+
Print
Udskriv
+
Page setup
Sideopsætning
+
Close
Luk
+
Export to PDF
Eksportér til PDF
+
Export to PostScript
Eksportér til PostScript
@@ -3372,14 +4167,17 @@ Vælg et andet filnavn.
QPrintPropertiesWidget
+
Form
Form
+
Page
Side
+
Advanced
Avanceret
@@ -3387,78 +4185,97 @@ Vælg et andet filnavn.
QPrintSettingsOutput
+
Form
+
Copies
Kopier
+
Print range
Udskriv sider
+
Print all
Udskriv alle
+
Pages from
Sider fra
+
to
til
+
Selection
Valg
+
Output Settings
Udskriftsindstillinger
+
Copies:
Kopier:
+
Collate
Samordne
+
Reverse
Omvendt
+
Options
Valgmuligheder
+
Color Mode
Farvetilstand
+
Color
Farve
+
Grayscale
Gråskala
+
Duplex Printing
Dobbelsidet
+
None
Ingen
+
Long side
Bog
+
Short side
Tavle
@@ -3466,38 +4283,47 @@ Vælg et andet filnavn.
QPrintWidget
+
Form
+
Printer
'
+
&Name:
&Navn:
+
P&roperties
&Egenskaber
+
Location:
Placering:
+
Preview
Vis udskrift
+
Type:
+
Output &file:
Udskrifts&fil:
+
...
@@ -3505,37 +4331,62 @@ Vælg et andet filnavn.
QProcess
-
+
+
Could not open input redirection for reading
Kunne ikke åbne input redirection for læsning
-
+
+
Could not open output redirection for writing
Kunne ikke åbne output redirection for skrivning
+
Resource error (fork failure): %1
Ressource fejl (fork fejl): %1
+
+
+
+
+
+
+
+
+
Process operation timed out
Proces-operation time out
+
+
+
+
Error reading from process
Fejl ved læsning fra proces
-
+
+
+
Error writing to process
Fejl ved skrivning til proces
+
Process crashed
Proces crashede
+
+ No program defined
+ Intet program defineret
+
+
+
Process failed to start
Processen kunne ikke starte
@@ -3543,7 +4394,7 @@ Vælg et andet filnavn.
QProgressDialog
-
+
Cancel
Annuller
@@ -3551,6 +4402,7 @@ Vælg et andet filnavn.
QPushButton
+
Open
Åbn
@@ -3558,6 +4410,7 @@ Vælg et andet filnavn.
QRadioButton
+
Check
Kontrollér
@@ -3565,39 +4418,47 @@ Vælg et andet filnavn.
QRegExp
-
+
no error occurred
der opstod ingen fejl
+
disabled feature used
deaktiveret funktion blev brugt
+
bad char class syntax
dårlig char class syntaks
+
bad lookahead syntax
dårlig lookahead syntaks
+
bad repetition syntax
dårlig gentagelsessyntaks
+
invalid octal value
ugyldigt oktal-tal
+
missing left delim
Manglende venstre delimiter
+
unexpected end
uventet afslutning
+
met internal limit
nåede interne grænse
@@ -3605,19 +4466,22 @@ Vælg et andet filnavn.
QSQLite2Driver
-
+
Error to open database
Der opstod fejl ved åbning af database
+
Unable to begin transaction
Kunne ikke påbegynde transaktionen
+
Unable to commit transaction
Kunne ikke gennemføre transaktionen
+
Unable to rollback Transaction
Kunne ikke tilbagetrække transaktion
@@ -3625,10 +4489,12 @@ Vælg et andet filnavn.
QSQLite2Result
+
Unable to fetch results
Kunne ikke hente resultater
+
Unable to execute statement
Kunne ikke udføre statement
@@ -3636,23 +4502,27 @@ Vælg et andet filnavn.
QSQLiteDriver
-
+
Error opening database
Der opstod fejl ved åbning af database
+
Error closing database
Der opstod fejl ved lukning af database
+
Unable to begin transaction
Kunne ikke påbegynde transaktionen
+
Unable to commit transaction
Kunne ikke gennemføre transaktion
+
Unable to rollback transaction
Kunne ikke tilbagetrække transaktion
@@ -3660,26 +4530,34 @@ Vælg et andet filnavn.
QSQLiteResult
+
+
+
Unable to fetch row
Kunne ikke hente række
+
Unable to execute statement
Kunne ikke udføre udsagn
+
Unable to reset statement
Kunne ikke nulstille udsagn
+
Unable to bind parameters
Unable to bind parameters
+
Parameter count mismatch
Misforhold i parametertælling
+
No query
Ingen forespørgesel
@@ -3687,69 +4565,84 @@ Vælg et andet filnavn.
QScrollBar
-
+
Scroll here
Scroll her
+
Left edge
Venstre kant
+
Top
Øverst
+
Right edge
Højre kant
+
Bottom
Bund
+
Page left
Side venstre
-
+
+
Page up
Side øverst
+
Page right
Side højre
-
+
+
Page down
Side ned
+
Scroll left
Scroll til venstre
+
Scroll up
Scroll op
+
Scroll right
Scroll til højre
+
Scroll down
Scroll ned
+
Line up
Linie op
+
Position
Placering
+
Line down
Linie ned
@@ -3757,81 +4650,99 @@ Vælg et andet filnavn.
QSharedMemory
-
+
%1: unable to set key on lock
%1: Kunne ikke oprette nøgle
+
%1: create size is less then 0
%1: create size is less then 0
-
+
+
%1: unable to lock
%1: Kunne ikke låse
+
%1: unable to unlock
%1: Kunne ikke oprette nøgle
-
+
+
%1: permission denied
%1: Tilladelse nægtet
+
+
%1: already exists
%1: Findes allerede
-
+
+
%1: doesn't exists
%1: Findes ikke
-
+
+
%1: out of resources
%1: Ikke flere ressourcer
-
+
+
%1: unknown error %2
%1: ukendt fejl %2
+
%1: key is empty
%1: nøgle er tom
+
%1: unix key file doesn't exists
%1: Kunne ikke oprette nøgle
+
%1: ftok failed
%1: ftok mislykkedes
-
+
+
%1: unable to make key
%1: Kunne ikke oprette nøgle
+
%1: system-imposed size restrictions
%1: System-pålagte størrelsesrestriktioner
+
%1: not attached
%1: Ikke vedhæftet
+
%1: invalid size
%1: Ugyldig størrelse
+
%1: key error
%1: Nøglefejl
+
%1: size query failed
%1: Størrelsesforespørgsel mislykkedes
@@ -3839,371 +4750,466 @@ Vælg et andet filnavn.
QShortcut
-
+
Space
+
Esc
+
Tab
+
Backtab
Tilbage-tabulator
+
Backspace
Tilbage
+
Return
+
Enter
+
Ins
+
Del
+
Pause
+
Print
Udskriv
+
SysReq
+
Home
+
End
+
Left
Venstre
+
Up
Op
+
Right
Højre
+
Down
Ned
+
PgUp
+
PgDown
+
CapsLock
'
+
NumLock
+
ScrollLock
+
Menu
+
Help
Hjælp
+
Back
Tilbage
+
Forward
Frem
+
Stop
+
Refresh
Opdater
+
Volume Down
Lydstyrke ned
+
Volume Mute
Lydstyrke mute
+
Volume Up
Lydstyrke op
+
Bass Boost
+
Bass Up
Bass op
+
Bass Down
Bass ned
+
Treble Up
Diskant op
+
Treble Down
Diskant ned
+
Media Play
+
Media Stop
+
Media Previous
Media forrige
+
Media Next
Media næste
+
Media Record
+
Favorites
+
Search
Søg
+
Standby
+
Open URL
Åbn URL
+
Launch Mail
Start mail
+
Launch Media
Start Media
+
Launch (0)
Start (0)
+
Launch (1)
Start (1)
+
Launch (2)
Start (2)
+
Launch (3)
Start (3)
+
Launch (4)
Start (4)
+
Launch (5)
Start (5)
+
Launch (6)
Start (6)
+
Launch (7)
Start (7)
+
Launch (8)
Start (8)
+
Launch (9)
Start (9)
+
Launch (A)
Start (A)
+
Launch (B)
Start (B)
+
Launch (C)
Start (C)
+
Launch (D)
Start (D)
+
Launch (E)
Start (E)
+
Launch (F)
Start (F)
+
Print Screen
+
Page Up
+
Page Down
+
Caps Lock
+
Num Lock
+
Number Lock
+
Scroll Lock
+
Insert
+
Delete
+
Escape
+
System Request
+
Select
Væg
+
Yes
Ja
+
No
Nej
+
Context1
Kontekst1
+
Context2
Kontekst2
+
Context3
Kontekst3
+
Context4
Kontekst4
+
Call
Ring til
+
Hangup
Læg på
+
Flip
Vend
+
+
Ctrl
+
+
Shift
+
+
Alt
+
+
Meta
+
+
+
F%1
+
Home Page
Startside
@@ -4211,23 +5217,27 @@ Vælg et andet filnavn.
QSlider
-
+
Page left
Side venstre
+
Page up
Side op
+
Position
Placering
+
Page right
Side højre
+
Page down
Side ned
@@ -4235,58 +5245,72 @@ Vælg et andet filnavn.
QSocks5SocketEngine
+
Connection to proxy refused
Proxy-forbindelse nægtede
+
Connection to proxy closed prematurely
Proxy-forbindelse afsluttede i utide
+
Proxy host not found
Proxy-host kunne ikke findes
+
Connection to proxy timed out
Proxy-serverforbindelse timed out
+
Proxy authentication failed
Proxy autentificering mislykkedes
+
Proxy authentication failed: %1
Proxy autentificering mislykkedes: %1
+
SOCKS version 5 protocol error
SOCKS version 5 protokolfejl
+
General SOCKSv5 server failure
General SOCKSv5 serverfejl
+
Connection not allowed by SOCKSv5 server
Forbindelse ikke tilladt a SOCKSv5-server
+
TTL expired
TTL udløbet
+
SOCKSv5 command not supported
SOCKSv5-kommando ikke understøttet
+
Address type not supported
Adressetype understøttes ikke
+
Unknown SOCKSv5 proxy error code 0x%1
Ukendt SOCKSv5 proxy fejlkode 0x%1
+
Network operation timed out
Netværksoperationen timed out
@@ -4294,10 +5318,12 @@ Vælg et andet filnavn.
QSpinBox
+
More
Mere
+
Less
Mindre
@@ -4305,43 +5331,56 @@ Vælg et andet filnavn.
QSql
-
+
Delete
Slet
+
Delete this record?
Slet denne post?
+
+
+
Yes
Ja
+
+
+
No
Nej
+
Insert
Indsæt
+
Update
Opdater
+
Save edits?
Gem ændringer?
+
Cancel
Annuller
+
Confirm
Bekræft
+
Cancel your edits?
Skal dine ændringer annulleres?
@@ -4349,47 +5388,57 @@ Vælg et andet filnavn.
QSslSocket
-
+
Unable to write data: %1
Kunne ikke skrive data: %1
+
Error while reading: %1
Der opstod en fejl under læsning af: %1
+
Error during SSL handshake: %1
Der opstod en fejl under SSL handshake: %1
+
Error creating SSL context (%1)
Der opstod fejl under oprettelse af SSL-kontekst (%1)
+
Invalid or empty cipher list (%1)
Ugyldig eller tom chifferliste (%1)
+
Error creating SSL session, %1
Der opstod fejl under oprettelse af SSL-session, %1
+
Error creating SSL session: %1
Der opstod fejl under oprettelse af SSL-session, %1
+
Cannot provide a certificate with no key, %1
Kan ikke give et certifikat uden nøgle, %1
+
Error loading local certificate, %1
Der opstod fejl under indlæsning af lokalt certifikat, %1
+
Error loading private key, %1
Der opstod fejl under indlæsning af privat nøgle, %1
+
Private key does not certificate public key, %1
Privat-nøgle autoriserer ikke offentlig-nøgle, %1
@@ -4397,25 +5446,30 @@ Vælg et andet filnavn.
QSystemSemaphore
-
+
+
%1: out of resources
%1: Ikke flere ressourcer
-
+
+
%1: permission denied
%1: Tilladelse nægtet
+
%1: already exists
%1: Findes allerede
+
%1: does not exist
%1: Findes ikke
-
+
+
%1: unknown error %2
%1: Ukendt fejl %2
@@ -4423,11 +5477,12 @@ Vælg et andet filnavn.
QTDSDriver
-
+
Unable to open connection
Kunne ikke etablere forbindelsen
+
Unable to use database
Kunne ikke bruge databasen
@@ -4435,10 +5490,12 @@ Vælg et andet filnavn.
QTabBar
+
Scroll Left
Scroll til venstre
+
Scroll Right
Scroll til højre
@@ -4446,7 +5503,7 @@ Vælg et andet filnavn.
QTcpServer
-
+
Operation on socket is not supported
Socket-operation ikke understøttet
@@ -4454,35 +5511,42 @@ Vælg et andet filnavn.
QTextControl
-
+
&Undo
&Fortryd
+
&Redo
&Gendan
+
Cu&t
K&lip
+
&Copy
&Kopiér
+
Copy &Link Location
Kopiér l&ink
+
&Paste
&Sæt ind
+
Delete
Slet
+
Select All
Markér alt
@@ -4490,10 +5554,14 @@ Vælg et andet filnavn.
QToolButton
+
+
Press
Tryk på
+
+
Open
Åbn
@@ -4501,7 +5569,7 @@ Vælg et andet filnavn.
QUdpSocket
-
+
This platform does not support IPv6
Denne platform understøtter ikke IPv6
@@ -4509,11 +5577,12 @@ Vælg et andet filnavn.
QUndoGroup
-
+
Undo
Fortryd
+
Redo
Gendan
@@ -4521,7 +5590,7 @@ Vælg et andet filnavn.
QUndoModel
-
+
<empty>
<tom>
@@ -4529,11 +5598,12 @@ Vælg et andet filnavn.
QUndoStack
-
+
Undo
Fortryd
+
Redo
Gendan
@@ -4541,47 +5611,57 @@ Vælg et andet filnavn.
QUnicodeControlCharacterMenu
-
+
LRM Left-to-right mark
+
RLM Right-to-left mark
+
ZWJ Zero width joiner
+
ZWNJ Zero width non-joiner
+
ZWSP Zero width space
+
LRE Start of left-to-right embedding
+
RLE Start of right-to-left embedding
+
LRO Start of left-to-right override
+
RLO Start of right-to-left override
+
PDF Pop directional formatting
+
Insert Unicode control character
@@ -4589,27 +5669,32 @@ Vælg et andet filnavn.
QWebFrame
-
+
Request cancelled
Anmodning annulleret
+
Request blocked
Anmodning blokeret
+
Cannot show URL
Kan ikke vise URL
+
Frame load interruped by policy change
Billedindlæsning afbrudt af ændringer i retningslinier
+
Cannot show mimetype
Kan ikke vise MIME-type
+
File does not exist
Filen findes ikke
@@ -4617,316 +5702,376 @@ Vælg et andet filnavn.
QWebPage
-
+
Bad HTTP request
Dårlig HTTP-anmodning
-
+
Submit
default label for Submit buttons in forms on web pages
Send
+
Submit
Submit (input element) alt text for <input> elements with no alt, title, or value
Send
+
Reset
default label for Reset buttons in forms on web pages
Nulstil
+
This is a searchable index. Enter search keywords:
text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'
Dette er et søgeindeks. Indtast søgeord:
+
Choose File
title for file button used in HTML forms
Vælg fil
+
No file selected
text to display in file button used in HTML forms when no file is selected
Der er ikke valgt en fil
+
Open in New Window
Open in New Window context menu item
Åbn i nyt vindue
+
Save Link...
Download Linked File context menu item
Gem link...
+
Copy Link
Copy Link context menu item
Kopiér link
+
Open Image
Open Image in New Window context menu item
Åbn billede
+
Save Image
Download Image context menu item
Gem billede
+
Copy Image
Copy Link context menu item
Kopiér billede
+
Open Frame
Open Frame in New Window context menu item
Åbn faneblad
+
Copy
Copy context menu item
Kopiér
+
Go Back
Back context menu item
Gå tilbage
+
Go Forward
Forward context menu item
Gå frem
+
Stop
Stop context menu item
Stop
+
Reload
Reload context menu item
Genindlæs
+
Cut
Cut context menu item
Klip
+
Paste
Paste context menu item
Sæt ind
+
No Guesses Found
No Guesses Found context menu item
Der er ikke fundet nogen gæt
+
Ignore
Ignore Spelling context menu item
Ignorér
+
Add To Dictionary
Learn Spelling context menu item
Tilføj til ordbog
+
Search The Web
Search The Web context menu item
Søg på nettet
+
Look Up In Dictionary
Look Up in Dictionary context menu item
Slå op i ordbog
+
Open Link
Open Link context menu item
Åbn link
+
Ignore
Ignore Grammar context menu item
Ignorér
+
Spelling
Spelling and Grammar context sub-menu item
Stavekontrol
+
Show Spelling and Grammar
menu item title
Vis stave- og grammatikkontrol
+
Hide Spelling and Grammar
menu item title
Skjul stave- og grammatikkontrol
+
Check Spelling
Check spelling context menu item
Kør stavekontrol
+
Check Spelling While Typing
Check spelling while typing context menu item
Kør stavekontrol mens der tastes
+
Check Grammar With Spelling
Check grammar with spelling context menu item
Kør grammatikkontrol sammen med stavekontrol
+
Fonts
Font context sub-menu item
Skrifttyper
+
Bold
Bold context menu item
Fed
+
Italic
Italic context menu item
Kursiv
+
Underline
Underline context menu item
Understreget
+
Outline
Outline context menu item
Kontur
+
Direction
Writing direction context sub-menu item
Retning
+
Text Direction
Text direction context sub-menu item
Tekstretning
+
Default
Default writing direction context menu item
Standard
+
LTR
Left to Right context menu item
+
RTL
Right to Left context menu item
+
Inspect
Inspect Element context menu item
Inspicér
+
No recent searches
Label for only item in menu that appears when clicking on the search field image, when no searches have been performed
Ingen aktuelle søgninger
+
Recent searches
label for first item in the menu that appears when clicking on the search field image, used as embedded menu title
Aktuelle søgninger
+
Clear recent searches
menu item in Recent Searches menu that empties menu's contents
Ryd aktuelle søgninger
+
Unknown
Unknown filesize FTP directory listing item
Ukendt
+
%1 (%2x%3 pixels)
Title string for images
%1 (%2x%3 pixels)
-
+
Web Inspector - %2
Web-inspektør - %2
-
+
Scroll here
Scroll her
+
Left edge
Venstre kant
+
Top
+
Right edge
Højre kant
+
Bottom
Bund
+
Page left
Side venstre
+
Page up
Side øverst
+
Page right
Side højre
+
Page down
Side ned
+
Scroll left
Scroll til venstre
+
Scroll up
Scroll op
+
Scroll right
Scroll til højre
+
Scroll down
Scroll ned
-
+
%n file(s)
number of chosen file
@@ -4935,127 +6080,170 @@ Vælg et andet filnavn.
-
+
JavaScript Alert - %1
JavaScript alert - %1
+
JavaScript Confirm - %1
JavaScript Bekræft - %1
+
JavaScript Prompt - %1
JavaScript Prompt - %1
+
Move the cursor to the next character
Flyt markør til næste tegn
+
Move the cursor to the previous character
Flyt markør til forrige tegn
+
Move the cursor to the next word
Flyt markør til næste ord
+
Move the cursor to the previous word
Flyt markør til forrige ord
+
Move the cursor to the next line
Flyt markør til næste linie
+
Move the cursor to the previous line
Flyt markør til forrige linie
+
Move the cursor to the start of the line
Flyt markør til starten af linien
+
Move the cursor to the end of the line
Flyt markør til slutningen af linien
+
Move the cursor to the start of the block
Flyt markør til starten af sektionen
+
Move the cursor to the end of the block
Flyt markør til slutningen af sektionen
+
Move the cursor to the start of the document
Flyt markør til starten af dokumentet
+
Move the cursor to the end of the document
Flyt markør til slutningen af dokumentet
+
+ Select all
+ Markér alt
+
+
+
Select to the next character
Vælg til næste tegn
+
Select to the previous character
Vælg til forrige tegn
+
Select to the next word
Vælg til næste ord
+
Select to the previous word
Vælg til forrige ord
+
Select to the next line
Vælg til næste linie
+
Select to the previous line
Vælg til forrige linie
+
Select to the start of the line
Vælg til starten af linien
+
Select to the end of the line
Vælg til slutningen af linien
+
Select to the start of the block
Vælg til starten af sektionen
+
Select to the end of the block
Vælg til slutningen af sektionen
+
Select to the start of the document
Vælg til starten af dokumentet
+
Select to the end of the document
Vælg til slutningen af dokumentet
+
Delete to the start of the word
Slet til starten af ordet
+
Delete to the end of the word
Slet til slutningen af ordet
+
+
+ Insert a new paragraph
+ Indsæt et nyt afsnit
+
+
+
+ Insert a new line
+ Insert ny linie
+
QWhatsThisAction
-
+
What's This?
Hvad er dette?
@@ -5063,7 +6251,7 @@ Vælg et andet filnavn.
QWidget
-
+
*
@@ -5071,47 +6259,57 @@ Vælg et andet filnavn.
QWizard
-
+
Go Back
Gå tilbage
+
Continue
Fortsæt
+
Commit
Udfør
+
Done
Færdig
+
Help
Hjælp
+
< &Back
< &Tilbage
+
&Finish
&Afslut
+
Cancel
Annuller
+
&Help
&Hjælp
+
&Next
&Næste
+
&Next >
&Næste >
@@ -5119,55 +6317,69 @@ Vælg et andet filnavn.
QWorkspace
-
+
&Restore
&Gendan
+
&Move
&Flyt
+
&Size
&Størrelse
+
Mi&nimize
Mi&nimér
+
Ma&ximize
Ma&ksimér
+
&Close
&Luk
+
Stay on &Top
Bliv på &toppen
+
+
Sh&ade
Sk&ygge
+
+
%1 - [%2]
+
Minimize
Minimer
+
Restore Down
Gendan ned
+
Close
Luk
+
&Unshade
&Fjern skygge
@@ -5175,95 +6387,117 @@ Vælg et andet filnavn.
QXml
-
+
no error occurred
der opstod ingen fejl
+
error triggered by consumer
-
+ Fejltilstand rejst af datamodtager
+
unexpected end of file
uventet afslutning på fil
+
more than one document type definition
mere end én definition på dokumenttype
+
error occurred while parsing element
der opstod fejl under fortolking af element
+
tag mismatch
+
error occurred while parsing content
der opstod fejl under fortolking af indhold
+
unexpected character
uventet tegn
+
invalid name for processing instruction
-
+ Ugyldigt navn for processing instruction
+
version expected while reading the XML declaration
version forventet under læsning af XML-deklaration
+
wrong value for standalone declaration
-
+ Forkert værdi for fri deklaration
+
encoding declaration or standalone declaration expected while reading the XML declaration
-
+ Enkodningsdeklaration eller fri deklaration forventet ved læsning af XML-deklaration
+
standalone declaration expected while reading the XML declaration
-
+ fri deklaration forventet ved læsning af XML-deklaration
+
error occurred while parsing document type definition
der opstod fejl under fortolking af dokumenttypedefinition
+
letter is expected
-
+ bogstav forventet
+
error occurred while parsing comment
der opstod fejl under fortolking af kommentar
+
error occurred while parsing reference
der opstod fejl under fortolking af reference
+
internal general entity reference not allowed in DTD
-
+ intern generel entitetsreference ikke tilladt i DTD
+
external parsed general entity reference not allowed in attribute value
-
+ Eksternt parset generel entitetsreference ikke tilladt i attributværdi
+
external parsed general entity reference not allowed in DTD
-
+ Eksternt parset generel entitetsreference ikke tilladt i DTD
+
unparsed entity reference in wrong context
ufortolket enhedsreference i forkert kontekst
+
recursive entities
-
+ rekursive entiteter
+
error in the text declaration of an external entity
fejl i tekstdeklaration på en ekstern enhed
@@ -5271,412 +6505,485 @@ Vælg et andet filnavn.
QXmlStream
-
+
+
Extra content at end of document.
Ekstra indhold sidst i dokumentet.
+
Invalid entity value.
Ugyldig enhedsværdi.
+
Invalid XML character.
Ugyldigt XML-tegn.
+
Sequence ']]>' not allowed in content.
Sekvens ']]>' ikke tilladt i indhold.
+
Namespace prefix '%1' not declared
Navnerumspræfiks '%1' ikke deklareret
+
Attribute redefined.
-
+ Attribut redefineret.
+
Unexpected character '%1' in public id literal.
-
+ Uventet tegn '%1' i public id værdi.
+
Invalid XML version string.
Ugyldigt XML-versionsstreng.
+
Unsupported XML version.
XML-version understøttes ikke.
+
%1 is an invalid encoding name.
-
+ %1 er et ugyldigt enkodningsnavn.
+
Encoding %1 is unsupported
-
+ Enkodning %1 er ikke understøttet
+
Standalone accepts only yes or no.
+
Invalid attribute in XML declaration.
-
+ Ugyldig attribut i XML-deklaration.
+
Premature end of document.
-
+ Dokument sluttede for tidligt.
+
Invalid document.
Ugyldigt dokument.
+
Expected
Forventet
+
, but got '
, men fik '
+
Unexpected '
Uventet '
+
Expected character data.
Forventet tegndata.
+
Recursive entity detected.
-
+ Rekursiv entitet opdaget.
+
Start tag expected.
Start-tag forventet.
+
XML declaration not at start of document.
XML-deklaration ikke i starten af dokumentet.
+
NDATA in parameter entity declaration.
-
+ NDATA i parameterentitetsdeklaration.
+
%1 is an invalid processing instruction name.
-
+ %1 er et ugyldigt processing-instruction-navn.
+
Invalid processing instruction name.
-
+ Ugyldigt processing-instruction-navn.
+
+
+
+
Illegal namespace declaration.
Ulovligt navnerumsdeklaration.
-
+
Invalid XML name.
Ugyldigt XML-navn.
+
Opening and ending tag mismatch.
Åbner og afslutter tag-mismatch.
+
Reference to unparsed entity '%1'.
Reference to ufortolket enhed '%1'.
+
+
+
Entity '%1' not declared.
Enheden '%1' ikke deklareret.
+
Reference to external entity '%1' in attribute value.
Reference til ekstern enhed '%1' i attributværdi.
+
Invalid character reference.
Ugyldig tegnreference.
+
+
Encountered incorrectly encoded content.
-
+ Indhold med forkert enkodning læst.
+
The standalone pseudo attribute must appear after the encoding.
-
+ Den frie pseudo-attribut skal optræde efter enkodningen.
-
+
%1 is an invalid PUBLIC identifier.
-
+ %1 er en ugyldig PUBLIC identifier.
QtXmlPatterns
-
+
An %1-attribute with value %2 has already been declared.
-
+ En %1-attribut med værdi %2 er allerede erklæret.
+
An %1-attribute must have a valid %2 as value, which %3 isn't.
-
+ En %1-attribut skal have en gyldig %2 som værdi, hvilket %3 ikke er.
-
+
Network timeout.
-
+ Netværk timeout.
-
+
Element %1 can't be serialized because it appears outside the document element.
-
+ Element %1 kan ikke serialiseres fordi det optræder udenfor dokument-elementet.
-
+
Year %1 is invalid because it begins with %2.
-
+ År %1 er ugyldigt da det begynder med %2.
+
Day %1 is outside the range %2..%3.
-
+ Dag %1 er udenfor intervallet %2..%3.
+
Month %1 is outside the range %2..%3.
-
+ Måned %1 er udenfor intervallet %2..%3.
+
Overflow: Can't represent date %1.
-
+ Overflow: Kan ikke repræsentere dato %1.
+
Day %1 is invalid for month %2.
-
+ Dag %1 er ugyldig for månet %2.
+
Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0;
-
+ Tidspunkt 24:%1:%2.%3 er ugyldigt. Timetal er 24, men minutter, sekunder og millisekunder er ikke alle 0;
+
Time %1:%2:%3.%4 is invalid.
-
+ Tidspunkt %1:%2:%3.%4 er ugyldigt.
+
Overflow: Date can't be represented.
-
+ Overflow: Dato kan ikke repræsenteres.
+
+
At least one component must be present.
-
+ Mindst en komponent skal være tilstede.
+
At least one time component must appear after the %1-delimiter.
-
+ Mindst en tidskomponent skal optræde efter %1-skillemærket.
-
+
No operand in an integer division, %1, can be %2.
-
+ Ingen operand i en heltalsdivision, %1, kan være %2.
+
The first operand in an integer division, %1, cannot be infinity (%2).
-
+ Den første operand i en heltalsdivision, %1, kan ikke være uendeligt (%2).
+
The second operand in a division, %1, cannot be zero (%2).
-
+ Den anden operand i en division, %1, kan ikke være nul (%2).
-
+
%1 is not a valid value of type %2.
-
+ %1 er ikke en gyldig værdi af typen %2.
-
+
When casting to %1 from %2, the source value cannot be %3.
-
+ Ved cast til %1 fra %2, kan kildeværdien ikke være %3.
-
+
Integer division (%1) by zero (%2) is undefined.
-
+ Heltalsdivision (%1) med nul (%2) er udefineret.
+
Division (%1) by zero (%2) is undefined.
-
+ Division (%1) med nul (%2) er udefineret.
+
Modulus division (%1) by zero (%2) is undefined.
-
+ Modulusdivision (%1) med nul (%2) er udefineret.
+
+
Dividing a value of type %1 by %2 (not-a-number) is not allowed.
-
+ Division af værdi af typen %1 med %2 (ikke et tal) er ikke tilladt.
+
Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.
+
Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.
-
+
A value of type %1 cannot have an Effective Boolean Value.
-
+
Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.
-
+
Value %1 of type %2 exceeds maximum (%3).
+
Value %1 of type %2 is below minimum (%3).
-
+
A value of type %1 must contain an even number of digits. The value %2 does not.
+
%1 is not valid as a value of type %2.
-
+
Operator %1 cannot be used on type %2.
+
Operator %1 cannot be used on atomic values of type %2 and %3.
-
+
The namespace URI in the name for a computed attribute cannot be %1.
+
The name for a computed attribute cannot have the namespace URI %1 with the local name %2.
-
+
Type error in cast, expected %1, received %2.
+
When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.
-
+
No casting is possible with %1 as the target type.
+
It is not possible to cast from %1 to %2.
+
Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.
+
It's not possible to cast the value %1 of type %2 to %3
+
Failure when casting from %1 to %2: %3
-
+
A comment cannot contain %1
+
A comment cannot end with a %1.
-
+
No comparisons can be done involving the type %1.
+
Operator %1 is not available between atomic values of type %2 and %3.
-
+
An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.
-
+
A library module cannot be evaluated directly. It must be imported from a main module.
+
No template by name %1 exists.
-
+
A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.
+
A positional predicate must evaluate to a single numeric value.
-
+
The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.
+
%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.
-
+
The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.
-
+
The data of a processing instruction cannot contain the string %1
-
+
No namespace binding exists for the prefix %1
-
+
No namespace binding exists for the prefix %1 in %2
-
+
+
%1 is an invalid %2
-
+
%1 takes at most %n argument(s). %2 is therefore invalid.
@@ -5684,6 +6991,7 @@ Vælg et andet filnavn.
+
%1 requires at least %n argument(s). %2 is therefore invalid.
@@ -5691,613 +6999,731 @@ Vælg et andet filnavn.
-
+
The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.
+
The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.
+
The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.
-
+
%1 is not a valid XML 1.0 character.
-
+
The first argument to %1 cannot be of type %2.
-
+
If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.
-
+
%1 was called.
-
+
%1 must be followed by %2 or %3, not at the end of the replacement string.
+
In the replacement string, %1 must be followed by at least one digit when not escaped.
+
In the replacement string, %1 can only be used to escape itself or %2, not %3
-
+
%1 matches newline characters
+
%1 and %2 match the start and end of a line.
+
Matches are case insensitive
+
Whitespace characters are removed, except when they appear in character classes
+
%1 is an invalid regular expression pattern: %2
+
%1 is an invalid flag for regular expressions. Valid flags are:
-
+
If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.
-
+
It will not be possible to retrieve %1.
-
+
The root node of the second argument to function %1 must be a document node. %2 is not a document node.
-
+
The default collection is undefined
+
%1 cannot be retrieved
-
+
The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).
-
+
A zone offset must be in the range %1..%2 inclusive. %3 is out of range.
+
%1 is not a whole number of minutes.
-
+
Required cardinality is %1; got cardinality %2.
-
+
The item %1 did not match the required type %2.
+
+
%1 is an unknown schema type.
+
Only one %1 declaration can occur in the query prolog.
+
The initialization of variable %1 depends on itself
+
No variable by name %1 exists
-
+
The variable %1 is unused
-
+
Version %1 is not supported. The supported XQuery version is 1.0.
+
The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.
+
No function with signature %1 is available
+
+
A default namespace declaration must occur before function, variable, and option declarations.
+
Namespace declarations must occur before function, variable, and option declarations.
+
Module imports must occur before function, variable, and option declarations.
+
It is not possible to redeclare prefix %1.
+
Prefix %1 is already declared in the prolog.
+
The name of an option must have a prefix. There is no default namespace for options.
+
The Schema Import feature is not supported, and therefore %1 declarations cannot occur.
+
The target namespace of a %1 cannot be empty.
+
The module import feature is not supported
+
No value is available for the external variable by name %1.
+
A construct was encountered which only is allowed in XQuery.
+
A template by name %1 has already been declared.
+
The keyword %1 cannot occur with any other mode name.
+
The value of attribute %1 must of type %2, which %3 isn't.
+
The prefix %1 can not be bound. By default, it is already bound to the namespace %2.
+
A variable by name %1 has already been declared.
+
A stylesheet function must have a prefixed name.
+
The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)
+
The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.
+
The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2
+
A function already exists with the signature %1.
+
No external functions are supported. All supported functions can be used directly, without first declaring them as external
+
An argument by name %1 has already been declared. Every argument name must be unique.
+
When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.
+
In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.
+
In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.
+
In an XSL-T pattern, function %1 cannot have a third argument.
+
In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.
+
In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.
+
%1 is an invalid template mode name.
+
The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.
+
The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.
+
None of the pragma expressions are supported. Therefore, a fallback expression must be present
+
Each name of a template parameter must be unique; %1 is duplicated.
+
The %1-axis is unsupported in XQuery
+
%1 is not a valid name for a processing-instruction.
+
%1 is not a valid numeric literal.
+
No function by name %1 is available.
+
The namespace URI cannot be the empty string when binding to a prefix, %1.
+
%1 is an invalid namespace URI.
+
It is not possible to bind to the prefix %1
+
Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).
+
Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).
+
Two namespace declaration attributes have the same name: %1.
+
The namespace URI must be a constant and cannot use enclosed expressions.
+
An attribute by name %1 has already appeared on this element.
+
A direct element constructor is not well-formed. %1 is ended with %2.
+
The name %1 does not refer to any schema type.
+
%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.
+
%1 is not an atomic type. Casting is only possible to atomic types.
+
+
%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.
+
The name of an extension expression must be in a namespace.
-
+
empty
+
zero or one
+
exactly one
+
one or more
+
zero or more
-
+
Required type is %1, but %2 was found.
+
Promoting %1 to %2 may cause loss of precision.
+
The focus is undefined.
-
+
It's not possible to add attributes after any other kind of node.
+
An attribute by name %1 has already been created.
-
+
Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.
-
+
Attribute %1 can't be serialized because it appears at the top level.
-
+
%1 is an unsupported encoding.
+
%1 contains octets which are disallowed in the requested encoding %2.
+
The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.
-
+
Ambiguous rule match.
-
- In a namespace constructor, the value for a namespace value cannot be an empty string.
+
+ In a namespace constructor, the value for a namespace cannot be an empty string.
+
The prefix must be a valid %1, which %2 is not.
+
The prefix %1 cannot be bound.
+
Only the prefix %1 can be bound to %2 and vice versa.
-
+
Circularity detected
-
+
The parameter %1 is required, but no corresponding %2 is supplied.
+
The parameter %1 is passed, but no corresponding %2 exists.
-
+
The URI cannot have a fragment
-
+
Element %1 is not allowed at this location.
+
Text nodes are not allowed at this location.
+
Parse error: %1
+
The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.
+
Running an XSL-T 1.0 stylesheet with a 2.0 processor.
+
Unknown XSL-T attribute %1.
+
Attribute %1 and %2 are mutually exclusive.
+
In a simplified stylesheet module, attribute %1 must be present.
+
If element %1 has no attribute %2, it cannot have attribute %3 or %4.
+
Element %1 must have at least one of the attributes %2 or %3.
+
At least one mode must be specified in the %1-attribute on element %2.
-
+
Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.
+
Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.
+
Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.
+
Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.
+
XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.
+
The attribute %1 must appear on element %2.
+
The element with local name %1 does not exist in XSL-T.
-
+
Element %1 must come last.
+
At least one %1-element must occur before %2.
+
Only one %1-element can appear.
+
At least one %1-element must occur inside %2.
+
When attribute %1 is present on %2, a sequence constructor cannot be used.
+
Element %1 must have either a %2-attribute or a sequence constructor.
+
When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.
+
Element %1 cannot have children.
+
Element %1 cannot have a sequence constructor.
+
+
The attribute %1 cannot appear on %2, when it is a child of %3.
+
A parameter in a function cannot be declared to be a tunnel.
+
This processor is not Schema-aware and therefore %1 cannot be used.
+
Top level stylesheet elements must be in a non-null namespace, which %1 isn't.
+
The value for attribute %1 on element %2 must either be %3 or %4, not %5.
+
Attribute %1 cannot have the value %2.
+
The attribute %1 can only appear on the first %2 element.
+
At least one %1 element must appear as child of %2.
@@ -6305,11 +7731,13 @@ Vælg et andet filnavn.
VolumeSlider
-
+
Muted
+
+
Volume: %1%
Lydstyrke: %1%
diff --git a/translations/qt_help_da.ts b/translations/qt_help_da.ts
index 0e4a362..73609a1 100644
--- a/translations/qt_help_da.ts
+++ b/translations/qt_help_da.ts
@@ -4,27 +4,27 @@
QCLuceneResultWidget
-
+
Search Results
Søgeresultater
-
+
Note:
Bemærk:
-
+
The search results may not be complete since the documentation is still being indexed!
Søgeresultaterne kan være ufuldstændige, fordi dokumentationen stadig indekseres!
-
+
Your search did not match any documents.
Søgningen matchede ikke nogen dokumenter.
-
+
(The reason for this might be that the documentation is still being indexed.)
(Årsagen kan være, at dokumentationen stadig indekseres.)
@@ -32,72 +32,78 @@
QHelpCollectionHandler
-
+
The collection file is not set up yet!
Hjælpesamlingen er ikke konfigureret endnu!
-
+
+ Cannot load sqlite database driver!
+ Kan ikke indlæse sqlite database-driver!
+
+
+
+
Cannot open collection file: %1
Kan ikke åbne hjælpesamlingen: %1
-
+
Cannot create tables in file %1!
Kan ikke oprette tabler i filen %1!
-
+
The specified collection file already exists!
Den angivne hjælpesamling findes allerede!
-
+
Cannot create directory: %1
Kan ikke oprette kataloget: %1
-
+
Cannot copy collection file: %1
Kan ikke kopiere hjælpesamling: %1
-
+
Unknown filter!
Ukendt filter!
-
+
Cannot register filter %1!
Kan ikke registrere filteret %1!
-
+
Cannot open documentation file %1!
Kan ikke åbne dokumentationsfilen %1!
-
+
Invalid documentation file!
Ugyldig dokumentationsfil!
-
+
The namespace %1 was not registered!
Navnerummet %1 blev ikke registreret!
-
+
Namespace %1 already exists!
Navnerummet %1 findes allerede!
-
+
Cannot register namespace!
Kan ikke registrere navnerummet!
-
+
Cannot open database to optimize!
Kan ikke åbne den database, der skal optimeres!
@@ -105,15 +111,19 @@
QHelpDBReader
-
Cannot open DB!
- Kan ikke åbne DB!
+ Kan ikke åbne DB!
+
+
+
+ Cannot open database '%1' '%2': %3
+ Kan ikke åbne database '%1' '%2': %3
QHelpEngineCore
-
+
The specified namespace does not exist!
Det angivne navnerum findes ikke!
@@ -121,125 +131,135 @@
QHelpEngineCorePrivate
-
+
+ Cannot open documentation file %1: %2!
+ Kan ikke åbne dokumentationsfil %1: %2!
+
+
Cannot open collection file %1!
- Kan ikke åbne hjælpesamlingen %1!
+ Kan ikke åbne hjælpesamlingen %1!
-
Cannot open documentation file %1!
- Kan ikke åbne dokumentationsfilen %1!
+ Kan ikke åbne dokumentationsfilen %1!
QHelpGenerator
-
+
Invalid help data!
Ugyldigt hjælpedata!
-
+
No output file name specified!
Der er ikke anført et output-filnavn!
-
The file %1 already exists!
- Filen %1 findes allerede!
+ Filen %1 findes allerede!
-
+
Building up file structure...
Bygger filstruktur...
-
Cannot open DB!
- Kan ikke åbne DB!
+ Kan ikke åbne DB!
+
+
+
+ The file %1 cannot be overwritten!
+ Filen %1 kan ikke overskrives!
-
+
+ Cannot open data base file %1!
+ Kan ikke åbne databasefil %1!
+
+
+
Cannot register namespace %1!
Kan ikke registrere navnerummet %1!
-
+
Insert custom filters...
Indsæt brugerdefinerede filtre...
-
+
Insert help data for filter section (%1 of %2)...
Indsæt hjælpedata til filtersektion (%1 af %2)...
-
+
Documentation successfully generated.
Dokumentationen blev genereret.
-
+
Some tables already exist!
Nogle af tabellerne findes allerede!
-
+
Cannot create tables!
Kan ikke oprette tabeller!
-
+
Cannot register virtual folder!
Kan ikke registrere virtuel mappe!
-
+
Insert files...
Indsæt filer...
-
+
The file %1 does not exist! Skipping it.
Filen %1 findes ikke, og den springes over.
-
+
Cannot open file %1! Skipping it.
Kan ikke åbne filen %1, og den springes over.
-
Cannot insert file data into database!
- Kan ikke indsætte fildata i databasen!
+ Kan ikke indsætte fildata i databasen!
-
+
The filter %1 is already registered!
Filtret %1 er allerede registreret!
-
+
Cannot register filter %1!
Kan ikke registrere filtret %1!
-
+
Insert indices...
Indsæt indeks...
-
+
Insert contents...
Indsæt indhold...
-
+
Cannot insert contents!
Kan ikke indsætte indhold!
-
+
Cannot register contents!
Kan ikke registrere indhold!
@@ -247,42 +267,42 @@
QHelpSearchQueryWidget
-
+
Search for:
Søg efter:
-
+
Search
Søg
-
+
Advanced search
Avanceret søgning
-
+
words <B>similar</B> to:
ord <B>tilsvarende</B>:
-
+
<B>without</B> the words:
<B>uden</B> ordene:
-
+
with <B>exact phrase</B>:
med den <B>eksakte sætning</B>:
-
+
with <B>all</B> of the words:
med <B>alle</B> ordene:
-
+
with <B>at least one</B> of the words:
med <B>mindst ét</B> af ordene:
@@ -290,7 +310,7 @@
QHelpSearchResultWidget
-
+
0 - 0 of 0 Hits
0 - 0 af 0 Hits
@@ -298,7 +318,7 @@
QHelpSearchResultWidgetPrivate
-
+
%1 - %2 of %3 Hits
%1 - %2 af %3 Hits
@@ -306,47 +326,60 @@
QObject
-
+
Untitled
Ingen titel
-
Unknown token at line %1.
- Ukendt symbol på linie %1.
+ Ukendt symbol på linie %1.
-
Unknown token at line %1. Expected "QtHelpProject"!
- Ukendt symbol på linie %1. Forventet "QtHelpProject"!
+ Ukendt symbol på linie %1. Forventet "QtHelpProject"!
+
+
+
+ Unknown token.
+ Ukendt token.
+
+
+
+ Unknown token. Expected "QtHelpProject"!
+ Ukendt token. Forventede "QtHelpProject"!
+
+
+
+ Error in line %1: %2
+ Fejl i linie %1: %2
-
+
A virtual folder must not contain a '/' character!
En virtuel mappe må ikke indholde tegnet '/'!
-
+
A namespace must not contain a '/' character!
Et navnerum må ikke indeholde tegnet '/'!
-
+
Missing namespace in QtHelpProject.
Navnerum i +++ mangler.
-
+
Missing virtual folder in QtHelpProject
Virtuel mappe i QtHelpProject mangler
-
+
Missing attribute in keyword at line %1.
Attribut i nøgleord på linie %1 mangler.
-
+
The input file %1 could not be opened!
Input-filen %1 kunne ikke åbnes!
diff --git a/translations/translations.pri b/translations/translations.pri
index efefa09..0c5c1ee 100644
--- a/translations/translations.pri
+++ b/translations/translations.pri
@@ -21,7 +21,7 @@ LRELEASE = $$fixPath($$QT_BUILD_TREE/bin/lrelease)
###### Qt Libraries
-QT_TS = de fr zh_CN untranslated ar es iw ja_JP pl pt ru sk sv uk zh_TW
+QT_TS = de fr zh_CN untranslated ar es iw ja_JP pl pt ru sk sv uk zh_TW da
ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
3rdparty/phonon \
--
cgit v0.12
From 634954f1648a1ada74ba03f2eecec71e8bcba898 Mon Sep 17 00:00:00 2001
From: Jason McDonald
Date: Wed, 27 May 2009 16:41:53 +1000
Subject: Fix WinCE compile error not fixed by c666b88
You can't implicitly convert QLatin1Char to QString and thus neither to
QFileInfo. Instead do the conversion the correct way, as illustrated by
the code five lines above the line that broke.
Reviewed-by: Lincoln Ramsay
Reviewed-by: Andy Shaw
---
src/corelib/io/qfsfileengine_win.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index 82cde8b..0b87e2b 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -1298,7 +1298,7 @@ QFileInfoList QFSFileEngine::drives()
}
return ret;
#else
- ret.append(QFileInfo(QLatin1Char('/')));
+ ret.append(QString::fromLatin1("/"));
return ret;
#endif
}
--
cgit v0.12
From 5e14efa547ffac5890b008ad23e9ff0bc634a3e1 Mon Sep 17 00:00:00 2001
From: Martin Smith
Date: Wed, 27 May 2009 09:38:32 +0200
Subject: Use GLInt and not uint because of Apple's old header swap
---
src/opengl/qpixmapdata_gl_p.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h
index 536f33d..7e06db9 100644
--- a/src/opengl/qpixmapdata_gl_p.h
+++ b/src/opengl/qpixmapdata_gl_p.h
@@ -116,7 +116,7 @@ private:
int m_height;
mutable QGLFramebufferObject *m_renderFbo;
- mutable uint m_textureId;
+ mutable GLuint m_textureId;
mutable QPaintEngine *m_engine;
mutable QGLContext *m_ctx;
mutable bool m_dirty;
--
cgit v0.12
From 0ea19cf01e2381969a8b8ce8cdaffe9ce873d3a9 Mon Sep 17 00:00:00 2001
From: Olivier Goffart
Date: Mon, 25 May 2009 22:47:06 +0200
Subject: Add a flag that ensure that a connection is made only one
It is often desirable, when doing connection, to ensure that the same
connection is only made once. This can be done with the
Qt::UniqueConnection 'flag'
Also documented the order the slot are called
Reviewed-by: Brad
---
doc/src/qnamespace.qdoc | 4 ++
doc/src/signalsandslots.qdoc | 14 ++++---
src/corelib/global/qnamespace.h | 3 +-
src/corelib/kernel/qobject.cpp | 36 ++++++++++++-----
tests/auto/qobject/tst_qobject.cpp | 81 ++++++++++++++++++++++++++++++++++++--
5 files changed, 119 insertions(+), 19 deletions(-)
diff --git a/doc/src/qnamespace.qdoc b/doc/src/qnamespace.qdoc
index fc4310b..069541f 100644
--- a/doc/src/qnamespace.qdoc
+++ b/doc/src/qnamespace.qdoc
@@ -528,6 +528,10 @@
Qt::DirectConnection; otherwise the
signal is queued, as with
Qt::QueuedConnection.
+ \value UniqueConnection Same as AutoConnection, but there will be a check that the signal is
+ not already connected to the same slot before connecting, otherwise,
+ the connection will fail.
+ \since 4.6
With queued connections, the parameters must be of types that are known to
Qt's meta-object system, because Qt needs to copy the arguments to store them
diff --git a/doc/src/signalsandslots.qdoc b/doc/src/signalsandslots.qdoc
index 5432bd4..29c8215 100644
--- a/doc/src/signalsandslots.qdoc
+++ b/doc/src/signalsandslots.qdoc
@@ -178,9 +178,13 @@
looping in the case of cyclic connections (e.g., if
\c{b.valueChanged()} were connected to \c{a.setValue()}).
- A signal is emitted for every connection you make; if you
- duplicate a connection, two signals will be emitted. You can
- always break a connection using QObject::disconnect().
+ By default, for every connection you make, a signal is emitted;
+ two signals are emitted for duplicate connections. You can break
+ all of these connections with a single disconnect() call.
+ If you pass the Qt::UniqueConnection \a type, the connection will only
+ be made if it is not a duplicate. If there is already a duplicate
+ (exact same signal to the exact same slot on the same objects),
+ the connection will fail and connect will return false
This example illustrates that objects can work together without needing to
know any information about each other. To enable this, the objects only
@@ -218,8 +222,8 @@
will continue immediately, and the slots will be executed later.
If several slots are connected to one signal, the slots will be
- executed one after the other, in an arbitrary order, when the signal
- is emitted.
+ executed one after the other, in the order they have been connected,
+ when the signal is emitted.
Signals are automatically generated by the \l moc and must not be
implemented in the \c .cpp file. They can never have return types
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 3367581..9e53d89 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -1327,7 +1327,8 @@ public:
DirectConnection,
QueuedConnection,
AutoCompatConnection,
- BlockingQueuedConnection
+ BlockingQueuedConnection,
+ UniqueConnection = 0x80
};
enum ShortcutContext {
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 65d81f1..be622d9 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -301,7 +301,6 @@ void QObjectPrivate::addConnection(int signal, Connection *c)
ConnectionList &connectionList = (*connectionLists)[signal];
connectionList.append(c);
-
cleanConnectionLists();
}
@@ -2377,7 +2376,8 @@ int QObject::receivers(const char *signal) const
can be connected to one slot.
If a signal is connected to several slots, the slots are activated
- in an arbitrary order when the signal is emitted.
+ in the same order as the order the connection was made, when the
+ signal is emitted.
The function returns true if it successfully connects the signal
to the slot. It will return false if it cannot create the
@@ -2385,9 +2385,13 @@ int QObject::receivers(const char *signal) const
existence of either \a signal or \a method, or if their signatures
aren't compatible.
- For every connection you make, a signal is emitted; two signals are emitted
- for duplicate connections. You can break all of these connections with a
- single disconnect() call.
+ By default, a signal is emitted for every connection you make;
+ two signals are emitted for duplicate connections. You can break
+ all of these connections with a single disconnect() call.
+ If you pass the Qt::UniqueConnection \a type, the connection will only
+ be made if it is not a duplicate. If there is already a duplicate
+ (exact same signal to the exact same slot on the same objects),
+ the connection will fail and connect will return false
The optional \a type parameter describes the type of connection
to establish. In particular, it determines whether a particular
@@ -2520,7 +2524,8 @@ bool QObject::connect(const QObject *sender, const char *signal,
}
}
#endif
- QMetaObject::connect(sender, signal_index, receiver, method_index, type, types);
+ if (!QMetaObject::connect(sender, signal_index, receiver, method_index, type, types))
+ return false;
const_cast(sender)->connectNotify(signal - 1);
return true;
}
@@ -2771,6 +2776,22 @@ bool QMetaObject::connect(const QObject *sender, int signal_index,
QObject *s = const_cast(sender);
QObject *r = const_cast(receiver);
+ QOrderedMutexLocker locker(signalSlotLock(sender),
+ signalSlotLock(receiver));
+
+ if (type & Qt::UniqueConnection) {
+ QObjectConnectionListVector *connectionLists = s->d_func()->connectionLists;
+ if (connectionLists && connectionLists->count() > signal_index) {
+ QObjectPrivate::ConnectionList &connectionList = (*connectionLists)[signal_index];
+ for (int i = 0; i < connectionList.count(); ++i) {
+ QObjectPrivate::Connection *c2 = connectionList.at(i);
+ if (c2->receiver == receiver && c2->method == method_index)
+ return false;
+ }
+ }
+ type &= Qt::UniqueConnection - 1;
+ }
+
QObjectPrivate::Connection *c = new QObjectPrivate::Connection;
c->sender = s;
c->receiver = r;
@@ -2778,9 +2799,6 @@ bool QMetaObject::connect(const QObject *sender, int signal_index,
c->connectionType = type;
c->argumentTypes = types;
- QOrderedMutexLocker locker(signalSlotLock(sender),
- signalSlotLock(receiver));
-
s->d_func()->addConnection(signal_index, c);
r->d_func()->senders.append(c);
diff --git a/tests/auto/qobject/tst_qobject.cpp b/tests/auto/qobject/tst_qobject.cpp
index fb46073..399d021 100644
--- a/tests/auto/qobject/tst_qobject.cpp
+++ b/tests/auto/qobject/tst_qobject.cpp
@@ -116,6 +116,7 @@ private slots:
void dumpObjectInfo();
void connectToSender();
void qobjectConstCast();
+ void uniqConnection();
protected:
};
@@ -204,12 +205,20 @@ public:
sequence_slot3 = 0;
sequence_slot2 = 0;
sequence_slot1 = 0;
+ count_slot1 = 0;
+ count_slot2 = 0;
+ count_slot3 = 0;
+ count_slot4 = 0;
}
int sequence_slot1;
int sequence_slot2;
int sequence_slot3;
int sequence_slot4;
+ int count_slot1;
+ int count_slot2;
+ int count_slot3;
+ int count_slot4;
bool called(int slot) {
switch (slot) {
@@ -224,10 +233,10 @@ public:
static int sequence;
public slots:
- void slot1() { sequence_slot1 = ++sequence; }
- void slot2() { sequence_slot2 = ++sequence; }
- void slot3() { sequence_slot3 = ++sequence; }
- void slot4() { sequence_slot4 = ++sequence; }
+ void slot1() { sequence_slot1 = ++sequence; count_slot1++; }
+ void slot2() { sequence_slot2 = ++sequence; count_slot2++; }
+ void slot3() { sequence_slot3 = ++sequence; count_slot3++; }
+ void slot4() { sequence_slot4 = ++sequence; count_slot4++; }
};
@@ -2783,5 +2792,69 @@ void tst_QObject::qobjectConstCast()
QVERIFY(qobject_cast(cptr));
}
+void tst_QObject::uniqConnection()
+{
+ SenderObject *s = new SenderObject;
+ ReceiverObject *r1 = new ReceiverObject;
+ ReceiverObject *r2 = new ReceiverObject;
+ r1->reset();
+ r2->reset();
+ ReceiverObject::sequence = 0;
+
+ QVERIFY( connect( s, SIGNAL( signal1() ), r1, SLOT( slot1() ) , Qt::UniqueConnection) );
+ QVERIFY( connect( s, SIGNAL( signal1() ), r2, SLOT( slot1() ) , Qt::UniqueConnection) );
+ QVERIFY( connect( s, SIGNAL( signal1() ), r1, SLOT( slot3() ) , Qt::UniqueConnection) );
+ QVERIFY( connect( s, SIGNAL( signal3() ), r1, SLOT( slot3() ) , Qt::UniqueConnection) );
+
+ s->emitSignal1();
+ s->emitSignal2();
+ s->emitSignal3();
+ s->emitSignal4();
+
+ QCOMPARE( r1->count_slot1, 1 );
+ QCOMPARE( r1->count_slot2, 0 );
+ QCOMPARE( r1->count_slot3, 2 );
+ QCOMPARE( r1->count_slot4, 0 );
+ QCOMPARE( r2->count_slot1, 1 );
+ QCOMPARE( r2->count_slot2, 0 );
+ QCOMPARE( r2->count_slot3, 0 );
+ QCOMPARE( r2->count_slot4, 0 );
+ QCOMPARE( r1->sequence_slot1, 1 );
+ QCOMPARE( r2->sequence_slot1, 2 );
+ QCOMPARE( r1->sequence_slot3, 4 );
+
+ r1->reset();
+ r2->reset();
+ ReceiverObject::sequence = 0;
+
+ QVERIFY( connect( s, SIGNAL( signal4() ), r1, SLOT( slot4() ) , Qt::UniqueConnection) );
+ QVERIFY( connect( s, SIGNAL( signal4() ), r2, SLOT( slot4() ) , Qt::UniqueConnection) );
+ QVERIFY(!connect( s, SIGNAL( signal4() ), r2, SLOT( slot4() ) , Qt::UniqueConnection) );
+ QVERIFY( connect( s, SIGNAL( signal1() ), r2, SLOT( slot4() ) , Qt::UniqueConnection) );
+ QVERIFY(!connect( s, SIGNAL( signal4() ), r1, SLOT( slot4() ) , Qt::UniqueConnection) );
+
+ s->emitSignal4();
+ QCOMPARE( r1->count_slot4, 1 );
+ QCOMPARE( r2->count_slot4, 1 );
+ QCOMPARE( r1->sequence_slot4, 1 );
+ QCOMPARE( r2->sequence_slot4, 2 );
+
+ r1->reset();
+ r2->reset();
+ ReceiverObject::sequence = 0;
+
+ connect( s, SIGNAL( signal4() ), r1, SLOT( slot4() ) );
+
+ s->emitSignal4();
+ QCOMPARE( r1->count_slot4, 2 );
+ QCOMPARE( r2->count_slot4, 1 );
+ QCOMPARE( r1->sequence_slot4, 3 );
+ QCOMPARE( r2->sequence_slot4, 2 );
+
+ delete s;
+ delete r1;
+ delete r2;
+}
+
QTEST_MAIN(tst_QObject)
#include "tst_qobject.moc"
--
cgit v0.12
From 00ffd16d367a19f958149b3b4ec5f5c5e6b71f9b Mon Sep 17 00:00:00 2001
From: Olivier Goffart
Date: Wed, 27 May 2009 09:56:16 +0200
Subject: Do not use the locale in QDoubleSpinBoxPrivate::round
We had a report from a customer saying this breaks if the decimal
separator is the same as the group separator. This is not really
something we want to support, but because this fix is easy and cleanup
the code I decided to fix it.
Reviewed-by: Thierry
Task-number: 253962
---
src/gui/widgets/qspinbox.cpp | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/gui/widgets/qspinbox.cpp b/src/gui/widgets/qspinbox.cpp
index b7426f0..f12946c 100644
--- a/src/gui/widgets/qspinbox.cpp
+++ b/src/gui/widgets/qspinbox.cpp
@@ -1254,9 +1254,7 @@ QVariant QDoubleSpinBoxPrivate::valueFromText(const QString &f) const
double QDoubleSpinBoxPrivate::round(double value) const
{
- Q_Q(const QDoubleSpinBox);
- const QString strDbl = q->locale().toString(value, 'f', decimals);
- return q->locale().toDouble(strDbl);
+ return QString::number(value, 'f', decimals).toDouble();
}
--
cgit v0.12
From 0bcfa7aa496d460c72862369662560c49eb55f17 Mon Sep 17 00:00:00 2001
From: Thierry Bastian
Date: Wed, 27 May 2009 11:48:20 +0200
Subject: small refactor to change the interpolator at the same time as the
current interval in the variant animations
---
src/corelib/animation/qpropertyanimation.cpp | 11 ++++---
src/corelib/animation/qpropertyanimation_p.h | 2 +-
src/corelib/animation/qvariantanimation.cpp | 43 +++++++++++++++++++---------
src/corelib/animation/qvariantanimation_p.h | 18 ++++--------
4 files changed, 40 insertions(+), 34 deletions(-)
diff --git a/src/corelib/animation/qpropertyanimation.cpp b/src/corelib/animation/qpropertyanimation.cpp
index 9a17049..47361a5 100644
--- a/src/corelib/animation/qpropertyanimation.cpp
+++ b/src/corelib/animation/qpropertyanimation.cpp
@@ -110,17 +110,16 @@ void QPropertyAnimationPrivate::updateMetaProperty()
if (!target || propertyName.isEmpty())
return;
- if (hasMetaProperty == 0 && !property.isValid()) {
+ if (!hasMetaProperty && !property.isValid()) {
const QMetaObject *mo = target->metaObject();
propertyIndex = mo->indexOfProperty(propertyName);
if (propertyIndex != -1) {
- hasMetaProperty = 1;
+ hasMetaProperty = true;
property = mo->property(propertyIndex);
propertyType = property.userType();
} else {
if (!target->dynamicPropertyNames().contains(propertyName))
qWarning("QPropertyAnimation: you're trying to animate a non-existing property %s of your QObject", propertyName.constData());
- hasMetaProperty = 2;
}
}
@@ -133,7 +132,7 @@ void QPropertyAnimationPrivate::updateProperty(const QVariant &newValue)
if (!target || state == QAbstractAnimation::Stopped)
return;
- if (hasMetaProperty == 1) {
+ if (hasMetaProperty) {
if (newValue.userType() == propertyType) {
//no conversion is needed, we directly call the QObject::qt_metacall
void *data = const_cast(newValue.constData());
@@ -216,7 +215,7 @@ void QPropertyAnimation::setTargetObject(QObject *target)
connect(target, SIGNAL(destroyed()), SLOT(_q_targetDestroyed()));
d->target = target;
- d->hasMetaProperty = 0;
+ d->hasMetaProperty = false;
d->updateMetaProperty();
}
@@ -242,7 +241,7 @@ void QPropertyAnimation::setPropertyName(const QByteArray &propertyName)
}
d->propertyName = propertyName;
- d->hasMetaProperty = 0;
+ d->hasMetaProperty = false;
d->updateMetaProperty();
}
diff --git a/src/corelib/animation/qpropertyanimation_p.h b/src/corelib/animation/qpropertyanimation_p.h
index b51d039..a4387dd 100644
--- a/src/corelib/animation/qpropertyanimation_p.h
+++ b/src/corelib/animation/qpropertyanimation_p.h
@@ -78,7 +78,7 @@ public:
int propertyType;
int propertyIndex;
- int hasMetaProperty;
+ bool hasMetaProperty;
QByteArray propertyName;
void updateProperty(const QVariant &);
void updateMetaProperty();
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index 239add9..e973ec5 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -144,6 +144,11 @@ static bool animationValueLessThan(const QVariantAnimation::KeyValue &p1, const
return p1.first < p2.first;
}
+static QVariant defaultInterpolator(const void *, const void *, qreal)
+{
+ return QVariant();
+}
+
template<> Q_INLINE_TEMPLATE QRect _q_interpolate(const QRect &f, const QRect &t, qreal progress)
{
QRect ret;
@@ -174,6 +179,13 @@ template<> Q_INLINE_TEMPLATE QLineF _q_interpolate(const QLineF &f, const QLineF
return QLineF( _q_interpolate(f.p1(), t.p1(), progress), _q_interpolate(f.p2(), t.p2(), progress));
}
+QVariantAnimationPrivate::QVariantAnimationPrivate() : duration(250), hasStartValue(false),
+ interpolator(&defaultInterpolator),
+ changedSignalMask(1 << QVariantAnimation::staticMetaObject.indexOfSignal("valueChanged(QVariant)"))
+{
+ //we keep the mask so that we emit valueChanged only when needed (for performance reasons)
+}
+
void QVariantAnimationPrivate::convertValues(int t)
{
//this ensures that all the keyValues are of type t
@@ -186,7 +198,20 @@ void QVariantAnimationPrivate::convertValues(int t)
currentInterval.end.second.convert(static_cast(t));
//... and the interpolator
- interpolator = 0;
+ updateInterpolator();
+}
+
+void QVariantAnimationPrivate::updateInterpolator()
+{
+ int type = currentInterval.start.second.userType();
+ if (type == currentInterval.end.second.userType())
+ interpolator = getInterpolator(type);
+ else
+ interpolator = 0;
+
+ //we make sure that the interpolator is always set to something
+ if (!interpolator)
+ interpolator = &defaultInterpolator;
}
/*!
@@ -224,6 +249,7 @@ void QVariantAnimationPrivate::recalculateCurrentInterval(bool force/*=false*/)
// update all the values of the currentInterval
currentInterval.start = *itStart;
currentInterval.end = *itEnd;
+ updateInterpolator();
}
}
setCurrentValueForProgress(progress);
@@ -295,7 +321,6 @@ void QVariantAnimationPrivate::setDefaultStartValue(const QVariant &value)
*/
QVariantAnimation::QVariantAnimation(QObject *parent) : QAbstractAnimation(*new QVariantAnimationPrivate, parent)
{
- d_func()->init();
}
/*!
@@ -303,7 +328,6 @@ QVariantAnimation::QVariantAnimation(QObject *parent) : QAbstractAnimation(*new
*/
QVariantAnimation::QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent) : QAbstractAnimation(dd, parent)
{
- d_func()->init();
}
/*!
@@ -629,15 +653,7 @@ void QVariantAnimation::updateState(QAbstractAnimation::State oldState,
*/
QVariant QVariantAnimation::interpolated(const QVariant &from, const QVariant &to, qreal progress) const
{
- Q_D(const QVariantAnimation);
- if (d->interpolator == 0) {
- if (from.userType() == to.userType())
- d->interpolator = QVariantAnimationPrivate::getInterpolator(from.userType());
- if (d->interpolator == 0) //no interpolator found
- return QVariant();
- }
-
- return d->interpolator(from.constData(), to.constData(), progress);
+ return d_func()->interpolator(from.constData(), to.constData(), progress);
}
/*!
@@ -645,9 +661,8 @@ QVariant QVariantAnimation::interpolated(const QVariant &from, const QVariant &t
*/
void QVariantAnimation::updateCurrentTime(int msecs)
{
- Q_D(QVariantAnimation);
Q_UNUSED(msecs);
- d->recalculateCurrentInterval();
+ d_func()->recalculateCurrentInterval();
}
QT_END_NAMESPACE
diff --git a/src/corelib/animation/qvariantanimation_p.h b/src/corelib/animation/qvariantanimation_p.h
index 0d296db..2c559cf 100644
--- a/src/corelib/animation/qvariantanimation_p.h
+++ b/src/corelib/animation/qvariantanimation_p.h
@@ -67,17 +67,7 @@ class QVariantAnimationPrivate : public QAbstractAnimationPrivate
Q_DECLARE_PUBLIC(QVariantAnimation)
public:
- QVariantAnimationPrivate() : duration(250), hasStartValue(false)
- {
- }
-
- void init()
- {
- //we keep the mask so that we emit valueChanged only when needed (for performance reasons)
- changedSignalMask = (1 << q_func()->metaObject()->indexOfSignal("valueChanged(QVariant)"));
- currentInterval.start.first = currentInterval.end.first = 2; //will force the initial refresh
- interpolator = 0;
- }
+ QVariantAnimationPrivate();
static QVariantAnimationPrivate *get(QVariantAnimation *q)
{
@@ -100,9 +90,9 @@ public:
QVariantAnimation::KeyValue start, end;
} currentInterval;
- mutable QVariantAnimation::Interpolator interpolator;
+ QVariantAnimation::Interpolator interpolator;
- quint32 changedSignalMask;
+ const quint32 changedSignalMask;
void setCurrentValueForProgress(const qreal progress);
void recalculateCurrentInterval(bool force=false);
@@ -110,6 +100,8 @@ public:
QVariant valueAt(qreal step) const;
void convertValues(int t);
+ void updateInterpolator();
+
static QVariantAnimation::Interpolator getInterpolator(int interpolationType);
};
--
cgit v0.12
From 80bc757b56953065fafeffe6c4b8fb6fbca287ac Mon Sep 17 00:00:00 2001
From: Alexis Menard
Date: Wed, 27 May 2009 10:30:07 +0200
Subject: Avoid deep copies of pixmaps when using cache in QGraphicsView.
When we have already a pixmap of an item in the cache, we should
remove the entry from the cache otherwise when we will repaint/modify
the copy of the pixmap (the copy of the cache) then we will trigger a
deep copy ; this is because both entries in the cache and our copy
share the same data and if you modify one of them a copy is triggered.
I have added a benchmark as well to test that.
Reviewed-by:bnilsen
Reviewed-by:andreas
---
src/gui/graphicsview/qgraphicsscene.cpp | 28 +++---
.../benchmarks/qgraphicsview/images/wine-big.jpeg | Bin 0 -> 12249 bytes
tests/benchmarks/qgraphicsview/qgraphicsview.qrc | 1 +
.../benchmarks/qgraphicsview/tst_qgraphicsview.cpp | 102 +++++++++++++++++++++
4 files changed, 118 insertions(+), 13 deletions(-)
create mode 100644 tests/benchmarks/qgraphicsview/images/wine-big.jpeg
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 126ea5b..1fc4567 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4784,6 +4784,12 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
// Redraw any newly exposed areas.
if (itemCache->allExposed || !itemCache->exposed.isEmpty()) {
+
+ //We know that we will modify the pixmap, removing it from the cache
+ //will detach the one we have and avoid a deep copy
+ if (pixmapFound)
+ QPixmapCache::remove(pixmapKey);
+
// Fit the item's bounding rect into the pixmap's coordinates.
QTransform itemToPixmap;
if (fixedCacheSize) {
@@ -4812,12 +4818,8 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
_q_paintIntoCache(&pix, item, pixmapExposed, itemToPixmap, painter->renderHints(),
&cacheOption, painterStateProtection);
- if (!pixmapFound) {
- // insert this pixmap into the cache.
- itemCache->key = QPixmapCache::insert(pix);
- } else {
- QPixmapCache::replace(pixmapKey, pix);
- }
+ // insert this pixmap into the cache.
+ itemCache->key = QPixmapCache::insert(pix);
// Reset expose data.
itemCache->allExposed = false;
@@ -4944,6 +4946,11 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
// Check for newly invalidated areas.
if (itemCache->allExposed || !itemCache->exposed.isEmpty() || !scrollExposure.isEmpty()) {
+ //We know that we will modify the pixmap, removing it from the cache
+ //will detach the one we have and avoid a deep copy
+ if (pixmapFound)
+ QPixmapCache::remove(pixmapKey);
+
// Construct an item-to-pixmap transform.
QPointF p = deviceRect.topLeft();
QTransform itemToPixmap = painter->worldTransform();
@@ -4984,13 +4991,8 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
}
if (pixModified) {
- if (!pixmapFound) {
- // Insert this pixmap into the cache.
- deviceData->key = QPixmapCache::insert(pix);
- } else {
- //otherwise we replace the pixmap in the cache
- QPixmapCache::replace(pixmapKey, pix);
- }
+ // Insert this pixmap into the cache.
+ deviceData->key = QPixmapCache::insert(pix);
}
// Redraw the exposed area using an untransformed painter. This
diff --git a/tests/benchmarks/qgraphicsview/images/wine-big.jpeg b/tests/benchmarks/qgraphicsview/images/wine-big.jpeg
new file mode 100644
index 0000000..9900a50
Binary files /dev/null and b/tests/benchmarks/qgraphicsview/images/wine-big.jpeg differ
diff --git a/tests/benchmarks/qgraphicsview/qgraphicsview.qrc b/tests/benchmarks/qgraphicsview/qgraphicsview.qrc
index 5e80029..3681648 100644
--- a/tests/benchmarks/qgraphicsview/qgraphicsview.qrc
+++ b/tests/benchmarks/qgraphicsview/qgraphicsview.qrc
@@ -2,6 +2,7 @@
images/designer.png
images/wine.jpeg
+ images/wine-big.jpeg
random.data
diff --git a/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp b/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp
index a06e033..570f744 100644
--- a/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp
@@ -124,6 +124,8 @@ private slots:
void textRiver();
void moveItemCache_data();
void moveItemCache();
+ void paintItemCache_data();
+ void paintItemCache();
};
tst_QGraphicsView::tst_QGraphicsView()
@@ -796,5 +798,105 @@ void tst_QGraphicsView::moveItemCache()
}
}
+class UpdatedPixmapCacheItem : public QGraphicsPixmapItem
+{
+public:
+ UpdatedPixmapCacheItem(bool partial, QGraphicsItem *parent = 0)
+ : QGraphicsPixmapItem(parent), partial(partial)
+ {
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0)
+ {
+ QGraphicsPixmapItem::paint(painter,option,widget);
+ }
+protected:
+ void advance(int i)
+ {
+ if (partial)
+ update(QRectF(boundingRect().center().x(), boundingRect().center().x(), 30, 30));
+ else
+ update();
+ }
+
+private:
+ bool partial;
+};
+
+void tst_QGraphicsView::paintItemCache_data()
+{
+ QTest::addColumn("updatePartial");
+ QTest::addColumn("rotation");
+ QTest::addColumn("cacheMode");
+ QTest::newRow("Partial Update : ItemCoordinate Cache") << true << false << (int)QGraphicsItem::ItemCoordinateCache;
+ QTest::newRow("Partial Update : DeviceCoordinate Cache") << true << false << (int)QGraphicsItem::DeviceCoordinateCache;
+ QTest::newRow("Partial Update : No Cache") << true << false << (int)QGraphicsItem::NoCache;
+ QTest::newRow("Full Update : ItemCoordinate Cache") << false << false << (int)QGraphicsItem::ItemCoordinateCache;
+ QTest::newRow("Full Update : DeviceCoordinate Cache") << false << false << (int)QGraphicsItem::DeviceCoordinateCache;
+ QTest::newRow("Full Update : No Cache") << false << false << (int)QGraphicsItem::NoCache;
+ QTest::newRow("Partial Update : ItemCoordinate Cache item rotated") << true << true << (int)QGraphicsItem::ItemCoordinateCache;
+ QTest::newRow("Partial Update : DeviceCoordinate Cache item rotated") << true << true << (int)QGraphicsItem::DeviceCoordinateCache;
+ QTest::newRow("Partial Update : No Cache item rotated") << true << true << (int)QGraphicsItem::NoCache;
+ QTest::newRow("Full Update : ItemCoordinate Cache item rotated") << false << true << (int)QGraphicsItem::ItemCoordinateCache;
+ QTest::newRow("Full Update : DeviceCoordinate Cache item rotated") << false << true << (int)QGraphicsItem::DeviceCoordinateCache;
+ QTest::newRow("Full Update : No Cache item rotated") << false << true <<(int)QGraphicsItem::NoCache;
+}
+
+void tst_QGraphicsView::paintItemCache()
+{
+ QFETCH(bool, updatePartial);
+ QFETCH(bool, rotation);
+ QFETCH(int, cacheMode);
+
+ QGraphicsScene scene(0, 0, 300, 300);
+
+ CountPaintEventView view(&scene);
+ view.resize(600, 600);
+ view.setFrameStyle(0);
+ view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ view.show();
+
+ QPixmap pix(":/images/wine.jpeg");
+ QVERIFY(!pix.isNull());
+
+ QList items;
+ QFile file(":/random.data");
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QDataStream str(&file);
+ UpdatedPixmapCacheItem *item = new UpdatedPixmapCacheItem(updatePartial);
+ item->setPixmap(pix);
+ item->setCacheMode((QGraphicsItem::CacheMode)cacheMode);
+ if (rotation)
+ item->setTransform(QTransform().rotate(45));
+ item->setPos(-100, -100);
+ scene.addItem(item);
+
+ QPixmap pix2(":/images/wine-big.jpeg");
+ item = new UpdatedPixmapCacheItem(updatePartial);
+ item->setPixmap(pix2);
+ item->setCacheMode((QGraphicsItem::CacheMode)cacheMode);
+ if (rotation)
+ item->setTransform(QTransform().rotate(45));
+ item->setPos(0, 0);
+ scene.addItem(item);
+
+ view.count = 0;
+
+ QBENCHMARK {
+#ifdef CALLGRIND_DEBUG
+ CALLGRIND_START_INSTRUMENTATION
+#endif
+ for (int i = 0; i < 50; ++i) {
+ scene.advance();
+ while (view.count < (i+1))
+ qApp->processEvents();
+ }
+#ifdef CALLGRIND_DEBUG
+ CALLGRIND_STOP_INSTRUMENTATION
+#endif
+ }
+}
+
QTEST_MAIN(tst_QGraphicsView)
#include "tst_qgraphicsview.moc"
--
cgit v0.12
From 2c1b11f2192fd48da01a1093a7cb4a848de43c8a Mon Sep 17 00:00:00 2001
From: Trond Kjernaasen
Date: Wed, 27 May 2009 11:11:57 +0200
Subject: Fixed aliasing pointer corruption in QDataStream.
Use a union instead of an unsafe cast when swapping the bytes in
the QDataStream streaming operators. The old seems to cause problems
with Link Time Code Generation optimizations with the MSVC compilers.
Task-number: 247708
Reviewed-by: Samuel
Reviewed-by: Thiago
BT: yes
---
src/corelib/io/qdatastream.cpp | 92 +++++++++++++++++++++++++++++++++++-------
1 file changed, 77 insertions(+), 15 deletions(-)
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index b203899..e324ffe 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -622,11 +622,16 @@ QDataStream &QDataStream::operator>>(qint16 &i)
setStatus(ReadPastEnd);
}
} else {
- register uchar *p = (uchar *)(&i);
+ union {
+ qint16 val1;
+ char val2[2];
+ } x;
+ char *p = x.val2;
char b[2];
if (dev->read(b, 2) == 2) {
*p++ = b[1];
*p = b[0];
+ i = x.val1;
} else {
setStatus(ReadPastEnd);
}
@@ -660,13 +665,18 @@ QDataStream &QDataStream::operator>>(qint32 &i)
setStatus(ReadPastEnd);
}
} else { // swap bytes
- uchar *p = (uchar *)(&i);
+ union {
+ qint32 val1;
+ char val2[4];
+ } x;
+ char *p = x.val2;
char b[4];
if (dev->read(b, 4) == 4) {
*p++ = b[3];
*p++ = b[2];
*p++ = b[1];
*p = b[0];
+ i = x.val1;
} else {
setStatus(ReadPastEnd);
}
@@ -703,7 +713,12 @@ QDataStream &QDataStream::operator>>(qint64 &i)
setStatus(ReadPastEnd);
}
} else { // swap bytes
- uchar *p = (uchar *)(&i);
+ union {
+ qint64 val1;
+ char val2[8];
+ } x;
+
+ char *p = x.val2;
char b[8];
if (dev->read(b, 8) == 8) {
*p++ = b[7];
@@ -714,6 +729,7 @@ QDataStream &QDataStream::operator>>(qint64 &i)
*p++ = b[2];
*p++ = b[1];
*p = b[0];
+ i = x.val1;
} else {
setStatus(ReadPastEnd);
}
@@ -751,13 +767,19 @@ QDataStream &QDataStream::operator>>(float &f)
setStatus(ReadPastEnd);
}
} else { // swap bytes
- uchar *p = (uchar *)(&f);
+ union {
+ float val1;
+ char val2[4];
+ } x;
+
+ char *p = x.val2;
char b[4];
if (dev->read(b, 4) == 4) {
*p++ = b[3];
*p++ = b[2];
*p++ = b[1];
*p = b[0];
+ f = x.val1;
} else {
setStatus(ReadPastEnd);
}
@@ -788,7 +810,11 @@ QDataStream &QDataStream::operator>>(double &f)
setStatus(ReadPastEnd);
}
} else { // swap bytes
- register uchar *p = (uchar *)(&f);
+ union {
+ double val1;
+ char val2[8];
+ } x;
+ char *p = x.val2;
char b[8];
if (dev->read(b, 8) == 8) {
*p++ = b[7];
@@ -799,13 +825,18 @@ QDataStream &QDataStream::operator>>(double &f)
*p++ = b[2];
*p++ = b[1];
*p = b[0];
+ f = x.val1;
} else {
setStatus(ReadPastEnd);
}
}
#else
//non-standard floating point format
- register uchar *p = (uchar *)(&f);
+ union {
+ double val1;
+ char val2[8];
+ } x;
+ char *p = x.val2;
char b[8];
if (dev->read(b, 8) == 8) {
if (noswap) {
@@ -827,6 +858,7 @@ QDataStream &QDataStream::operator>>(double &f)
*p++ = b[Q_DF(1)];
*p = b[Q_DF(0)];
}
+ f = x.val1;
} else {
setStatus(ReadPastEnd);
}
@@ -970,7 +1002,12 @@ QDataStream &QDataStream::operator<<(qint16 i)
if (noswap) {
dev->write((char *)&i, sizeof(qint16));
} else { // swap bytes
- register uchar *p = (uchar *)(&i);
+ union {
+ qint16 val1;
+ char val2[2];
+ } x;
+ x.val1 = i;
+ char *p = x.val2;
char b[2];
b[1] = *p++;
b[0] = *p;
@@ -992,7 +1029,12 @@ QDataStream &QDataStream::operator<<(qint32 i)
if (noswap) {
dev->write((char *)&i, sizeof(qint32));
} else { // swap bytes
- register uchar *p = (uchar *)(&i);
+ union {
+ qint32 val1;
+ char val2[4];
+ } x;
+ x.val1 = i;
+ char *p = x.val2;
char b[4];
b[3] = *p++;
b[2] = *p++;
@@ -1022,13 +1064,18 @@ QDataStream &QDataStream::operator<<(qint64 i)
{
CHECK_STREAM_PRECOND(*this)
if (version() < 6) {
- quint32 i1 = i & 0xffffffff;
- quint32 i2 = i >> 32;
- *this << i2 << i1;
+ quint32 i1 = i & 0xffffffff;
+ quint32 i2 = i >> 32;
+ *this << i2 << i1;
} else if (noswap) { // no conversion needed
dev->write((char *)&i, sizeof(qint64));
} else { // swap bytes
- register uchar *p = (uchar *)(&i);
+ union {
+ qint64 val1;
+ char val2[8];
+ } x;
+ x.val1 = i;
+ char *p = x.val2;
char b[8];
b[7] = *p++;
b[6] = *p++;
@@ -1077,7 +1124,12 @@ QDataStream &QDataStream::operator<<(float f)
if (noswap) { // no conversion needed
dev->write((char *)&g, sizeof(float));
} else { // swap bytes
- register uchar *p = (uchar *)(&g);
+ union {
+ float val1;
+ char val2[4];
+ } x;
+ x.val1 = f;
+ char *p = x.val2;
char b[4];
b[3] = *p++;
b[2] = *p++;
@@ -1103,7 +1155,12 @@ QDataStream &QDataStream::operator<<(double f)
if (noswap) {
dev->write((char *)&f, sizeof(double));
} else {
- register uchar *p = (uchar *)(&f);
+ union {
+ double val1;
+ char val2[8];
+ } x;
+ x.val1 = f;
+ char *p = x.val2;
char b[8];
b[7] = *p++;
b[6] = *p++;
@@ -1116,7 +1173,12 @@ QDataStream &QDataStream::operator<<(double f)
dev->write(b, 8);
}
#else
- register uchar *p = (uchar *)(&f);
+ union {
+ double val1;
+ char val2[8];
+ } x;
+ x.val1 = f;
+ char *p = x.val2;
char b[8];
if (noswap) {
b[Q_DF(0)] = *p++;
--
cgit v0.12
From cfdfdf079c4a2095c588dd8af8403c74d2cfa37a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuel=20R=C3=B8dal?=
Date: Wed, 27 May 2009 09:44:14 +0200
Subject: Optimized QRasterPixmapData::metric.
Avoid needless DPI calculations when not needed, and simplify the DPI
calculations to the point where most of the operations disappear. Also
avoid calling QImage::metric() so that we don't need to go through two
switch statements and an extra function call just to get the width of a
pixmap.
Reviewed-by: Trond
---
src/gui/image/qpixmap_raster.cpp | 33 ++++++++++++++++++++++-----------
1 file changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/gui/image/qpixmap_raster.cpp b/src/gui/image/qpixmap_raster.cpp
index b5556cd..29e4f3f 100644
--- a/src/gui/image/qpixmap_raster.cpp
+++ b/src/gui/image/qpixmap_raster.cpp
@@ -322,25 +322,36 @@ extern int qt_defaultDpiY();
int QRasterPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const
{
+ QImageData *d = image.d;
+ if (!d)
+ return 0;
+
// override the image dpi with the screen dpi when rendering to a pixmap
- const int dpmX = qRound(qt_defaultDpiX() * 100 / qreal(2.54));
- const int dpmY = qRound(qt_defaultDpiY() * 100 / qreal(2.54));
switch (metric) {
+ case QPaintDevice::PdmWidth:
+ return d->width;
+ case QPaintDevice::PdmHeight:
+ return d->height;
case QPaintDevice::PdmWidthMM:
- return qRound(image.width() * 1000 / dpmX);
+ return qRound(d->width * 25.4 / qt_defaultDpiX());
case QPaintDevice::PdmHeightMM:
- return qRound(image.height() * 1000 / dpmY);
- case QPaintDevice::PdmDpiX:
- return qRound(dpmX * qreal(0.0254));
- case QPaintDevice::PdmDpiY:
- return qRound(dpmY * qreal(0.0254));
+ return qRound(d->width * 25.4 / qt_defaultDpiY());
+ case QPaintDevice::PdmNumColors:
+ return d->colortable.size();
+ case QPaintDevice::PdmDepth:
+ return d->depth;
+ case QPaintDevice::PdmDpiX: // fall-through
case QPaintDevice::PdmPhysicalDpiX:
- return qRound(dpmX * qreal(0.0254));
+ return qt_defaultDpiX();
+ case QPaintDevice::PdmDpiY: // fall-through
case QPaintDevice::PdmPhysicalDpiY:
- return qRound(dpmY * qreal(0.0254));
+ return qt_defaultDpiY();
default:
- return image.metric(metric);
+ qWarning("QRasterPixmapData::metric(): Unhandled metric type %d", metric);
+ break;
}
+
+ return 0;
}
QImage* QRasterPixmapData::buffer()
--
cgit v0.12
From 15c8f565973592c9929cdd6fc83d61641aa63afa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuel=20R=C3=B8dal?=
Date: Mon, 25 May 2009 14:56:27 +0200
Subject: Fixed bugs in GL2 paint engine when several engines are active.
Make sure makeCurrent() on a window surface unbinds any active FBO, and
simplify ensureActive() code in GL2 paint engine a bit. We don't need
the last_engine pointer as ensureActive() will take care of ensuring the
correct engine is active anway.
---
.../gl2paintengineex/qpaintengineex_opengl2.cpp | 46 ++++++++--------------
src/opengl/qgl.cpp | 15 +++++++
src/opengl/qgl_p.h | 1 +
src/opengl/qglframebufferobject.cpp | 12 ++++--
4 files changed, 41 insertions(+), 33 deletions(-)
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index f174306..a7c7426 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -175,8 +175,6 @@ public:
void updateDepthClip();
void systemStateChanged();
uint use_system_clip : 1;
-
- QPaintEngine *last_engine;
};
@@ -830,10 +828,11 @@ void QGL2PaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
{
Q_D(QGL2PaintEngineEx);
- ensureActive();
if (pen.style() == Qt::NoPen)
return;
+ ensureActive();
+
if ( (pen.isCosmetic() && (pen.style() == Qt::SolidLine)) && (pen.widthF() < 2.5f) )
{
// We only handle solid, cosmetic pens with a width of 1 pixel
@@ -1051,10 +1050,19 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev)
Q_D(QGL2PaintEngineEx);
// qDebug("QGL2PaintEngineEx::begin()");
-
d->drawable.setDevice(pdev);
- d->drawable.makeCurrent();
d->ctx = d->drawable.context();
+
+ if (d->ctx->d_ptr->active_engine) {
+ QGL2PaintEngineEx *engine = static_cast(d->ctx->d_ptr->active_engine);
+ QGL2PaintEngineExPrivate *p = static_cast(engine->d_ptr);
+ p->transferMode(BrushDrawingMode);
+ p->drawable.doneCurrent();
+ }
+
+ d->ctx->d_ptr->active_engine = this;
+
+ d->drawable.makeCurrent();
QSize sz = d->drawable.size();
d->width = sz.width();
d->height = sz.height();
@@ -1064,14 +1072,6 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev)
qt_resolve_version_2_0_functions(d->ctx);
#endif
- d->last_engine = d->ctx->d_ptr->active_engine;
- d->ctx->d_ptr->active_engine = this;
-
- if (d->last_engine) {
- QGL2PaintEngineEx *engine = static_cast(d->last_engine);
- static_cast(engine->d_ptr)->transferMode(BrushDrawingMode);
- }
-
if (!d->shaderManager)
d->shaderManager = new QGLEngineShaderManager(d->ctx);
@@ -1115,8 +1115,8 @@ bool QGL2PaintEngineEx::end()
Q_D(QGL2PaintEngineEx);
QGLContext *ctx = d->ctx;
if (ctx->d_ptr->active_engine != this) {
- QGL2PaintEngineEx *engine = static_cast(d->last_engine);
- if (engine) {
+ QGL2PaintEngineEx *engine = static_cast(ctx->d_ptr->active_engine);
+ if (engine && engine->isActive()) {
QGL2PaintEngineExPrivate *p = static_cast(engine->d_ptr);
p->transferMode(BrushDrawingMode);
p->drawable.doneCurrent();
@@ -1128,19 +1128,7 @@ bool QGL2PaintEngineEx::end()
d->transferMode(BrushDrawingMode);
d->drawable.swapBuffers();
d->drawable.doneCurrent();
- d->ctx->d_ptr->active_engine = d->last_engine;
-
- if (d->last_engine) {
- QGL2PaintEngineEx *engine = static_cast(d->last_engine);
- QGL2PaintEngineExPrivate *p = static_cast(engine->d_ptr);
-
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_SCISSOR_TEST);
-
- glViewport(0, 0, p->width, p->height);
- engine->setState(engine->state());
- p->updateDepthClip();
- }
+ d->ctx->d_ptr->active_engine = 0;
return false;
}
@@ -1152,7 +1140,7 @@ void QGL2PaintEngineEx::ensureActive()
if (isActive() && ctx->d_ptr->active_engine != this) {
QGL2PaintEngineEx *engine = static_cast(ctx->d_ptr->active_engine);
- if (engine) {
+ if (engine && engine->isActive()) {
QGL2PaintEngineExPrivate *p = static_cast(engine->d_ptr);
p->transferMode(BrushDrawingMode);
p->drawable.doneCurrent();
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 0a2a196..62a592a 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -4391,6 +4391,15 @@ void QGLDrawable::swapBuffers()
void QGLDrawable::makeCurrent()
{
+ previous_fbo = 0;
+ if (!pixmapData && !fbo) {
+ QGLContext *ctx = context();
+ previous_fbo = ctx->d_ptr->current_fbo;
+ ctx->d_ptr->current_fbo = 0;
+ if (previous_fbo)
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
+ }
+
if (widget)
widget->makeCurrent();
#if !defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL)
@@ -4428,6 +4437,12 @@ void QGLDrawable::doneCurrent()
}
#endif
+ if (previous_fbo) {
+ QGLContext *ctx = context();
+ ctx->d_ptr->current_fbo = previous_fbo;
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, previous_fbo);
+ }
+
if (fbo && !wasBound)
fbo->release();
}
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index b421eee..9657416 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -333,6 +333,7 @@ private:
#if !defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL)
QGLPixmapData *pixmapData;
#endif
+ int previous_fbo;
};
// GL extension definitions
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index 338ce1f..3e7ca0a 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -804,8 +804,10 @@ bool QGLFramebufferObject::bind()
const QGLContext *context = QGLContext::currentContext();
if (d->valid && context) {
// Save the previous setting to automatically restore in release().
- d->previous_fbo = context->d_ptr->current_fbo;
- context->d_ptr->current_fbo = d->fbo;
+ if (context->d_ptr->current_fbo != d->fbo) {
+ d->previous_fbo = context->d_ptr->current_fbo;
+ context->d_ptr->current_fbo = d->fbo;
+ }
}
return d->valid;
}
@@ -834,8 +836,10 @@ bool QGLFramebufferObject::release()
const QGLContext *context = QGLContext::currentContext();
if (context) {
// Restore the previous setting for stacked framebuffer objects.
- context->d_ptr->current_fbo = d->previous_fbo;
- glBindFramebuffer(GL_FRAMEBUFFER_EXT, d->previous_fbo);
+ if (d->previous_fbo != context->d_ptr->current_fbo) {
+ context->d_ptr->current_fbo = d->previous_fbo;
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, d->previous_fbo);
+ }
d->previous_fbo = 0;
}
--
cgit v0.12
From 855022d6108f6b3c90832e742217c50550af717d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuel=20R=C3=B8dal?=
Date: Tue, 26 May 2009 10:58:30 +0200
Subject: Avoided expensive image upload for GL pixmap backend for
QPixmap::fill.
In the fill case we can simply set a flag saying the pixmap needs to be
filled, and then when painting on the pixmap we start by filling the
background using glClear via the existing
QGLDrawable::autoFillBackground interface.
---
.../gl2paintengineex/qpaintengineex_opengl2.cpp | 8 +++-
src/opengl/qgl.cpp | 4 ++
src/opengl/qpixmapdata_gl.cpp | 46 +++++++++++++++++-----
src/opengl/qpixmapdata_gl_p.h | 12 +++++-
4 files changed, 59 insertions(+), 11 deletions(-)
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index a7c7426..aafa6de 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -1095,7 +1095,13 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev)
glDisable(GL_SCISSOR_TEST);
QGLPixmapData *source = d->drawable.copyOnBegin();
- if (source) {
+ if (d->drawable.autoFillBackground()) {
+ QColor color = d->drawable.backgroundColor();
+
+ float alpha = color.alphaF();
+ glClearColor(color.redF() * alpha, color.greenF() * alpha, color.blueF() * alpha, alpha);
+ glClear(GL_COLOR_BUFFER_BIT);
+ } else if (source) {
d->transferMode(ImageDrawingMode);
source->bind(false);
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 62a592a..0be70d7 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -4525,6 +4525,8 @@ QColor QGLDrawable::backgroundColor() const
{
if (widget)
return widget->palette().brush(widget->backgroundRole()).color();
+ else if (pixmapData)
+ return pixmapData->fillColor();
return QApplication::palette().brush(QPalette::Background).color();
}
@@ -4547,6 +4549,8 @@ bool QGLDrawable::autoFillBackground() const
{
if (widget)
return widget->autoFillBackground();
+ else if (pixmapData)
+ return pixmapData->needsFill();
else
return false;
}
diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp
index c89b99b..85bcda5 100644
--- a/src/opengl/qpixmapdata_gl.cpp
+++ b/src/opengl/qpixmapdata_gl.cpp
@@ -103,6 +103,7 @@ QGLPixmapData::QGLPixmapData(PixelType type)
, m_engine(0)
, m_ctx(0)
, m_dirty(false)
+ , m_hasFillColor(false)
{
setSerialNumber(++qt_gl_pixmap_serial);
}
@@ -196,6 +197,13 @@ void QGLPixmapData::fromImage(const QImage &image,
resize(image.width(), image.height());
m_source = image;
m_dirty = true;
+ m_hasFillColor = false;
+
+ if (m_textureId) {
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ glDeleteTextures(1, &m_textureId);
+ m_textureId = 0;
+ }
}
bool QGLPixmapData::scroll(int dx, int dy, const QRect &rect)
@@ -222,7 +230,11 @@ void QGLPixmapData::fill(const QColor &color)
if (!isValid())
return;
- if (!m_source.isNull()) {
+ if (useFramebufferObjects()) {
+ m_source = QImage();
+ m_hasFillColor = true;
+ m_fillColor = color;
+ } else if (!m_source.isNull()) {
m_source.fill(PREMUL(color.rgba()));
} else {
// ## TODO: improve performance here
@@ -243,14 +255,18 @@ QImage QGLPixmapData::toImage() const
if (!isValid())
return QImage();
- if (m_renderFbo)
+ if (m_renderFbo) {
copyBackFromRenderFbo(true);
- else if (!m_source.isNull())
+ } else if (!m_source.isNull()) {
return m_source;
- else if (m_dirty)
- return QImage(m_width, m_height, QImage::Format_ARGB32_Premultiplied);
- else
+ } else if (m_dirty || m_hasFillColor) {
+ QImage img(m_width, m_height, QImage::Format_ARGB32_Premultiplied);
+ if (m_hasFillColor)
+ img.fill(PREMUL(m_fillColor.rgba()));
+ return img;
+ } else {
ensureCreated();
+ }
QGLShareContextScope ctx(qt_gl_share_widget()->context());
extern QImage qt_gl_read_texture(const QSize &size, bool alpha_format, bool include_alpha);
@@ -272,6 +288,8 @@ void QGLPixmapData::copyBackFromRenderFbo(bool keepCurrentFboBound) const
if (!isValid())
return;
+ m_hasFillColor = false;
+
const QGLContext *share_ctx = qt_gl_share_widget()->context();
QGLShareContextScope ctx(share_ctx);
@@ -356,9 +374,12 @@ QPaintEngine* QGLPixmapData::paintEngine() const
return m_engine;
else if (!useFramebufferObjects()) {
m_dirty = true;
-
if (m_source.size() != size())
m_source = QImage(size(), QImage::Format_ARGB32_Premultiplied);
+ if (m_hasFillColor) {
+ m_source.fill(PREMUL(m_fillColor.rgba()));
+ m_hasFillColor = false;
+ }
return m_source.paintEngine();
}
@@ -394,10 +415,17 @@ QPaintEngine* QGLPixmapData::paintEngine() const
GLuint QGLPixmapData::bind(bool copyBack) const
{
- if (m_renderFbo && copyBack)
+ if (m_renderFbo && copyBack) {
copyBackFromRenderFbo(true);
- else
+ } else {
+ if (m_hasFillColor) {
+ m_dirty = true;
+ m_source = QImage(m_width, m_height, QImage::Format_ARGB32_Premultiplied);
+ m_source.fill(PREMUL(m_fillColor.rgba()));
+ m_hasFillColor = false;
+ }
ensureCreated();
+ }
GLuint id = m_textureId;
glBindTexture(GL_TEXTURE_2D, id);
diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h
index 7e06db9..1b6b7ae 100644
--- a/src/opengl/qpixmapdata_gl_p.h
+++ b/src/opengl/qpixmapdata_gl_p.h
@@ -91,6 +91,9 @@ public:
bool isUninitialized() const { return m_dirty && m_source.isNull(); }
+ bool needsFill() const { return m_hasFillColor; }
+ QColor fillColor() const { return m_fillColor; }
+
QSize size() const { return QSize(m_width, m_height); }
int width() const { return m_width; }
int height() const { return m_height; }
@@ -119,8 +122,15 @@ private:
mutable GLuint m_textureId;
mutable QPaintEngine *m_engine;
mutable QGLContext *m_ctx;
- mutable bool m_dirty;
mutable QImage m_source;
+
+ // the texture is not in sync with the source image
+ mutable bool m_dirty;
+
+ // fill has been called and no painting has been done, so the pixmap is
+ // represented by a single fill color
+ mutable QColor m_fillColor;
+ mutable bool m_hasFillColor;
};
QT_END_NAMESPACE
--
cgit v0.12
From 73e7d0cbed0261715f534d95f81055bf97ce4314 Mon Sep 17 00:00:00 2001
From: Tom Cooksey
Date: Wed, 27 May 2009 11:45:52 +0200
Subject: Make WA_TranslucentBackground work on QGLWidget for X11
This patch enables QGLWidget's to have an ARGB visual on X11, alowing GL
rendering on semi-transparent windows.
Reviewed-By: Trond
---
src/gui/kernel/qwidget_x11.cpp | 31 ++++--
.../gl2paintengineex/qpaintengineex_opengl2.cpp | 10 ++
src/opengl/qgl.cpp | 2 +-
src/opengl/qgl_x11.cpp | 116 ++++++++++++++++++++-
src/opengl/qpaintengine_opengl.cpp | 2 +-
5 files changed, 146 insertions(+), 15 deletions(-)
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
index b35740a..7e41ea1 100644
--- a/src/gui/kernel/qwidget_x11.cpp
+++ b/src/gui/kernel/qwidget_x11.cpp
@@ -893,15 +893,28 @@ void QWidgetPrivate::x11UpdateIsOpaque()
int screen = xinfo.screen();
if (topLevel && X11->use_xrender
&& X11->argbVisuals[screen] && xinfo.depth() != 32) {
- // recreate widget
- QPoint pos = q->pos();
- bool visible = q->isVisible();
- if (visible)
- q->hide();
- q->setParent(q->parentWidget(), q->windowFlags());
- q->move(pos);
- if (visible)
- q->show();
+
+ if (q->inherits("QGLWidget")) {
+ // We send QGLWidgets a ParentChange event which causes them to
+ // recreate their GL context, which in turn causes them to choose
+ // their visual again. Now that WA_TranslucentBackground is set,
+ // QGLContext::chooseVisual will select an ARGB visual.
+ QEvent e(QEvent::ParentChange);
+ QApplication::sendEvent(q, &e);
+ }
+ else {
+ // For regular widgets, reparent them with their parent which
+ // also triggers a recreation of the native window
+ QPoint pos = q->pos();
+ bool visible = q->isVisible();
+ if (visible)
+ q->hide();
+
+ q->setParent(q->parentWidget(), q->windowFlags());
+ q->move(pos);
+ if (visible)
+ q->show();
+ }
}
#endif
}
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index aafa6de..5c8b364 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -1083,6 +1083,16 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev)
// qDebug("You should see green now");
// sleep(5);
+ const QColor &c = d->drawable.backgroundColor();
+ glClearColor(c.redF(), c.greenF(), c.blueF(), d->drawable.format().alpha() ? c.alphaF() : 1.0);
+ if (d->drawable.context()->d_func()->clear_on_painter_begin && d->drawable.autoFillBackground()) {
+ GLbitfield clearBits = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT;
+#ifndef QT_OPENGL_ES
+ clearBits |= GL_ACCUM_BUFFER_BIT;
+#endif
+ glClear(clearBits);
+ }
+
d->brushTextureDirty = true;
d->brushUniformsDirty = true;
d->matrixDirty = true;
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 0be70d7..9626a3d 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -3306,7 +3306,7 @@ bool QGLWidget::event(QEvent *e)
glFinish();
doneCurrent();
} else if (e->type() == QEvent::ParentChange) {
- if (d->glcx->d_func()->screen != d->xinfo.screen()) {
+ if (d->glcx->d_func()->screen != d->xinfo.screen() || testAttribute(Qt::WA_TranslucentBackground)) {
setContext(new QGLContext(d->glcx->requestedFormat(), this));
// ### recreating the overlay isn't supported atm
}
diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp
index 28c34de..aba1e5c 100644
--- a/src/opengl/qgl_x11.cpp
+++ b/src/opengl/qgl_x11.cpp
@@ -533,11 +533,22 @@ void *QGLContext::chooseVisual()
void *QGLContext::tryVisual(const QGLFormat& f, int bufDepth)
{
Q_D(QGLContext);
- int spec[40];
+ int spec[45];
int i = 0;
spec[i++] = GLX_LEVEL;
spec[i++] = f.plane();
const QX11Info *xinfo = qt_x11Info(d->paintDevice);
+ bool useFBConfig = false;
+
+#if defined(GLX_VERSION_1_3) && !defined(QT_NO_XRENDER)
+ QWidget* widget = 0;
+ if (d->paintDevice->devType() == QInternal::Widget)
+ widget = static_cast(d->paintDevice);
+
+ // Only use glXChooseFBConfig for widgets if we're trying to get an ARGB visual
+ if (widget && widget->testAttribute(Qt::WA_TranslucentBackground) && X11->use_xrender)
+ useFBConfig = true;
+#endif
#if defined(GLX_VERSION_1_1) && defined(GLX_EXT_visual_info)
static bool useTranspExt = false;
@@ -565,28 +576,41 @@ void *QGLContext::tryVisual(const QGLFormat& f, int bufDepth)
useTranspExtChecked = true;
}
- if (f.plane() && useTranspExt) {
+ if (f.plane() && useTranspExt && !useFBConfig) {
// Required to avoid non-transparent overlay visual(!) on some systems
spec[i++] = GLX_TRANSPARENT_TYPE_EXT;
spec[i++] = f.rgba() ? GLX_TRANSPARENT_RGB_EXT : GLX_TRANSPARENT_INDEX_EXT;
}
#endif
+#if defined(GLX_VERSION_1_3)
+ // GLX_RENDER_TYPE is only in glx >=1.3
+ if (useFBConfig) {
+ spec[i++] = GLX_RENDER_TYPE;
+ spec[i++] = f.rgba() ? GLX_RGBA_BIT : GLX_COLOR_INDEX_BIT;
+ }
+#endif
+
if (f.doubleBuffer())
spec[i++] = GLX_DOUBLEBUFFER;
+ if (useFBConfig)
+ spec[i++] = True;
if (f.depth()) {
spec[i++] = GLX_DEPTH_SIZE;
spec[i++] = f.depthBufferSize() == -1 ? 1 : f.depthBufferSize();
}
if (f.stereo()) {
spec[i++] = GLX_STEREO;
+ if (useFBConfig)
+ spec[i++] = True;
}
if (f.stencil()) {
spec[i++] = GLX_STENCIL_SIZE;
spec[i++] = f.stencilBufferSize() == -1 ? 1 : f.stencilBufferSize();
}
if (f.rgba()) {
- spec[i++] = GLX_RGBA;
+ if (!useFBConfig)
+ spec[i++] = GLX_RGBA;
spec[i++] = GLX_RED_SIZE;
spec[i++] = f.redBufferSize() == -1 ? 1 : f.redBufferSize();
spec[i++] = GLX_GREEN_SIZE;
@@ -621,8 +645,86 @@ void *QGLContext::tryVisual(const QGLFormat& f, int bufDepth)
spec[i++] = f.samples() == -1 ? 4 : f.samples();
}
+#if defined(GLX_VERSION_1_3)
+ if (useFBConfig) {
+ spec[i++] = GLX_DRAWABLE_TYPE;
+ switch(d->paintDevice->devType()) {
+ case QInternal::Pixmap:
+ spec[i++] = GLX_PIXMAP_BIT;
+ break;
+ case QInternal::Pbuffer:
+ spec[i++] = GLX_PBUFFER_BIT;
+ break;
+ default:
+ qWarning("QGLContext: Unknown paint device type %d", d->paintDevice->devType());
+ // Fall-through & assume it's a window
+ case QInternal::Widget:
+ spec[i++] = GLX_WINDOW_BIT;
+ break;
+ };
+ }
+#endif
+
spec[i] = XNone;
- return glXChooseVisual(xinfo->display(), xinfo->screen(), spec);
+
+
+ XVisualInfo* chosenVisualInfo = 0;
+
+#if defined(GLX_VERSION_1_3)
+ while (useFBConfig) {
+ GLXFBConfig *configs;
+ int configCount = 0;
+ configs = glXChooseFBConfig(xinfo->display(), xinfo->screen(), spec, &configCount);
+
+ if (!configs)
+ break; // fallback to trying glXChooseVisual
+
+ for (i = 0; i < configCount; ++i) {
+ XVisualInfo* vi;
+ vi = glXGetVisualFromFBConfig(xinfo->display(), configs[i]);
+ if (!vi)
+ continue;
+
+#if !defined(QT_NO_XRENDER)
+ QWidget* w = 0;
+ if (d->paintDevice->devType() == QInternal::Widget)
+ w = static_cast