From 7a2b606e8c1c5704d3b9d018deeefe5bd7800906 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:41 +0200 Subject: Update Russian phrasebook Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- tools/linguist/phrasebooks/russian.qph | 92 ++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 10 deletions(-) diff --git a/tools/linguist/phrasebooks/russian.qph b/tools/linguist/phrasebooks/russian.qph index 69af041..9d40bd3 100644 --- a/tools/linguist/phrasebooks/russian.qph +++ b/tools/linguist/phrasebooks/russian.qph @@ -201,10 +201,6 @@ разделить выбранные элементы - dock - док - - document документ @@ -302,7 +298,7 @@ font style - стиль шрифта + начертание function key @@ -510,7 +506,7 @@ OK - Готово + ОК OLE @@ -1038,10 +1034,6 @@ OK - Выбрать - - - OK Закрыть @@ -1092,4 +1084,84 @@ Checkable Переключаемое + + Style + Начертание + + + Point size + Размер + + + Family + Шрифт + + + Writing system + Система письма + + + OK + Удалить + + + Style + Стиль + + + Edit + Изменить + + + Invalid + Некорректный + + + Invalid + Некорректная + + + Invalid + Некорректное + + + tag + тэг + + + tab order + порядок обхода + + + Ascending + По возрастанию + + + Descending + По убыванию + + + Reset + Сбросить + + + Sort order + Порядок сортировки + + + Appearance + Внешний вид + + + View + Просмотр + + + Actions + Действия + + + Table of Contents + Оглавление + -- cgit v0.12 From 69d6ba21297c48af98dfdc32acb4ef7ccd7bb6f8 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:42 +0200 Subject: Update Russian translations for Qt libraries Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- translations/qt_ru.ts | 414 +++++++++++++++++++++++++------------------------- 1 file changed, 208 insertions(+), 206 deletions(-) diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index 7ff1310..d3290e8 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -22,7 +22,7 @@ CloseButton - + Close Tab Закрыть вкладку @@ -102,18 +102,18 @@ have libgstreamer-plugins-base installed. - + Could not open media source. Не удалось открыть источник медиа-данных. - + Invalid source type. Неверный тип источника медиа-данных. - + Could not locate media source. Не удалось найти источник медиа-данных. @@ -149,12 +149,12 @@ have libgstreamer-plugins-base installed. %1, %2 not defined - %1, %2 не определен + %1, %2 не определён Ambiguous %1 not handled - Неоднозначный %1 не обрабатывается + @@ -246,7 +246,7 @@ have libgstreamer-plugins-base installed. &OK - &Готово + &ОК @@ -273,7 +273,7 @@ have libgstreamer-plugins-base installed. One directory up - На один уровень вверх + Вверх на один уровень @@ -419,7 +419,7 @@ have libgstreamer-plugins-base installed. Show &hidden files - Показать скр&ытые файлы + Показать ск&рытые файлы @@ -604,7 +604,7 @@ to OK - Готово + ОК @@ -799,7 +799,7 @@ to &Cancel - &Отмена + От&мена @@ -826,7 +826,7 @@ to QAbstractSocket - + Host not found @@ -929,12 +929,12 @@ to &Cancel - &Отмена + От&мена COM &Object: - COM &Объект: + &Объект COM: @@ -1005,12 +1005,12 @@ to &Custom colors - &Произвольные цвета + &Пользовательские цвета &Add to Custom Colors - &Добавить к произвольным цветам + &Добавить к пользовательским цветам @@ -1068,17 +1068,17 @@ to Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию Unable to set autocommit - Невозможно установить автовыполнение транзакции + Невозможно установить автозавершение транзакций @@ -1120,22 +1120,22 @@ to AM - + AM am - + am PM - + PM pm - + pm @@ -1143,17 +1143,17 @@ to QDial - + QDial SpeedoMeter - + SpeedoMeter SliderHandle - + SliderHandle @@ -1172,16 +1172,16 @@ to QDialogButtonBox - + OK - Готово + ОК &OK - &Готово + &ОК @@ -1201,7 +1201,7 @@ to &Cancel - &Отмена + От&мена @@ -1286,7 +1286,7 @@ to Restore Defaults - Восстановить значения по умолчанию + Восстановить значения @@ -1297,7 +1297,7 @@ to QDirModel - + Name Имя @@ -1334,12 +1334,12 @@ to Dock - + Прикрепить Float - + Открепить @@ -1394,7 +1394,7 @@ to Will not rename sequential file using block copy - Последовательный файл не будет переименовываться с использованием поблочного копирования + Последовательный файл не будет переименован с использованием поблочного копирования @@ -1438,13 +1438,13 @@ to - + &Open &Открыть - + &Save &Сохранить @@ -1455,7 +1455,7 @@ to Открыть - + %1 already exists. Do you want to replace it? %1 уже существует. @@ -1476,7 +1476,7 @@ Please verify the correct file name was given. Мой компьютер - + &Rename &Переименовать @@ -1488,7 +1488,7 @@ Please verify the correct file name was given. Show &hidden files - Показать скр&ытые файлы + Показать ск&рытые файлы @@ -1527,7 +1527,7 @@ Please verify the correct file name was given. Каталог: - + %1 Directory not found. @@ -1546,7 +1546,7 @@ Do you want to delete it anyway? Are sure you want to delete '%1'? - Вы уверены, что хотите удалить '%1'? + Вы действительно хотите удалить '%1'? @@ -1564,12 +1564,12 @@ Do you want to delete it anyway? Все файлы (*.*) - + Save As Сохранить как - + Drive Диск @@ -1601,12 +1601,12 @@ Do you want to delete it anyway? Вперёд - + New Folder Новая папка - + &New Folder &Новая папка @@ -1653,7 +1653,7 @@ Do you want to delete it anyway? <b>Имя "%1" не может быть использовано.</b><p>Попробуйте использовать имя меньшей длины и/или без символов пунктуации. - + Name Имя @@ -1690,7 +1690,7 @@ Do you want to delete it anyway? Компьютер - + %1 TB %1 Тб @@ -1942,7 +1942,7 @@ Do you want to delete it anyway? Font st&yle - Ст&иль шрифта + &Начертание @@ -2168,7 +2168,7 @@ Do you want to delete it anyway? QHttp - + @@ -2210,7 +2210,7 @@ Do you want to delete it anyway? Ошибка записи ответа на устройство - + Connection refused Отказано в соединении @@ -2316,7 +2316,7 @@ Do you want to delete it anyway? Квитирование SSL не удалось - + HTTPS connection requested but SSL support not compiled in Запрошено соединение по протоколу HTTPS, но поддержка SSL не скомпилирована @@ -2372,7 +2372,7 @@ Do you want to delete it anyway? QIBaseDriver - + Error opening database Ошибка открытия базы данных @@ -2384,18 +2384,18 @@ Do you want to delete it anyway? Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию QIBaseResult - + Unable to create BLOB Невозможно создать BLOB @@ -2438,7 +2438,7 @@ Do you want to delete it anyway? Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию @@ -2477,7 +2477,7 @@ Do you want to delete it anyway? Не удалось получить следующий элемент - + Could not get statement info Не удалось найти информацию о выражении @@ -2762,12 +2762,12 @@ Do you want to delete it anyway? Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию @@ -2956,7 +2956,7 @@ Do you want to delete it anyway? QMessageBox - + Help Справка @@ -2969,9 +2969,9 @@ Do you want to delete it anyway? Закрыть - + <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&nbsp;Windows, Mac&nbsp;OS&nbsp;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://qt.nokia.com/products/licensing">qt.nokia.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://qt.nokia.com/">qt.nokia.com</a> for more information.</p> - <h3>О Qt</h3><p>Данная программа использует Qt версии %1.</p><p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения требований различных пользователей.</p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные коды третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытым исходным кодом или коммерческого программного обеспечения при соблюдении постановлений и условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p> + <h3>О Qt</h3><p>Данная программа использует Qt версии %1.</p><p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения различных требований.</p><p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные тексты третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытыми исходными текстами или коммерческого программного обеспечения при соблюдении условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p> @@ -2979,7 +2979,7 @@ Do you want to delete it anyway? О Qt - + Show Details... Показать подробности... @@ -3002,12 +3002,13 @@ Do you want to delete it anyway? Multiple input method switcher - + Переключатель режима множественного ввода Multiple input method switcher that uses the context menu of the text widgets - + текстовых виджетов <-?-> текстовых редакторов + Переключатель режима множественного ввода, используемый в контекстном меню текстовых виджетов @@ -3218,7 +3219,7 @@ Do you want to delete it anyway? QNetworkReply - + Error downloading %1 - server replied: %2 Ошибка загрузки %1 - ответ сервера: %2 @@ -3231,8 +3232,8 @@ Do you want to delete it anyway? QNetworkReplyImpl - - + + Operation canceled Операция отменена @@ -3258,12 +3259,12 @@ Do you want to delete it anyway? Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию @@ -3314,7 +3315,7 @@ Do you want to delete it anyway? QODBCDriver - + Unable to connect Невозможно соединиться @@ -3326,35 +3327,35 @@ Do you want to delete it anyway? Unable to disable autocommit - Невозможно отключить автовыполнение транзакции + Невозможно отключить автозавершение транзакций Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию Unable to enable autocommit - Невозможно установить автовыполнение транзакции + Невозможно включить автозавершение транзакций QODBCResult - - + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult::reset: Невозможно установить 'SQL_CURSOR_STATIC' атрибутом выражение. Проверьте настройки драйвера ODBC - - + + Unable to execute statement Невозможно выполнить выражение @@ -3376,12 +3377,12 @@ Do you want to delete it anyway? - + Unable to fetch last Невозможно получить последнюю строку - + Unable to fetch Невозможно получить данные @@ -3461,7 +3462,7 @@ Do you want to delete it anyway? QPSQLDriver - + Unable to connect Невозможно соединиться @@ -3473,15 +3474,15 @@ Do you want to delete it anyway? Could not commit transaction - Не удалось выполнить транзакцию + Не удалось завершить транзакцию Could not rollback transaction - Не удалось откатить транзакцию + Не удалось отозвать транзакцию - + Unable to subscribe Невозможно подписаться @@ -3494,7 +3495,7 @@ Do you want to delete it anyway? QPSQLResult - + Unable to create query Невозможно создать запрос @@ -3855,157 +3856,157 @@ Please choose a different file name. A0 - + A0 A1 - + A1 A2 - + A2 A3 - + A3 A4 - + A4 A5 - + A5 A6 - + A6 A7 - + A7 A8 - + A8 A9 - + A9 B0 - + B0 B1 - + B1 B2 - + B2 B3 - + B3 B4 - + B4 B5 - + B5 B6 - + B6 B7 - + B7 B8 - + B8 B9 - + B9 B10 - + B10 C5E - + C5E DLE - + DLE Executive - + Executive Folio - + Folio Ledger - + Ledger Legal - + Legal Letter - + Letter Tabloid - + Tabloid US Common #10 Envelope - + US Common #10 Envelope Custom - Произвольный + Пользовательский @@ -4314,7 +4315,7 @@ Please choose a different file name. Output &file: - Выходной &файл: + Вывод в &файл: @@ -4472,12 +4473,12 @@ Please choose a different file name. Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback Transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию @@ -4496,7 +4497,7 @@ Please choose a different file name. QSQLiteDriver - + Error opening database Ошибка открытия базы данных @@ -4513,12 +4514,12 @@ Please choose a different file name. Unable to commit transaction - Невозможно выполнить транзакцию + Невозможно завершить транзакцию Unable to rollback transaction - Невозможно откатить транзакцию + Невозможно отозвать транзакцию @@ -4791,12 +4792,12 @@ Please choose a different file name. Pause - Пауза + Print - Печать + @@ -4806,7 +4807,7 @@ Please choose a different file name. Home - Домой + @@ -4816,22 +4817,22 @@ Please choose a different file name. Left - Влево + Up - Вверх + Right - Вправо + Down - Вниз + @@ -4891,17 +4892,17 @@ Please choose a different file name. Volume Down - + Тише Volume Mute - + Выключить звук Volume Up - + Громче @@ -4931,32 +4932,32 @@ Please choose a different file name. Media Play - + Воспроизведение Media Stop - + Остановить воспроизведение Media Previous - + Воспроизвести предыдущее Media Next - + Воспроизвести следующее Media Record - + Запись Favorites - + Избранное @@ -4966,102 +4967,102 @@ Please choose a different file name. Standby - + Режим ожидания Open URL - + Открыть URL Launch Mail - + Почта Launch Media - + Проигрыватель Launch (0) - + Запустить (0) Launch (1) - + Запустить (1) Launch (2) - + Запустить (2) Launch (3) - + Запустить (3) Launch (4) - + Запустить (4) Launch (5) - + Запустить (5) Launch (6) - + Запустить (6) Launch (7) - + Запустить (7) Launch (8) - + Запустить (8) Launch (9) - + Запустить (9) Launch (A) - + Запустить (A) Launch (B) - + Запустить (B) Launch (C) - + Запустить (C) Launch (D) - + Запустить (D) Launch (E) - + Запустить (E) Launch (F) - + Запустить (F) @@ -5121,7 +5122,7 @@ Please choose a different file name. Select - + Выбрать @@ -5241,7 +5242,7 @@ Please choose a different file name. Connection to proxy refused - В соединении прокси-сервером отказано + В соединении с прокси-сервером отказано @@ -5563,7 +5564,7 @@ Please choose a different file name. QUdpSocket - + This platform does not support IPv6 Данная платформа не поддерживает IPv6 @@ -5617,17 +5618,17 @@ Please choose a different file name. ZWJ Zero width joiner - + ZWJ Объединяющий символ нулевой ширины ZWNJ Zero width non-joiner - + ZWNJ Не объединяющий символ нулевой ширины ZWSP Zero width space - + ZWSP Пробел нулевой ширины @@ -5663,7 +5664,7 @@ Please choose a different file name. QWebFrame - + Request cancelled Запрос отменён @@ -5696,7 +5697,7 @@ Please choose a different file name. QWebPage - + Bad HTTP request Некорректный HTTP-запрос @@ -5824,13 +5825,14 @@ Please choose a different file name. No Guesses Found No Guesses Found context menu item - + Неверное слово Ignore Ignore Spelling context menu item - Пропустить + ?Пропускать + Пропустить @@ -5842,13 +5844,13 @@ Please choose a different file name. Search The Web Search The Web context menu item - Найти в Интернет + Искать в Интернет Look Up In Dictionary Look Up in Dictionary context menu item - Поиск в словаре + Искать в словаре @@ -5860,7 +5862,8 @@ Please choose a different file name. Ignore Ignore Grammar context menu item - Пропустить + ?Пропускать + Пропустить @@ -5872,13 +5875,13 @@ Please choose a different file name. Show Spelling and Grammar menu item title - + Показать панель проверки правописания Hide Spelling and Grammar menu item title - + Скрыть панель проверки правописания @@ -5890,13 +5893,13 @@ Please choose a different file name. Check Spelling While Typing Check spelling while typing context menu item - Проверять орфографию при наборе + Проверять орфографию при наборе текста Check Grammar With Spelling Check grammar with spelling context menu item - + Проверять грамматику с орфографией @@ -5932,7 +5935,7 @@ Please choose a different file name. Direction Writing direction context sub-menu item - Направление + Направление письма @@ -5997,7 +6000,7 @@ Please choose a different file name. Web Inspector - %2 - + Web-инспектор - %2 @@ -6077,17 +6080,17 @@ Please choose a different file name. JavaScript Alert - %1 - + JavaScript: Предупреждение - %1 JavaScript Confirm - %1 - + JavaScript: Подтверждение - %1 JavaScript Prompt - %1 - + JavaScript: Запрос - %1 @@ -6246,7 +6249,7 @@ Please choose a different file name. QWidget - + * * @@ -6528,12 +6531,12 @@ Please choose a different file name. Attribute redefined. - Атрибут переопределен. + Атрибут переопределён. Unexpected character '%1' in public id literal. - Неожиданный символ '%1' в литерале открытого идентификатора. + Неожиданный символ '%1' в литерале открытого идентификатора. @@ -6613,8 +6616,7 @@ Please choose a different file name. NDATA in parameter entity declaration. - Не уверен в правильности перевода - NDATA в объявлении объекта-параметра. + NDATA в объявлении параметра. @@ -6688,7 +6690,7 @@ Please choose a different file name. An %1-attribute with value %2 has already been declared. - Атрибут '%1' со значением '%2' уже определен. + Атрибут '%1' со значением '%2' уже определён. @@ -6769,7 +6771,7 @@ Please choose a different file name. The second operand in a division, %1, cannot be zero (%2). - Второй параметр целочисленного деления (%1) не может быть нулем (%2). + Второй параметр целочисленного деления (%1) не может быть нулём (%2). @@ -6800,12 +6802,12 @@ Please choose a different file name. Dividing a value of type %1 by %2 (not-a-number) is not allowed. - Деление числа типа %1 на %2 (not-a-number) недопустимо. + Деление числа типа %1 на %2 (не числовое выражение) недопустимо. Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. - Деление числа типа %1 на %2 или %3 (плюс-минус нуль) недопустимо. + Деление числа типа %1 на %2 или %3 (плюс или минус нуль) недопустимо. @@ -6945,12 +6947,12 @@ Please choose a different file name. The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. - Целевое имя в обрабатываемой инструкции не может быть %1 в любой комбинации нижнего и верхнего регистров. Имя %2 некорректно. + Целевое имя в обрабатываемой инструкции не может быть %1 в любой комбинации нижнего и верхнего регистров. Имя %2 некорректно. %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. - %1 некорректное целевое имя в обрабатываемой инструкции. Имя должно быть значением типа %2, например: %3. + %1 некорректное целевое имя в обрабатываемой инструкции. Имя должно быть значением типа %2, например: %3. @@ -7094,7 +7096,7 @@ Please choose a different file name. The default collection is undefined - Набор по умолчанию не определен + Набор по умолчанию не определён @@ -7119,7 +7121,7 @@ Please choose a different file name. Required cardinality is %1; got cardinality %2. - Необходимое число элементов - %1, получено %2. + Необходимо %1 элементов, получено %2. @@ -7127,7 +7129,7 @@ Please choose a different file name. Элемент %1 не соответствует необходимому типу %2. - + %1 is an unknown schema type. %1 является схемой неизвестного типа. @@ -7181,7 +7183,7 @@ Please choose a different file name. Module imports must occur before function, variable, and option declarations. - Импорт модулей должен быть до объявлений функций, переменных и опций. + Импорт модулей должен быть до объявления функций, переменных и опций. @@ -7201,7 +7203,7 @@ Please choose a different file name. The Schema Import feature is not supported, and therefore %1 declarations cannot occur. - Возможность импорта схем не поддерживается. Следовательно, объявлений %1 быть не должно. + Возможность импорта схем не поддерживается, следовательно, объявлений %1 быть не должно. @@ -7221,7 +7223,7 @@ Please choose a different file name. A construct was encountered which only is allowed in XQuery. - Указана конструкция, допустимая только в XQuery. + Указана конструкция, допустимая только в XQuery. @@ -7256,12 +7258,12 @@ Please choose a different file name. The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) - Пространство имён для пользовательских функций не может быть пустым (попробуйте предопределенный префикс %1, который существует для подобных ситуаций) + Пространство имён для пользовательских функций не может быть пустым (попробуйте предопределённый префикс %1, который существует для подобных ситуаций) The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. - Пространтсво имён %1 зарезервировано, поэтому пользовательские функции не могут его использовать. Попробуйте предопределенный префикс %2, который существует для подобных ситуаций. + Пространтсво имён %1 зарезервировано, поэтому пользовательские функции не могут его использовать. Попробуйте предопределённый префикс %2, который существует для подобных ситуаций. @@ -7276,7 +7278,7 @@ Please choose a different file name. No external functions are supported. All supported functions can be used directly, without first declaring them as external - Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их внешними + Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их в качестве внешних @@ -7396,12 +7398,12 @@ Please choose a different file name. An attribute by name %1 has already appeared on this element. - Атрибут с именем %1 уже есть в этом элементе. + Атрибут с именем %1 уже существует для данного элемента. A direct element constructor is not well-formed. %1 is ended with %2. - Прямой конструктор элемента составлен некорректно. %1 заканчивается %2. + Прямой конструктор элемента составлен некорректно. %1 заканчивается на %2. @@ -7422,7 +7424,7 @@ Please choose a different file name. %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. - %1 является объявлением атрибута вне положенного места. Имейте в виду, возможность импорта схем не поддерживается. + %1 является объявлением атрибута вне области объявлений. Имейте в виду, возможность импорта схем не поддерживается. @@ -7467,7 +7469,7 @@ Please choose a different file name. The focus is undefined. - Фокус не определен. + Фокус не определён. -- cgit v0.12 From c0d420b589faa200f4cbf5fd09597812efae0e77 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:43 +0200 Subject: Update Russian translations for QVFB Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- translations/qvfb_ru.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/translations/qvfb_ru.ts b/translations/qvfb_ru.ts index b084380..7e73386 100644 --- a/translations/qvfb_ru.ts +++ b/translations/qvfb_ru.ts @@ -88,32 +88,32 @@ 176x220 "SmartPhone" - + 176x220 "SmartPhone" 240x320 "PDA" - + 240x320 "PDA" 320x240 "TV" / "QVGA" - + 320x240 "TV" / "QVGA" 640x480 "VGA" - + 640x480 "VGA" 800x600 - + 800x600 1024x768 - + 1024x768 @@ -188,6 +188,7 @@ Emulate touch screen (no mouse move) + указателя? Эмулировать тачскрин (без перемещения мыши) @@ -198,7 +199,7 @@ <p>Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth <i>above</i>. You may freely modify the Gamma <i>below</i>. - <p>Имейте в виду, что любая программа будет завершена, если изменится размер или глубина экрана. Параметр Гамма можно менять свободно. + <p>Имейте в виду, что программы, использующие фрэймбуфер, будут завершены, если изменится <i>размер</i> и/или <i>глубина</i> экрана. @@ -216,7 +217,7 @@ 1.0 - + 1.0 @@ -241,12 +242,12 @@ &OK - &Готово + &ОК &Cancel - &Отмена + От&мена -- cgit v0.12 From d6226445ffd06372f000cccda7917c2adbd92412 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:43 +0200 Subject: Update Russian translations for QtConfig Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- translations/qtconfig_ru.ts | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts index bf3d090..db71274 100644 --- a/translations/qtconfig_ru.ts +++ b/translations/qtconfig_ru.ts @@ -45,7 +45,7 @@ Phonon GStreamer backend not available. - Модуль Phonon поддержки GStreamer не доступен. + Модуль Phonon поддержки GStreamer недоступен. @@ -56,7 +56,7 @@ X11 - + @@ -67,7 +67,7 @@ OpenGL - + @@ -117,11 +117,11 @@ - <h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/> - + <h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + <h3>%1</h3><br/>Версия %2<br/><br/>Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения. - + Qt Configuration @@ -150,7 +150,7 @@ &Cancel - &Отмена + От&мена @@ -238,17 +238,17 @@ &Style: - &Стиль: + &Начертание: &Point Size: - &Размер в точках: + &Размер: F&amily: - Семе&йство: + &Шрифт: @@ -263,12 +263,12 @@ S&elect or Enter a Family: - &Выберите или введите семейство: + &Выберите шрифт для замены: Current Substitutions: - Текущие замены: + Текущие замены: @@ -291,7 +291,7 @@ Select s&ubstitute Family: - Выберите п&одставляемое семейство: + &Заменять на шрифт: @@ -518,7 +518,7 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html> - + @@ -532,7 +532,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html> - + @@ -628,7 +628,7 @@ p, li { white-space: pre-wrap; } <b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p> - <b>Изменение палитры</b><p>Изменение палитры текущего виджета или формы.</p><p>Используйте сформированную палитру или выберите цвета для каждой группы цветов и каждой их роли.</p><p>Палитру можно проверить на виджетах в разных режимах отображения в разделе предпросмотра.</p> + <b>Изменение палитры</b><p>Изменение палитры текущего виджета или формы.</p><p>Используйте сформированную палитру или выберите цвета для каждой группы цветов и каждой их роли.</p><p>Палитру можно проверить на виджетах в разных режимах отображения в разделе предпросмотра.</p> @@ -653,7 +653,7 @@ p, li { white-space: pre-wrap; } Auto - Автоматически + Автоматически @@ -832,7 +832,7 @@ p, li { white-space: pre-wrap; } Desktop settings will only take effect after an application restart. - Настройки рабочего стола применятся после перезапуска приложения. + Настройки рабочего стола применятся после перезапуска приложения. @@ -900,7 +900,12 @@ p, li { white-space: pre-wrap; } <p> <a href="http://www.kde.org">http://www.kde.org</a> </p> - + <p> +<a href="http://qtsoftware.com">http://qtsoftware.com</a> +</p> +<p> +<a href="http://www.kde.org">http://www.kde.org</a> +</p> -- cgit v0.12 From 587704316bcb4e0ad55b0dc84af127fb0c9b5828 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:44 +0200 Subject: Update Russian translations for Qt Linguist Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- translations/linguist_ru.ts | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts index 86c7434..0666199 100644 --- a/translations/linguist_ru.ts +++ b/translations/linguist_ru.ts @@ -12,7 +12,7 @@ AboutDialog - + Qt Linguist Qt Linguist @@ -87,12 +87,12 @@ Searching, please wait... - Идёт поиск, ждите... + Идёт поиск, ожидайте... &Cancel - &Отмена + От&мена @@ -289,7 +289,7 @@ Will assume a single universal form. LRelease - + Generated %n translation(s) (%1 finished and %2 unfinished) @@ -318,7 +318,7 @@ Will assume a single universal form. MainWindow - + This is the application's main window. Основное окно программы. @@ -433,13 +433,13 @@ Skip loading the first named file? - + Release - Компиляция + Скомпилировать - + Qt message files for released applications (*.qm) All files (*) Скомпилированные файлы перевода для приложений Qt (*.qm) @@ -503,7 +503,7 @@ All files (*) - + @@ -515,7 +515,7 @@ All files (*) Qt Linguist - + Cannot find the string '%1'. Не удалось найти строку '%1'. @@ -616,11 +616,11 @@ All files (*) - <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p> - + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist - инструмент для добавления переводов в приложения на основе Qt.</p><p>%2</p><p>Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения. - + Do you want to save the modified files? Желаете сохранить изменённые файлы? @@ -1103,7 +1103,7 @@ All files (*) &Prev Unfinished - &Пред. незавершённый + &Предыдущий незавершённый @@ -1123,7 +1123,7 @@ All files (*) &Next Unfinished - &След. незавершённый + &Следующий незавершённый @@ -1148,7 +1148,7 @@ All files (*) Move to previous item. - Предыдущий перевод. + Перейти к предыдущему переводу. @@ -1591,7 +1591,6 @@ Line: %2 This is the right panel of the main window. - Правая панель главного окна @@ -1748,7 +1747,7 @@ Line: %2 QObject - + Translation files (%1);; Файлы перевода (%1);; @@ -1769,7 +1768,7 @@ Line: %2 Qt Linguist - + GNU Gettext localization files Файлы локализации GNU Gettext @@ -1799,7 +1798,7 @@ Line: %2 Исходные файлы перевода Qt (последний формат) - + XLIFF localization files Файлы локализации XLIFF @@ -1821,12 +1820,12 @@ Line: %2 Qt Designer form files - Формы Qt Designer + Файлы форм Qt Designer Qt Jambi form files - Формы Qt Jambi + Файлы форм Qt Jambi -- cgit v0.12 From e529fc93a203307c1cc9decbd364b8c103c048c1 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:45 +0200 Subject: Update Russian translations for QtHelp library Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- translations/assistant_ru.ts | 108 +++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index ecec0f8..992cf18 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -151,7 +151,7 @@ CentralWidget - + Add new page Открыть новую страницу @@ -161,7 +161,7 @@ Закрыть текущую страницу - + Print Document Печать документа @@ -172,7 +172,7 @@ безымянная вкладка - + Add New Page Открыть новую страницу @@ -226,7 +226,7 @@ FindWidget - + Previous Предыдущее @@ -266,17 +266,17 @@ &Family - Се&мейство + &Шрифт &Style - &Стиль + &Начертание &Point size - &Размер в точках + &Размер @@ -340,13 +340,13 @@ InstallDialog - + Install Documentation Установка документации - + Downloading documentation info... Загрузка информации о документации... @@ -440,32 +440,32 @@ MainWindow - - + + Index Указатель - - + + Contents Содержание - - + + Bookmarks Закладки - + - + Qt Assistant Qt Assistant - + Unfiltered Без фильтрации @@ -473,7 +473,7 @@ Looking for Qt Documentation... - Поиск документации по Qt... + Поиск документации Qt... @@ -496,7 +496,7 @@ &Печать... - + New &Tab Новая &вкладка @@ -511,12 +511,7 @@ В&ыход - - CTRL+Q - - - - + &Edit &Правка @@ -526,12 +521,12 @@ &Копировать выделенный текст - + &Find in Text... П&оиск в тексте... - + Find &Next Найти &следующее @@ -556,17 +551,17 @@ У&величить - + Zoom &out У&меньшить - + Normal &Size Нормальный р&азмер - + Ctrl+0 @@ -621,12 +616,12 @@ &Вперёд - + Sync with Table of Contents - Синхронизировать с содержанием + Синхронизировать с оглавлением - + Next Page Следующая страница @@ -671,7 +666,7 @@ О программе... - + Navigation Toolbar Панель навигации @@ -726,7 +721,7 @@ Не удалось найти элемент, связанный с содержанием. - + About %1 О %1 @@ -739,7 +734,7 @@ PreferencesDialog - + Add Documentation Добавить документацию @@ -780,7 +775,7 @@ Удалить - + Use custom settings Использовать индивидуальные настройки @@ -864,20 +859,45 @@ Параметры - + Homepage - Домашная страница + Стартовая страница - + Current Page Текущая страница - + Restore to default Страница по умолчанию + + + On help start: + При запуске: + + + + Show my home page + Отобразить стартовую страницу + + + + Show a blank page + Отобразить пустую страницу + + + + Show my tabs from last session + Восстановить предыдущую сессиию + + + + Blank Page + Пустая страница + QObject @@ -944,7 +964,7 @@ Qt Assistant - + Could not register documentation file %1 @@ -993,7 +1013,7 @@ Reason: RemoteControl - + Debugging Remote Control Отладочное удалённое управление -- cgit v0.12 From b779e38ef18fa3a16ba60bfe85aac650e3696962 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:46 +0200 Subject: Update Russian translations for Qt Assistant and Qt Assistant_adp tools Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- translations/assistant_adp_ru.ts | 30 ++++++------- translations/assistant_ru.ts | 94 ++++++++++++++++------------------------ 2 files changed, 52 insertions(+), 72 deletions(-) diff --git a/translations/assistant_adp_ru.ts b/translations/assistant_adp_ru.ts index c47798b..94bc5d5 100644 --- a/translations/assistant_adp_ru.ts +++ b/translations/assistant_adp_ru.ts @@ -19,12 +19,12 @@ &Family - Се&мейство + &Шрифт &Style - &Стиль + &Начертание @@ -39,7 +39,7 @@ &Point size - &Размер в пикселях + &Размер @@ -116,7 +116,7 @@ <b>Help</b><p>Choose the topic you want help on from the contents list, or search the index for keywords.</p> - <b>Справка</b><p>Выберите раздел справки из содержания или воспользуйтесь поиском по предметному указателю.</p> + <b>Справка</b><p>Выберите раздел справки из оглавления или воспользуйтесь поиском по предметному указателю.</p> @@ -141,7 +141,7 @@ Con&tents - Содер&жание + &Оглавление @@ -407,7 +407,7 @@ Qt Assistant не будет работать! MainWindow - + "What's This?" context sensitive help. Контекстная справка "Что это?". @@ -483,7 +483,7 @@ Qt Assistant не будет работать! &Окно - + ... ... @@ -533,9 +533,9 @@ Qt Assistant не будет работать! Показать дополнительную информацию о Qt Assistant. - + Displays the main page of a specific documentation set. - Открывает стартовую страницу выбранного набора документации. + Открывает стартовую страницу выбранного набора документации. @@ -543,7 +543,7 @@ Qt Assistant не будет работать! В&ыход - + Failed to open about application contents in file: '%1' Не удалось получить информацию о приложении из файла: '%1' @@ -578,7 +578,7 @@ Qt Assistant не будет работать! Переход на следующую страницу. - + Initializing Qt Assistant... Инициализация Qt Assistant... @@ -618,7 +618,7 @@ Qt Assistant не будет работать! Печатать отображаемую страницу. - + Qt Assistant Qt Assistant @@ -652,17 +652,17 @@ Qt Assistant не будет работать! Select the page in contents tab. - Выбрать страницу во вкладке содержания. + Выбрать страницу во вкладке оглавления. - + Sidebar Боковая панель Sync with Table of Contents - Синхронизировать с содержанием + Синхронизировать с оглавлением diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index 992cf18..79847d6 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -151,7 +151,7 @@ CentralWidget - + Add new page Открыть новую страницу @@ -161,7 +161,7 @@ Закрыть текущую страницу - + Print Document Печать документа @@ -226,7 +226,7 @@ FindWidget - + Previous Предыдущее @@ -340,13 +340,13 @@ InstallDialog - + Install Documentation Установка документации - + Downloading documentation info... Загрузка информации о документации... @@ -440,32 +440,32 @@ MainWindow - - + + Index Указатель - - + + Contents Содержание - - + + Bookmarks Закладки - + - + Qt Assistant Qt Assistant - + Unfiltered Без фильтрации @@ -496,7 +496,7 @@ &Печать... - + New &Tab Новая &вкладка @@ -511,7 +511,12 @@ В&ыход - + + CTRL+Q + + + + &Edit &Правка @@ -521,12 +526,12 @@ &Копировать выделенный текст - + &Find in Text... П&оиск в тексте... - + Find &Next Найти &следующее @@ -551,17 +556,17 @@ У&величить - + Zoom &out У&меньшить - + Normal &Size Нормальный р&азмер - + Ctrl+0 @@ -616,12 +621,12 @@ &Вперёд - + Sync with Table of Contents Синхронизировать с оглавлением - + Next Page Следующая страница @@ -666,7 +671,7 @@ О программе... - + Navigation Toolbar Панель навигации @@ -721,7 +726,7 @@ Не удалось найти элемент, связанный с содержанием. - + About %1 О %1 @@ -734,7 +739,7 @@ PreferencesDialog - + Add Documentation Добавить документацию @@ -775,7 +780,7 @@ Удалить - + Use custom settings Использовать индивидуальные настройки @@ -859,45 +864,20 @@ Параметры - + Homepage Стартовая страница - + Current Page Текущая страница - + Restore to default Страница по умолчанию - - - On help start: - При запуске: - - - - Show my home page - Отобразить стартовую страницу - - - - Show a blank page - Отобразить пустую страницу - - - - Show my tabs from last session - Восстановить предыдущую сессиию - - - - Blank Page - Пустая страница - QObject @@ -964,7 +944,7 @@ Qt Assistant - + Could not register documentation file %1 @@ -1013,7 +993,7 @@ Reason: RemoteControl - + Debugging Remote Control Отладочное удалённое управление -- cgit v0.12 From feec449d63c355dd465dea7674d43923e999911e Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 25 Sep 2009 10:35:47 +0200 Subject: Add Russian translation for Qt Designer Merge-request: 1611 Reviewed-by: Oswald Buddenhagen --- tools/designer/translations/translations.pro | 2 +- translations/designer_ru.ts | 7032 ++++++++++++++++++++++++++ 2 files changed, 7033 insertions(+), 1 deletion(-) create mode 100644 translations/designer_ru.ts diff --git a/tools/designer/translations/translations.pro b/tools/designer/translations/translations.pro index 8395259..c8cd76d 100644 --- a/tools/designer/translations/translations.pro +++ b/tools/designer/translations/translations.pro @@ -133,7 +133,7 @@ HEADERS += ../../shared/findwidget/abstractfindwidget.h \ TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/designer_de.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_ja.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_pl.ts \ + $$[QT_INSTALL_TRANSLATIONS]/designer_ru.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_zh_CN.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_zh_TW.ts \ $$[QT_INSTALL_TRANSLATIONS]/designer_untranslated.ts - diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts new file mode 100644 index 0000000..d639dae --- /dev/null +++ b/translations/designer_ru.ts @@ -0,0 +1,7032 @@ + + + + + + + + The moose in the noose +ate the goose who was loose. + + + + + <object> + <объект> + + + + <signal> + <сигнал> + + + + <slot> + <слот> + + + + AbstractFindWidget + + + &Previous + &Предыдущий + + + + &Next + &Следующий + + + + &Case sensitive + &Учитывать регистр + + + + Whole &words + Слова &целиком + + + + <img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped + <img src=":/trolltech/shared/images/wrap.png">&nbsp;Поиск с начала + + + + AddLinkDialog + + + Insert Link + Вставить ссылку + + + + Title: + Заголовок: + + + + URL: + URL: + + + + AppFontDialog + + + Additional Fonts + Дополнительные шрифты + + + + AppFontManager + + + '%1' is not a file. + '%1' не является файлом. + + + + The font file '%1' does not have read permissions. + Файл шрифтов '%1' не доступен для чтения. + + + + The font file '%1' is already loaded. + Файл шрифтов '%1'уже загружен. + + + + The font file '%1' could not be loaded. + Файл шрифтов '%1' не может быть загружен. + + + + '%1' is not a valid font id. + '%1' не является корректным идентификатором шрифта. + + + + There is no loaded font matching the id '%1'. + Нет загруженного шрифта, соответствующего идентификатору '%1'. + + + + The font '%1' (%2) could not be unloaded. + Шрифт '%1' (%2) не может быть выгружен. + + + + AppFontWidget + + + Fonts + Шрифты + + + + Add font files + Добавить файлы шрифтов + + + + Remove current font file + Удалить текущий файл шрифта + + + + Remove all font files + Удалить все файлы шрифтов + + + + Add Font Files + Добавить файлы шрифтов + + + + Font files (*.ttf) + Файлы шрифтов (*.ttf) + + + + Error Adding Fonts + Ошибка добавления шрифтов + + + + Error Removing Fonts + Ошибка удаления шрифтов + + + + Remove Fonts + Удалить шрифты + + + + Would you like to remove all fonts? + Желаете удалить все шрифты? + + + + AppearanceOptionsWidget + + + Form + Форма + + + + User Interface Mode + Режим пользовательского интерфейса + + + + AssistantClient + + + Unable to send request: Assistant is not responding. + Невозможно отправить запрос: Qt Assistant не отвечает. + + + + The binary '%1' does not exist. + Исполняемый файл '%1' не существует. + + + + Unable to launch assistant (%1). + Невозможно запустить Qt Assistant (%1). + + + + BrushManagerProxy + + + The element '%1' is missing the required attribute '%2'. + У элемента '%1' отсутствует необходимый атрибут '%2'. + + + + Empty brush name encountered. + Обнаружено пустое название кисти. + + + + An unexpected element '%1' was encountered. + Обнаружен неожиданный элемент '%1'. + + + + An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4 + При чтении файла описания кистей '%1' возникла ошибка разбора строки %2 в позиции %3: %4 + + + + An error occurred when reading the resource file '%1' at line %2, column %3: %4 + При чтении файла ресурсов '%1' возникла ошибка разбора строки %2 в позиции %3: %4 + + + + BrushPropertyManager + + + No brush + Пустая + + + + Solid + Сплошная + + + + Dense 1 + Плотность 1 + + + + Dense 2 + Плотность 2 + + + + Dense 3 + Плотность 3 + + + + Dense 4 + Плотность 4 + + + + Dense 5 + Плотность 5 + + + + Dense 6 + Плотность 6 + + + + Dense 7 + Плотность 7 + + + + Horizontal + Горизонтальная + + + + Vertical + Вертикальная + + + + Cross + Крестообразная + + + + Backward diagonal + Обратная диагональ + + + + Forward diagonal + Диагональ + + + + Crossing diagonal + Пересекающиеся диагонали + + + + Style + Стиль + + + + Color + Цвет + + + + [%1, %2] + [%1, %2] + + + + Command + + + + Change signal + Сменить сигнал + + + + + Change slot + Сменить слот + + + + Change signal-slot connection + Изменить соединение сигнал-слот + + + + Change sender + Сменить отправителя + + + + Change receiver + Сменить получателя + + + + Create button group + Создать группу кнопок + + + + Break button group + Разбить группу кнопок + + + + Break button group '%1' + Разбить группу кнопок '%1' + + + + Add buttons to group + Добавить кнопки в группу + + + + + Add '%1' to '%2' + Command description for adding buttons to a QButtonGroup + Добавить '%1' в '%2' + + + + Remove buttons from group + Удалить кнопки из группы + + + + Remove '%1' from '%2' + Command description for removing buttons from a QButtonGroup + Удалить '%1' из '%2' + + + + Add connection + Добавить соединение + + + + Adjust connection + Настроить соединение + + + + Delete connections + Удалить соединения + + + + Change source + Сменить источник + + + + Change target + Сменить приёмника + + + + Morph %1/'%2' into %3 + MorphWidgetCommand description + Преобразовать %1/'%2' в %3 + + + + Insert '%1' + Вставить '%1' + + + + Change Z-order of '%1' + Изменить порядок удалённости '%1' + + + + Raise '%1' + Поднять '%1' + + + + Lower '%1' + Опустить '%1' + + + + Delete '%1' + Удалить '%1' + + + + Reparent '%1' + Сменить владельца у '%1' + + + + Promote to custom widget + Преобразовать в пользовательский виджет + + + + Demote from custom widget + Преобразовать из пользовательского виджета + + + + Lay out using grid + Скомпоновать, используя сетку + + + + Lay out vertically + Скомпоновать по вертикали + + + + Lay out horizontally + Скомпоновать по горизонтали + + + + Break layout + Разбить компоновку + + + + Simplify Grid Layout + Упрощённая компоновка по сетке + + + + + + Move Page + Переместить страницу + + + + + + + Delete Page + Удалить страницу + + + + + Page + Страница + + + + + + page + страница + + + + + + + Insert Page + Вставить страницу + + + + tab + вкладка + + + + Change Tab order + Изменить последовательность переключений + + + + Create Menu Bar + Создать панель меню + + + + Delete Menu Bar + Удалить панель меню + + + + Create Status Bar + Создать строку состояния + + + + Delete Status Bar + Удалить строку состояния + + + + Add Tool Bar + Добавить панель инструментов + + + + Add Dock Window + Добавить прикрепляемое окно + + + + Adjust Size of '%1' + Подогнать размер '%1' + + + + Change Form Layout Item Geometry + Изменить геометрию элементов компоновки столбцами + + + + Change Layout Item Geometry + Изменить геометрию элементов компоновки + + + + Delete Subwindow + Удалить дочернее окно + + + + Insert Subwindow + Вставить дочернее окно + + + + subwindow + дочернее окно + + + + Subwindow + Дочернее окно + + + + Change Table Contents + Изменить содержимое таблицы + + + + Change Tree Contents + Изменить содержимое дерева + + + + + Add action + Добавить действие + + + + + Remove action + Удалить действие + + + + Add menu + Добавить меню + + + + Remove menu + Удалить меню + + + + Create submenu + Создать дочернее меню + + + + Delete Tool Bar + Удалить панель инструментов + + + + Change layout of '%1' from %2 to %3 + Изменить компоновку '%1' с %2 на %3 + + + + Set action text + Установить текст действия + + + + Insert action + Вставить действие + + + + + Move action + Переместить действие + + + + Change Title + Изменить заголовок + + + + Insert Menu + Вставить меню + + + + Changed '%1' of '%2' + Изменено '%1' у '%2' + + + + Changed '%1' of %n objects + + Изменено '%1' у %n объекта + Изменено '%1' у %n объектов + Изменено '%1' у %n объектов + + + + + Reset '%1' of '%2' + Восстановлено '%1' у '%2' + + + + Reset '%1' of %n objects + + Восстановлено '%1' у %n объекта + Восстановлено '%1' у %n объектов + Восстановлено '%1' у %n объектов + + + + + Add dynamic property '%1' to '%2' + Добавлено динамическое свойство '%1' '%2' + + + + Add dynamic property '%1' to %n objects + + Добавлено динамическое свойство '%1' %n объекту + Добавлено динамическое свойство '%1' %n объектам + Добавлено динамическое свойство '%1' %n объектам + + + + + Remove dynamic property '%1' from '%2' + Удалено динамическое свойство '%1' у '%2' + + + + Remove dynamic property '%1' from %n objects + + Удалено динамическое свойство '%1' у %n объекта + Удалено динамическое свойство '%1' у %n объектов + Удалено динамическое свойство '%1' у %n объектов + + + + + Change script + Изменить сценарий + + + + Change signals/slots + Изменить сигналы/слоты + + + + ConnectDialog + + + Configure Connection + Настройка соединения + + + + + GroupBox + GroupBox + + + + + Edit... + Изменить... + + + + Show signals and slots inherited from QWidget + Показывать сигналы и слоты, унаследованные от QWidget + + + + DPI_Chooser + + + Standard (96 x 96) + Embedded device standard screen resolution + Стандартное (96 x 96) + + + + Greenphone (179 x 185) + Embedded device screen resolution + Greenphone (179 x 185) + + + + High (192 x 192) + Embedded device high definition screen resolution + Высокое (192 x 192) + + + + Designer + + + Qt Designer + Qt Designer + + + + This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form. + Этот файл содержит верхнеуровневые разделители.<br>Они <b>НЕ</b> были сохранены в форме. + + + + Perhaps you forgot to create a layout? + Возможно, вы забыли создать компоновщик? + + + + Invalid ui file: The root element <ui> is missing. + Некорректный файл ui: Отсутствует корневой элемент <ui>. + + + + An error has occurred while reading the ui file at line %1, column %2: %3 + При чтении файла ui в строке %1 позиции %2 возникла ошибка: %3 + + + + This file cannot be read because it was created using %1. + Не удалось прочитать файл, так как он был создан с использованием %1. + + + + This file was created using Designer from Qt-%1 and cannot be read. + Не удалось прочитать файл, так как он был создан с использованием Designer из Qt-%1. + + + + The converted file could not be read. + Не удалось прочитать преобразованный файл. + + + + This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer. + Этот файл был создан с использованием Designer из Qt-%1 и будет преобразован в новый формат. + + + + The old form has not been touched, but you will have to save the form under a new name. + Старая форма была изменена, но вы можете сохранить форму под новым именем. + + + + This file was created using Designer from Qt-%1 and could not be read: +%2 + Не удалось прочитать файл, так как он был создан с использованием Designer из Qt-%1: +%2 + + + + Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format. + Пожалуйста, пропустите его через <b>uic3&nbsp;-convert</b> для преобразования в формат ui для Qt-4. + + + + This file cannot be read because the extra info extension failed to load. + Не удалось прочитать файл, так как возникла ошибка при загрузке расширения дополнительной информации. + + + + Custom Widgets + Пользовательские виджеты + + + + Promoted Widgets + Преобразованные виджеты + + + + Unable to launch %1. + Невозможно запустить %1. + + + + %1 timed out. + %1 время ожидания истекло. + + + + DesignerMetaEnum + + + %1 is not a valid enumeration value of '%2'. + %1 не является корректным перечислением типа '%2'. + + + + '%1' could not be converted to an enumeration value of type '%2'. + Не удалось преобразовать '%1' к значению перечисления '%2'. + + + + DesignerMetaFlags + + + '%1' could not be converted to a flag value of type '%2'. + Не удалось преобразовать '%1' к флаговому значению типа '%2'. + + + + DeviceProfile + + + '%1' is not a number. + Reading a number for an embedded device profile + '%1' не является числом. + + + + An invalid tag <%1> was encountered. + Обнаружен некоррекнтый тэг <%1>. + + + + DeviceProfileDialog + + + &Family + &Шрифт + + + + &Point Size + &Размер + + + + Style + Начертание + + + + Device DPI + DPI устройства + + + + Name + Название + + + + DeviceSkin + + + The image file '%1' could not be loaded. + Не удалось загрузить файл изображения '%1'. + + + + The skin directory '%1' does not contain a configuration file. + Каталог '%1' не содержит файла настроек обложки. + + + + The skin configuration file '%1' could not be opened. + Не удалось открыть файл настроек обложки '%1'. + + + + The skin configuration file '%1' could not be read: %2 + Не удалось прочитать файл настроек обложки '%1': %2 + + + + Syntax error: %1 + Синтаксическая ошибка: %1 + + + + The skin "up" image file '%1' does not exist. + Отсутствует файл изображения "up" обложки '%1'. + + + + The skin "down" image file '%1' does not exist. + Отсутствует файл изображения "down" обложки '%1'. + + + + The skin "closed" image file '%1' does not exist. + Отсутствует файл изображения обложки "closed" '%1'. + + + + The skin cursor image file '%1' does not exist. + Отсутствует файл изображения курсора обложки '%1'. + + + + Syntax error in area definition: %1 + Синтаксическая ошибка в определении области: %1 + + + + Mismatch in number of areas, expected %1, got %2. + Несоответствие количества областей: ожидалось %1, найдено %2. + + + + EmbeddedOptionsControl + + + <html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html> + Format embedded device profile description + <html><table><tr><td><b>Шрифт</b></td><td>%1, %2</td></tr><tr><td><b>Стиль</b></td><td>%3</td></tr><tr><td><b>Разрешение</b></td><td>%4 x %5</td></tr></table></html> + + + + EmbeddedOptionsPage + + + Embedded Design + Tab in preferences dialog + Оформление портативных устройств + + + + Device Profiles + EmbeddedOptionsControl group box" + Профили устройств + + + + FontPanel + + + Font + Шрифт + + + + &Writing system + Система &письма + + + + &Family + &Шрифт + + + + &Style + &Начертание + + + + &Point size + &Размер + + + + FontPropertyManager + + + PreferDefault + По умолчанию + + + + NoAntialias + Без сглаживания + + + + PreferAntialias + Сглаживание, если возможно + + + + Antialiasing + Сглаживание + + + + FormBuilder + + + Invalid stretch value for '%1': '%2' + Parsing layout stretch values + Некорректный коэффициент растяжения для '%1': '%2' + + + + Invalid minimum size for '%1': '%2' + Parsing grid layout minimum size values + Некорректный минимальный размер для '%1': '%2' + + + + FormEditorOptionsPage + + + %1 % + %1 % + + + + Preview Zoom + Масштаб предпросмотра + + + + Default Zoom + Масштаб по умолчанию + + + + Forms + Tab in preferences dialog + Формы + + + + Default Grid + Сетка по умолчанию + + + + FormLayoutRowDialog + + + Add Form Layout Row + нелепица какая-то + Добавление строки компоновки компоновщика формы + + + + &Label text: + Текст &метки: + + + + Field &type: + &Тип поля: + + + + &Field name: + Имя п&оля: + + + + &Buddy: + П&артнёр: + + + + &Row: + &Строка: + + + + Label &name: + Имя м&етки: + + + + FormWindow + + + Unexpected element <%1> + Неожиданный элемент <%1> + + + + Error while pasting clipboard contents at line %1, column %2: %3 + Ошибка вставки содержимого из буфера обмена в строке %1, позиции %2: %3 + + + + FormWindowSettings + + + Form Settings + Настройки формы + + + + Layout &Default + Компоновка по &умолчанию + + + + &Spacing: + &Отступ: + + + + &Margin: + &Границы: + + + + &Layout Function + &Функция компоновки + + + + Ma&rgin: + Г&раницы: + + + + Spa&cing: + О&тступ: + + + + &Author + &Автор + + + + &Include Hints + &Подключить подсказки + + + + &Pixmap Function + &Загрузчик изображений + + + + Grid + Сетка + + + + Embedded Design + Оформление портативных устройств + + + + IconSelector + + + All Pixmaps ( + Растровые изображения ( + + + + ItemPropertyBrowser + + + XX Icon Selected off + Sample string to determinate the width for the first column of the list item property browser + XX Пикт Выделена откл + + + + LanguageResourceDialog + + + Choose Resource + Выбор ресурса + + + + MainWindowBase + + + Main + Not currently used (main tool bar) + Главное + + + + File + Файл + + + + Edit + Правка + + + + Tools + Инструменты + + + + Form + Форма + + + + Qt Designer + Qt Designer + + + + NewForm + + + C&reate + &Создать + + + + Recent + Последние + + + + &Close + &Закрыть + + + + &Open... + &Открыть... + + + + &Recent Forms + &Последние формы + + + + Read error + Ошибка чтения + + + + New Form + Новая форма + + + + Show this Dialog on Startup + Показывать диалог при старте + + + + A temporary form file could not be created in %1. + Временный файл формы не может быть создан в %1. + + + + The temporary form file %1 could not be written. + Временный файл формы %1 не может быть записан. + + + + NewFormWidget + + + Unable to open the form template file '%1': %2 + Невозможно открыть файл шаблона формы '%1': %2 + + + + ObjectInspectorModel + + + Object + Объект + + + + Class + Класс + + + + separator + разделитель + + + + <noname> + <без имени> + + + + ObjectNameDialog + + + Change Object Name + Изменить имя объекта + + + + Object Name + Имя объекта + + + + PluginDialog + + + Plugin Information + Информация о модуле + + + + 1 + 1 + + + + PreferencesDialog + + + Preferences + Настройки + + + + PreviewConfigurationWidget + + + Default + По умолчанию + + + + None + Нет + + + + Browse... + Обзор... + + + + Form + Форма + + + + Print/Preview Configuration + Настройка печати/предпросмотра + + + + Style + Стиль + + + + Style sheet + Таблица стилей + + + + + + ... + ... + + + + Device skin + Обложка устройства + + + + PromotionModel + + + Not used + Usage of promoted widgets + Не используется + + + + Q3WizardContainer + + + + Page + Страница + + + + QAbstractFormBuilder + + + Unexpected element <%1> + Неожиданный элемент <%1> + + + + An error has occurred while reading the ui file at line %1, column %2: %3 + Возникла ошибка при чтении файла ui в строке %1 позиции %2: %3 + + + + Invalid ui file: The root element <ui> is missing. + Неверный файл ui: Отсутствует корневой элемент <ui>. + + + + The creation of a widget of the class '%1' failed. + Не удалось создание виджета класса '%1'. + + + + Attempt to add child that is not of class QWizardPage to QWizard. + Попытка добавить в QWizard дочерний виджет, который не является классом QWizardPage. + + + + Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. +This indicates an inconsistency in the ui-file. + Попытка добавить компоновщик виджету '%1' (%2), у которого уже имеется компоновщик типа %3. +Это указывает на некорректность файла UI. + + + + Empty widget item in %1 '%2'. + Пустой элемент виджета в %1 '%2'. + + + + Flags property are not supported yet. + Флаговые свойства еще не поддерживаются. + + + + While applying tab stops: The widget '%1' could not be found. + + + + + Invalid QButtonGroup reference '%1' referenced by '%2'. + '%2' содержит некорректную ссылку на QButtonGroup '%1'. + + + + This version of the uitools library is linked without script support. + Данная версия библиотеки uitools собрана без поддержки сценариев. + + + + QAxWidgetPlugin + + + ActiveX control + Элемент управления ActiveX + + + + ActiveX control widget + Виджет элемента управления ActiveX + + + + QAxWidgetTaskMenu + + + Set Control + Установить элемент управления + + + + Reset Control + + + + + Licensed Control + + + + + The control requires a design-time license + Компонент требует лицензию периода разработки + + + + QCoreApplication + + + %1 is not a promoted class. + %1 не является преобразованным классом. + + + + The base class %1 is invalid. + Неверный базовый класс %1. + + + + The class %1 already exists. + Класс %1 уже существует. + + + + Promoted Widgets + Преобразованные виджеты + + + + The class %1 cannot be removed + Нельзя удалить класс %1 + + + + The class %1 cannot be removed because it is still referenced. + Нельзя удалить класс %1, так как на него ещё есть ссылки. + + + + The class %1 cannot be renamed + Нельзя переименовать класс %1 + + + + The class %1 cannot be renamed to an empty name. + Нельзя дать классу %1 пустое имя. + + + + There is already a class named %1. + Уже есть класс с именем %1. + + + + Cannot set an empty include file. + перевод близко к тексту - буквальный совсем глаз режет + Пустое имя у подключаемого файла не допустимо. + + + + Exception at line %1: %2 + Исключение в строке %1: %2 + + + + Unknown error + Неизвестная ошибка + + + + An error occurred while running the script for %1: %2 +Script: %3 + При выполнении сценария %1 возникла ошибка: %2 +Сценарий: %3 + + + + QDesigner + + + %1 - warning + %1 - предупреждение + + + + Qt Designer + Qt Designer + + + + This application cannot be used for the Console edition of Qt + Это приложение не может быть использовано для консольной версии Qt + + + + QDesignerActions + + + Saved %1. + Сохранено %1. + + + + Edit Widgets + Правка виджетов + + + + &Quit + &Выход + + + + &Minimize + &Свернуть + + + + Bring All to Front + Перенести все назад + + + + Preferences... + Настройки... + + + + Clear &Menu + Очистить &меню + + + + CTRL+SHIFT+S + + + + + CTRL+R + + + + + CTRL+M + + + + + Qt Designer &Help + &Справка по Qt Designer + + + + Current Widget Help + Справка по виджету + + + + What's New in Qt Designer? + Что нового в Qt Designer? + + + + About Plugins + О модулях + + + + + About Qt Designer + О Qt Designer + + + + About Qt + О Qt + + + + + Open Form + Открыть форму + + + + + + Designer UI files (*.%1);;All Files (*) + UI файлы Qt Designer (*.%1);;Все файлы (*) + + + + %1 already exists. +Do you want to replace it? + %1 уже существует. +Хотите заменить его? + + + + Additional Fonts... + Дополнительные шрифты... + + + + CTRL+Q + + + + + &Recent Forms + &Последние формы + + + + Designer + Qt Designer + + + + Feature not implemented yet! + Возможность ещё не реализована! + + + + Read error + Ошиька чтения + + + + %1 +Do you want to update the file location or generate a new form? + %1 +Вы хотите обновить расположение файла или генерировать новую форму? + + + + &Update + &Обновить + + + + &New Form + &Новая форма + + + + + Save Form? + Сохранить форму? + + + + Could not open file + Невозможно открыть файл + + + + Select New File + Выбрать новый файл + + + + Could not write file + Невозможно записать файл + + + + &Close Preview + &Закрыть предпросмотр + + + + &New... + &Новый... + + + + &Open... + &Открыть... + + + + &Save + &Сохранить + + + + Save &As... + Сохранить &как... + + + + Save A&ll + Сохранить &все + + + + Save As &Template... + Сохранить как &шаблон... + + + + + &Close + &Закрыть + + + + Save &Image... + Сохранить &Изображение... + + + + &Print... + &Печать... + + + + View &Code... + Показать &код... + + + + ALT+CTRL+S + + + + + + Save Form As + Сохранить форму как + + + + Preview failed + Ошибка предпросмотра + + + + Code generation failed + Ошибка генерации кода + + + + The file %1 could not be opened. +Reason: %2 +Would you like to retry or select a different file? + Файл %1 не может быть открыт. +Причина: %2 +Вы хотите повторить или выбрать другой файл? + + + + It was not possible to write the entire file %1 to disk. +Reason:%2 +Would you like to retry? + Не удалось полностью записать файл %1 на диск. +Причина: %2 +Желаете повторить? + + + + + Assistant + Qt Assistant + + + + + The backup file %1 could not be written. + Не удалось записать файл резервной копии %1. + + + + The backup directory %1 could not be created. + Не удалось создать каталог резервных копий %1. + + + + The temporary backup directory %1 could not be created. + Не удалось создать временный каталог резервных копий %1. + + + + Image files (*.%1) + Файлы изображений (*.%1) + + + + + Save Image + Сохранить изображение + + + + Saved image %1. + Сохранить изображение %1. + + + + The file %1 could not be written. + Файл %1 не может быть записан. + + + + Please close all forms to enable the loading of additional fonts. + Пожалуйста закройте все формы, чтобы разрешить загрузку дополнительных шрифтов. + + + + Printed %1. + Распечатано %1. + + + + QDesignerAppearanceOptionsPage + + + Appearance + Tab in preferences dialog + Оформление + + + + QDesignerAppearanceOptionsWidget + + + Docked Window + Прикрепляемое окно + + + + Multiple Top-Level Windows + Множество окон верхнего уровня + + + + Toolwindow Font + Шрифт окна инструментов + + + + QDesignerAxWidget + + + Reset control + Сбросить элемент управления + + + + Set control + Установить элемент управления + + + + Control loaded + Элемент управления загружен + + + + A COM exception occurred when executing a meta call of type %1, index %2 of "%3". + Возникло исключение COM при выполнении мета-вызова типа %1, индекс %2 "%3". + + + + QDesignerFormBuilder + + + Script errors occurred: + Возникла ошибка сценария: + + + + The preview failed to build. + Не удалось создать предпросмотр. + + + + Designer + Qt Designer + + + + QDesignerFormWindow + + + %1 - %2[*] + %1 - %2[*] + + + + Save Form? + Сохранить форму? + + + + Do you want to save the changes to this document before closing? + Документ был изменен, хотите сохранить изменения? + + + + If you don't save, your changes will be lost. + Если вы не сохраните, ваши изменения будут потеряны. + + + + QDesignerMenu + + + Type Here + Пишите здесь + + + + Add Separator + Добавить разделитель + + + + Insert separator + Вставить разделитель + + + + Remove separator + Удалить разделитель + + + + Remove action '%1' + Удалить действие '%1' + + + + + Add separator + Добавить разделитель + + + + Insert action + Вставить действие + + + + QDesignerMenuBar + + + Type Here + Пишите здесь + + + + Remove Menu '%1' + Удалить меню '%1' + + + + Remove Menu Bar + Удалить панель меню + + + + Menu + Меню + + + + QDesignerPluginManager + + + An XML error was encountered when parsing the XML of the custom widget %1: %2 + Обнаружена ошибка XML при разборе XML пользовательского виджета %1: %2 + + + + The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>. + XML пользовательского виджета %1 не содержит элементов <widget> и <ui>. + + + + The class attribute for the class %1 is missing. + Отсутствует атрибут для класса %1. + + + + The class attribute for the class %1 does not match the class name %2. + Атрибут для класса %1 не совпадает с именем класса %2. + + + + QDesignerPropertySheet + + + Dynamic Properties + Динамические свойства + + + + QDesignerResource + + + The layout type '%1' is not supported, defaulting to grid. + Компоновка типа '%1' не поддерживается, заменена на компоновку сеткой. + + + + The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. +Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget. + Контейнерное расширение виджета '%1' (%2) возвратило виджет, который не управляется Qt Designer '%3' (%4), при запросе страницы №%5. +Страницы контейнера должны быть добавлены указанием их в XML, который возвращается методом domXml() пользовательского виджета. + + + + Unexpected element <%1> + Parsing clipboard contents + Неожиданный элемент <%1> + + + + Error while pasting clipboard contents at line %1, column %2: %3 + Parsing clipboard contents + Ошибка вставки содержимого буфера обмена в строку %1, позицию %2: %3 + + + + Error while pasting clipboard contents: The root element <ui> is missing. + Parsing clipboard contents + Ошибка вставки содержимого буфера обмена: отсутствует корневой элемент <ui>. + + + + QDesignerSharedSettings + + + The template path %1 could not be created. + Не удалось создать временный путь %1. + + + + An error has been encountered while parsing device profile XML: %1 + Обнаружена ошибка при разборе XML профиля устройства: %1 + + + + QDesignerToolWindow + + + Property Editor + Редактор свойств + + + + Action Editor + Редактор действий + + + + Object Inspector + Инспектор объектов + + + + Resource Browser + Обозреватель ресурсов + + + + Signal/Slot Editor + Редактор Сигналов/Слотов + + + + Widget Box + Панель виджетов + + + + QDesignerWidgetBox + + + An error has been encountered at line %1 of %2: %3 + Обнаружена ошибка в строке %1 из %2: %3 + + + + Unexpected element <%1> encountered when parsing for <widget> or <ui> + Обнаружен неожиданный элемент <%1> вместо <widget> или <ui> + + + + Unexpected end of file encountered when parsing widgets. + Файл неожиданно закончился при разборе виджетов. + + + + A widget element could not be found. + Не удалось обнаружить элемент виджета. + + + + QDesignerWorkbench + + + &File + &Файл + + + + F&orm + Ф&орма + + + + Preview in + Предпросмотр в + + + + &Window + &Окно + + + + &Help + &Справка + + + + Edit + Правка + + + + Toolbars + Панель инструментов + + + + Save Forms? + Сохранить форму? + + + + There are %n forms with unsaved changes. Do you want to review these changes before quitting? + + Есть %n форма с несохранёнными изменениями. Показать изменения перед выходом? + Есть %n формы с несохранёнными изменениями. Показать изменения перед выходом? + Есть %n форм с несохранёнными изменениями. Показать изменения перед выходом? + + + + + &View + &Вид + + + + &Settings + &Настройки + + + + Widget Box + Панель виджетов + + + + If you do not review your documents, all your changes will be lost. + + + + + Discard Changes + Отменить изменения + + + + Review Changes + Показать изменения + + + + Backup Information + Информация о резервировании + + + + The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them? + Последняя сессия Qt Designer не была завершена корректно. Остались резервные копии файлов. Желаете загрузить их? + + + + The file <b>%1</b> could not be opened. + Не удалось открыть файл <b>%1</b>. + + + + The file <b>%1</b> is not a valid Designer ui file. + Файл <b>%1</b> не является корректным ui файлом Qt Designer. + + + + QFormBuilder + + + An empty class name was passed on to %1 (object name: '%2'). + Empty class name passed to widget factory method + Методу %1 (объекта '%2') было передано пустое имя класса. + + + + QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'. + QFormBuilder не смог создать пользовательский виджет класса '%1'; был создан базовый класс '%2'. + + + + QFormBuilder was unable to create a widget of the class '%1'. + QFormBuilder не смог создать пользовательский виджет класса '%1'. + + + + The layout type `%1' is not supported. + Компоновка типа '%1' не поддерживается. + + + + The set-type property %1 could not be read. + Не удалось прочитать свойство %1 множественного типа. + + + + The enumeration-type property %1 could not be read. + Не удалось прочитать свойство %1 перечисляемого типа. + + + + Reading properties of the type %1 is not supported yet. + Чтение свойств типа %1 ещё не поддерживается. + + + + The property %1 could not be written. The type %2 is not supported yet. + Не удалось записать свойство %1. Тип %2 ещё не поддерживается. + + + + The enumeration-value '%1' is invalid. The default value '%2' will be used instead. + Неверное значение перечисляемого типа '%1'. Будет использоваться значение по умолчанию '%2'. + + + + The flag-value '%1' is invalid. Zero will be used instead. + Неверное флаговое значение '%1'. Будет использоваться нуль. + + + + QStackedWidgetEventFilter + + + Previous Page + Предыдущая страница + + + + Next Page + Следующая страница + + + + Delete + Удалить + + + + Before Current Page + Перед текущей страницей + + + + After Current Page + После текущей страницы + + + + Change Page Order... + Изменить порядок страниц... + + + + Change Page Order + Изменить порядок страниц + + + + Page %1 of %2 + Страница %1 из %2 + + + + Insert Page + Вставить страницу + + + + QStackedWidgetPreviewEventFilter + + + Go to previous page of %1 '%2' (%3/%4). + Перейти к предыдущей странице из %1 '%2' (%3/%4). + + + + Go to next page of %1 '%2' (%3/%4). + Перейти к следующей странице из %1 '%2' (%3/%4). + + + + QTabWidgetEventFilter + + + Delete + Удалить + + + + Before Current Page + Перед текущей страницей + + + + After Current Page + После текущей страницы + + + + Page %1 of %2 + Страница %1 из %2 + + + + Insert Page + Вставить страницу + + + + QToolBoxHelper + + + Delete Page + Удалить страницу + + + + Before Current Page + Перед текущей страницей + + + + After Current Page + После текущей страницы + + + + Change Page Order... + Изменить порядок страниц... + + + + Change Page Order + Изменить порядок страниц + + + + Page %1 of %2 + Страница %1 из %2 + + + + Insert Page + Вставить страницу + + + + QtBoolEdit + + + + + True + Да + + + + + False + Нет + + + + QtBoolPropertyManager + + + True + Да + + + + False + Нет + + + + QtCharEdit + + + Clear Char + Стереть символ + + + + QtColorEditWidget + + + ... + ... + + + + QtColorPropertyManager + + + Red + Красный + + + + Green + Зелёный + + + + Blue + Синий + + + + Alpha + Альфа + + + + QtCursorDatabase + + + Arrow + Arrow + + + + Up Arrow + Up Arrow + + + + Cross + Cross + + + + Wait + Wait + + + + IBeam + IBeam + + + + Size Vertical + Size Vertical + + + + Size Horizontal + Size Horizontal + + + + Size Backslash + Size Backslash + + + + Size Slash + Size Slash + + + + Size All + Size All + + + + Blank + Blank + + + + Split Vertical + Split Vertical + + + + Split Horizontal + Split Horizontal + + + + Pointing Hand + Pointing Hand + + + + Forbidden + Forbidden + + + + Open Hand + Open Hand + + + + Closed Hand + Closed Hand + + + + What's This + What's This + + + + Busy + Busy + + + + QtFontEditWidget + + + ... + ... + + + + Select Font + Выбрать шрифт + + + + QtFontPropertyManager + + + Family + Шрифт + + + + Point Size + Размер + + + + Bold + Жирный + + + + Italic + Курсив + + + + Underline + Подчёркнутый + + + + Strikeout + Зачёркнутый + + + + Kerning + Интервал + + + + QtGradientDialog + + + Edit Gradient + Правка градиента + + + + QtGradientEditor + + + Start X + X начала + + + + Start Y + Y начала + + + + Final X + X конца + + + + Final Y + Y конца + + + + + Central X + X центра + + + + + Central Y + Y центра + + + + Focal X + X фокуса + + + + Focal Y + Y фокуса + + + + Radius + Радиус + + + + Angle + Угол + + + + Form + Форма + + + + Gradient Editor + Редактор градиента + + + + This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop. + Эта область отображает предварительный вариант настраиваемого градиента. Также она позволяет менять с помощью перетаскивания характерные для градиента параметры, такие как: начальная и конечная точки, радиус и пр. + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + Gradient Stops Editor + Редактор опорных точек градиента + + + + This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions. + Эта область позволяет редактировать опорные точки градиента. Двойной щелчок на существующей точке создаст её копию. Двойной клик вне существующей точки создаст новую. Точки можно перемещать путем удерживания левой кнопки. По правой кнопке можно получить контекстное меню дополнительных действий. + + + + Zoom + Масштаб + + + + + Reset Zoom + 100% + + + + Position + Положение + + + + + + Hue + Оттенок + + + + H + H + + + + + Saturation + Насыщенность + + + + S + S + + + + Sat + Насыщение + + + + + Value + Значение + + + + V + V + + + + Val + Значение + + + + + + Alpha + Альфа + + + + A + A + + + + Type + Тип + + + + Spread + Заливка + + + + Color + Цвет + + + + Current stop's color + Цвет текущей точки + + + + Show HSV specification + Настройки в виде HSV + + + + HSV + HSV + + + + Show RGB specification + Настройки в виде RGB + + + + RGB + RGB + + + + Current stop's position + Положение текущей точки + + + + % + % + + + + Zoom In + Увеличить + + + + Zoom Out + Уменьшить + + + + Toggle details extension + Показать/скрыть детальные настройки + + + + > + > + + + + Linear Type + Линейный тип + + + + + + + + + ... + ... + + + + Radial Type + Радиальный тип + + + + Conical Type + Конический тип + + + + Pad Spread + Равномерная заливка + + + + Repeat Spread + Цикличная заливка + + + + Reflect Spread + Зеркальная заливка + + + + QtGradientStopsWidget + + + New Stop + Новая точка + + + + Delete + Удалить + + + + Flip All + Отобразить зеркально + + + + Select All + Выделить все + + + + Zoom In + Увеличить + + + + Zoom Out + Уменьшить + + + + Reset Zoom + Сбросить масштаб + + + + QtGradientView + + + Grad + + + + + Remove Gradient + Удалить градиент + + + + Are you sure you want to remove the selected gradient? + Вы действительно желаете удалить выбранный градиент? + + + + + New... + Новый... + + + + + Edit... + Правка... + + + + + Rename + Переименовать + + + + + Remove + Удалить + + + + Gradient View + Просмотр градиента + + + + QtGradientViewDialog + + + + Select Gradient + Выбрать градиент + + + + QtKeySequenceEdit + + + Clear Shortcut + Удалить комбинацию горячих клавиш + + + + QtLocalePropertyManager + + + %1, %2 + %1, %2 + + + + Language + Язык + + + + Country + Страна + + + + QtPointFPropertyManager + + + (%1, %2) + (%1, %2) + + + + X + X + + + + Y + Y + + + + QtPointPropertyManager + + + (%1, %2) + (%1, %2) + + + + X + X + + + + Y + Y + + + + QtPropertyBrowserUtils + + + [%1, %2, %3] (%4) + [%1, %2, %3] (%4) + + + + [%1, %2] + [%1, %2] + + + + QtRectFPropertyManager + + + [(%1, %2), %3 x %4] + [(%1, %2), %3 x %4] + + + + X + X + + + + Y + Y + + + + Width + Ширина + + + + Height + Высота + + + + QtRectPropertyManager + + + [(%1, %2), %3 x %4] + [(%1, %2), %3 x %4] + + + + X + X + + + + Y + Y + + + + Width + Ширина + + + + Height + Высота + + + + QtResourceEditorDialog + + + %1 already exists. +Do you want to replace it? + %1 уже существует. +Хотите заменить его? + + + + The file does not appear to be a resource file; element '%1' was found where '%2' was expected. + Похоже, файл не является файлом ресурсов, так как вместо элемента '%2' стоит '%1'. + + + + %1 [read-only] + %1 [только для чтения] + + + + + %1 [missing] + %1 [отсутствует] + + + + <no prefix> + <без префикса> + + + + + New Resource File + Новый файл ресурсов + + + + + Resource files (*.qrc) + Файл ресурсов (*.qrc) + + + + Import Resource File + Импортировать файл ресурсов + + + + newPrefix + + + + + <p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p> + <p><b>Предупреждение:</b> Файл</p><p>%1</p><p>находится за пределами каталога текущего файла ресурсов.</p> + + + + <p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table> + <p>Для решения нажмите:</p><table><tr><th align="left">Копировать</th><td>, чтобы скопировать в каталог файла ресурсов.</td></tr><tr><th align="left">Копировать как...</th><td>, чтобы скопировать в подкаталог каталога файла ресурсов.</td></tr><tr><th align="left">Оставить</th><td>, чтобы использовать текущее размещение.</td></tr></table> + + + + Add Files + Добавить файлы + + + + Incorrect Path + Неверный путь + + + + + + + Copy + Копировать + + + + Copy As... + Копировать как... + + + + Keep + Оставить + + + + Skip + Пропустить + + + + Clone Prefix + Приставка при клонировании + + + + Enter the suffix which you want to add to the names of the cloned files. +This could for example be a language extension like "_de". + Введите окончание, которое нужно добавлять к именам клонируемых файлов. +Это может быть, например, языковое расширение, вроде "_ru". + + + + + Copy As + Копировать как + + + + <p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p> + <p>Выбранный файл:</p><p>%1</p><p>находится вне каталога текущего файла ресурсов:</p><p>%2</p><p>Пожалуйста, выберите путь внутри этого каталога.<p> + + + + Could not overwrite %1. + Не удалось перезаписать %1. + + + + Could not copy +%1 +to +%2 + Не удалось копировать +%1 +в +%2 + + + + A parse error occurred at line %1, column %2 of %3: +%4 + Возникла ошибка разбора в строке %1 позиции %2 из %3: +%4 + + + + Save Resource File + Сохранение файла ресурсов + + + + Could not write %1: %2 + Не удалось записать %1: %2 + + + + Edit Resources + Правка ресурсов + + + + New... + Новый... + + + + Open... + Открыть... + + + + Open Resource File + Открыть файл ресурсов + + + + + Remove + Удалить + + + + + Move Up + Поднять + + + + + Move Down + Опустить + + + + + Add Prefix + Добавить приставку + + + + Add Files... + Добавить файлы... + + + + Change Prefix + Сменить приставку + + + + Change Language + Сменить язык + + + + Change Alias + Сменить псевдоним + + + + Clone Prefix... + Приставка при клонировании... + + + + Prefix / Path + Приставка / Путь + + + + Language / Alias + Язык / Псевдоним + + + + <html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html> + <html><p><b>Предупреждение:</b> Возникли проблемы при перезагрузке ресурсов:</p><pre>%1</pre></html> + + + + Resource Warning + Предупреждение + + + + Dialog + Диалог + + + + New File + Новый файл + + + + + N + N + + + + Remove File + Удалить файл + + + + + R + R + + + + I + I + + + + New Resource + Новый ресурс + + + + A + A + + + + Remove Resource or File + Удалить ресурс или файл + + + + QtResourceView + + + Size: %1 x %2 +%3 + Размер: %1 x %2 +%3 + + + + Edit Resources... + Изменить ресурсы... + + + + Reload + Перезагрузить + + + + Copy Path + Скопировать путь + + + + QtResourceViewDialog + + + Select Resource + Выбрать ресурс + + + + QtSizeFPropertyManager + + + %1 x %2 + %1 x %2 + + + + Width + Ширина + + + + Height + Высота + + + + QtSizePolicyPropertyManager + + + + <Invalid> + <Неверный> + + + + [%1, %2, %3, %4] + [%1, %2, %3, %4] + + + + Horizontal Policy + Горизонтальная политика + + + + Vertical Policy + Вертикальная политика + + + + Horizontal Stretch + Горизонтальное растяжение + + + + Vertical Stretch + Вертикальное растяжение + + + + QtSizePropertyManager + + + %1 x %2 + %1 x %2 + + + + Width + Ширина + + + + Height + Высота + + + + QtToolBarDialog + + + Custom Toolbar + Пользовательская панель инструментов + + + + < S E P A R A T O R > + < Р А З Д Е Л И Т Е Л Ь > + + + + Customize Toolbars + Настройка панелей инструментов + + + + 1 + 1 + + + + Actions + Действия + + + + Toolbars + Панель инструментов + + + + Add new toolbar + Добавить новую панель инструментов + + + + New + Новая + + + + Remove selected toolbar + Удалить выбранную панель инструментов + + + + Remove + Удалить + + + + Rename toolbar + Переименовать панель инструментов + + + + Rename + Переименовать + + + + Move action up + Переместить действие вверх + + + + Up + Вверх + + + + Remove action from toolbar + Удалить действие из панели инструментов + + + + <- + <- + + + + Add action to toolbar + Добавить действие на панель инструментов + + + + -> + -> + + + + Move action down + Переместить действие вниз + + + + Down + Вниз + + + + Current Toolbar Actions + Текущие действия панели инструментов + + + + QtTreePropertyBrowser + + + Property + Свойство + + + + Value + Значение + + + + SaveFormAsTemplate + + + Add path... + Добавить путь... + + + + Template Exists + Шаблон существует + + + + A template with the name %1 already exists. +Do you want overwrite the template? + Шаблон с именем %1 уже существует. +Желаете заменить шаблон? + + + + Overwrite Template + Заменить шаблон + + + + Open Error + Ошибка открытия + + + + There was an error opening template %1 for writing. Reason: %2 + Возникла ошибка открытия шаблона %1 для записи. Причина: %2 + + + + Write Error + Ошибка записи + + + + There was an error writing the template %1 to disk. Reason: %2 + Возникла ошибка записи шаблона %1 на диск. Причина: %2 + + + + Pick a directory to save templates in + Выберите каталог для сохранения шаблонов + + + + Save Form As Template + Сохранить форму как шаблон + + + + &Category: + &Категория: + + + + &Name: + &Имя: + + + + ScriptErrorDialog + + + An error occurred while running the scripts for "%1": + + При выполнения сценариев для "%1" возникла ошибка: + + + + + SelectSignalDialog + + + Go to slot + Переход к слоту + + + + Select signal + Выбор сигнала + + + + signal + сигнал + + + + class + класс + + + + SignalSlotConnection + + + SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4) + ОТПРАВИТЕЛЬ(%1), СИГНАЛ(%2), ПОЛУЧАТЕЛЬ(%3), СЛОТ(%4) + + + + SignalSlotDialogClass + + + Signals and slots + Сигналы и слоты + + + + Slots + Слоты + + + + + Add + Добавить + + + + + + + ... + ... + + + + + Delete + Удалить + + + + Signals + Сигналы + + + + Spacer + + + Horizontal Spacer '%1', %2 x %3 + Горизонтальный разделитель '%1', %2 x %3 + + + + Vertical Spacer '%1', %2 x %3 + Вертикальный разделитель '%1', %2 x %3 + + + + TemplateOptionsPage + + + Template Paths + Tab in preferences dialog + Слово "пути" опустил, т.к. с другими вкладками не перепутать, а длинная вкладка не смотрится. + Шаблоны + + + + ToolBarManager + + + Configure Toolbars... + Настройка панелей инструментов... + + + + Window + Окно + + + + Help + Справка + + + + Style + Стиль + + + + Dock views + Прикрепляемые панели + + + + Toolbars + Панели инструментов + + + + VersionDialog + + + <h3>%1</h3><br/><br/>Version %2 + <h3>%1</h3><br/><br/>Версия %2 + + + + Qt Designer + Qt Designer + + + + <br/>Qt Designer is a graphical user interface designer for Qt applications.<br/> + <br/>Qt Designer - дизайнер графического интерфейса пользователя для Qt-приложений.<br/> + + + + %1<br/>%2<br/>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + %1<br/>%2<br/>Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения. + + + + WidgetDataBase + + + The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged. + Файл содержит пользовательский виджет '%1', базовый класс (%2) которого отличается от текущей записи в базе виджетов (%3). База виджетов оставлена без изменений. + + + + qdesigner_internal::ActionEditor + + + New... + Новое... + + + + Edit... + Правка... + + + + Go to slot... + Перейти к слоту... + + + + Copy + Копировать + + + + Cut + Вырезать + + + + Paste + Вставить + + + + Select all + Выделить всё + + + + Delete + Удалить + + + + Actions + Действия + + + + Configure Action Editor + Настроить редактор действий + + + + Icon View + Значки + + + + Detailed View + Подробно + + + + New action + Новое действие + + + + Edit action + Правка действия + + + + Remove action '%1' + Удалить действие '%1' + + + + Remove actions + Удаление дествий + + + + Used In + Используется в + + + + qdesigner_internal::ActionModel + + + Name + Имя + + + + Used + Используется + + + + Text + Текст + + + + Shortcut + Горячая клавиша + + + + Checkable + Триггерное + + + + ToolTip + Подсказка + + + + qdesigner_internal::BuddyEditor + + + Add buddy + Добавить партнёра + + + + Remove buddies + Удалить партнёров + + + + Remove %n buddies + + Удалить %n партнёра + Удалить %n партнёров + Удалить %n партнёров + + + + + Add %n buddies + + Добавить %n партнёра + Добавить %n партнёров + Добавить %n партнёров + + + + + Set automatically + Установить автоматически + + + + qdesigner_internal::BuddyEditorPlugin + + + Edit Buddies + Правка партнёров + + + + qdesigner_internal::BuddyEditorTool + + + Edit Buddies + Правка партнёров + + + + qdesigner_internal::ButtonGroupMenu + + + Select members + Выбрать элементы + + + + Break + Разделить + + + + qdesigner_internal::ButtonTaskMenu + + + Assign to button group + Назначить группу кнопок + + + + Button group + Группа кнопок + + + + New button group + Новая группа кнопок + + + + Change text... + Изменить текст... + + + + None + Нет + + + + Button group '%1' + Группа кнопок '%1' + + + + qdesigner_internal::CodeDialog + + + Save... + Сохранить... + + + + Copy All + Копировать всё + + + + &Find in Text... + &Найти в тексте... + + + + A temporary form file could not be created in %1. + Не удалось создать временный файл формы в %1. + + + + The temporary form file %1 could not be written. + Не удалось записать временный файл формы %1. + + + + %1 - [Code] + %1 - [код] + + + + Save Code + Сохранить код + + + + Header Files (*.%1) + Заголовочные файлы (*.%1) + + + + The file %1 could not be opened: %2 + Не удалось открыть файл %1: %2 + + + + The file %1 could not be written: %2 + Не удалось записать файл %1: %2 + + + + %1 - Error + %1 - Ошибка + + + + qdesigner_internal::ColorAction + + + Text Color + Цвет текста + + + + qdesigner_internal::ComboBoxTaskMenu + + + Edit Items... + + + + + Change Combobox Contents + Изменено содержимое Combobox + + + + qdesigner_internal::CommandLinkButtonTaskMenu + + + Change description... + Изменить описание... + + + + qdesigner_internal::ConnectionEdit + + + Select All + Выделить всё + + + + Deselect All + Снять выделение + + + + Delete + Удалить + + + + qdesigner_internal::ConnectionModel + + + Sender + Отправитель + + + + Signal + Сигнал + + + + Receiver + Получатель + + + + Slot + Слот + + + + <sender> + <отправитель> + + + + <signal> + <сигнал> + + + + <receiver> + <получатель> + + + + <slot> + <слот> + + + + The connection already exists!<br>%1 + Подключение уже существует!<br>%1 + + + + Signal and Slot Editor + Радактор сигналов и слотов + + + + qdesigner_internal::ContainerWidgetTaskMenu + + + Delete + Удалить + + + + Insert + Вставить + + + + Insert Page Before Current Page + Вставить страницу перед текущей + + + + Insert Page After Current Page + Вставить страницу после текущей + + + + Add Subwindow + Добавить дочернее окно + + + + Subwindow + Дочернее окно + + + + Page + Страница + + + + Page %1 of %2 + Страница %1 из %2 + + + + qdesigner_internal::DPI_Chooser + + + System (%1 x %2) + System resolution + Системное (%1 x %2) + + + + User defined + Пользовательское + + + + x + DPI X/Y separator + x + + + + qdesigner_internal::DesignerPropertyManager + + + + AlignLeft + + + + + AlignHCenter + + + + + AlignRight + + + + + AlignJustify + + + + + AlignTop + + + + + + AlignVCenter + + + + + AlignBottom + + + + + %1, %2 + %1, %2 + + + + Customized (%n roles) + + Настроено (%n роль) + Настроено (%n роли) + Настроено (%n ролей) + + + + + Inherited + Унаследованная + + + + Horizontal + Горизонтальное + + + + Vertical + Вертикальное + + + + Normal Off + Нормальный, выкл + + + + Normal On + Нормальный, вкл + + + + Disabled Off + Выключенный, выкл + + + + Disabled On + Выключенный, вкл + + + + Active Off + Активный, выкл + + + + Active On + Активный, вкл + + + + Selected Off + Выбранный, выкл + + + + Selected On + Выбранный, вкл + + + + + translatable + переводимый + + + + + disambiguation + уточнение + + + + + comment + примечание + + + + qdesigner_internal::DeviceProfileDialog + + + Device Profiles (*.%1) + Профили устройства (*.%1) + + + + Default + По умолчанию + + + + Save Profile + Сохранение профиля + + + + Save Profile - Error + Ошибка сохранения профиля + + + + Unable to open the file '%1' for writing: %2 + Не удалось открыть файл '%1' для записи: %2 + + + + Open profile + Открытие профиля + + + + + Open Profile - Error + Ошибка отрытия профиля + + + + Unable to open the file '%1' for reading: %2 + Не удалось открыть файл '%1' для чтения: %2 + + + + '%1' is not a valid profile: %2 + '%1' не является корректным профилем: %2 + + + + qdesigner_internal::Dialog + + + Dialog + Диалог + + + + StringList + Список строк + + + + New String + Новая строка + + + + &New + &Новая + + + + Delete String + Удалить строку + + + + &Delete + &Удалить + + + + &Value: + &Значение: + + + + Move String Up + Переместить строку вверх + + + + Up + Вверх + + + + Move String Down + Переместить строку вниз + + + + Down + Вниз + + + + qdesigner_internal::EmbeddedOptionsControl + + + None + Нет + + + + Add a profile + Добавить профиль + + + + Edit the selected profile + Изменить выбранный профиль + + + + Delete the selected profile + Удалить выбранный профиль + + + + Add Profile + Добавление профиля + + + + New profile + Новый профиль + + + + Edit Profile + Изменение профиля + + + + Delete Profile + Удаление профиля + + + + Would you like to delete the profile '%1'? + Желаете удалить профиль '%1'? + + + + Default + По умолчанию + + + + qdesigner_internal::FilterWidget + + + <Filter> + <Фильтр> + + + + qdesigner_internal::FormEditor + + + Resource File Changed + Файл ресурсов был изменён + + + + The file "%1" has changed outside Designer. Do you want to reload it? + Файл "%1" был изменён вне Qt Designer. Желаете перезагрузить его? + + + + qdesigner_internal::FormLayoutMenu + + + Add form layout row... + Добавить строку компоновщика формы... + + + + qdesigner_internal::FormWindow + + + Edit contents + Изменить содержимое + + + + F2 + + + + + Insert widget '%1' + Вставить виджет '%1' + + + + Resize + Изменение размера + + + + + Key Move + Перемещение клавишей + + + + Paste %n action(s) + + Вставлено %n действие + Вставлено %n действия + Вставлено %n действий + + + + + Paste %n widget(s) + + Вставлен %n виджет + Вставлено %n виджета + Вставлено %n виджета + + + + + Paste (%1 widgets, %2 actions) + Вставлено (%1 виджетов, %2 действий) + + + + Cannot paste widgets. Designer could not find a container without a layout to paste into. + Не удалось вставить виджеты. Qt Designer не смог найти контейнер без компоновщика для вставки виджетов. + + + + Break the layout of the container you want to paste into, select this container and then paste again. + Удалите компоновщик из контейнера, в который желаете вставить виджеты, выберите его и повторите вставку. + + + + Paste error + Ошибка вставки + + + + Raise widgets + Поднятие виджетов + + + + Lower widgets + Опускание виджетов + + + + Select Ancestor + Выбрать предка + + + + Lay out + Компоновка + + + + + Drop widget + + + + + A QMainWindow-based form does not contain a central widget. + Форма, основанная на QMainWindow, не содержит центрального виджета. + + + + qdesigner_internal::FormWindowBase + + + Delete '%1' + Удалить '%1' + + + + Delete + Удалить + + + + qdesigner_internal::FormWindowManager + + + Cu&t + &Вырезать + + + + Cuts the selected widgets and puts them on the clipboard + Вырезает выбранные виджеты и помещает их в буфер обмена + + + + &Copy + &Копировать + + + + Copies the selected widgets to the clipboard + Копирует выбранные виджеты в буфер обмена + + + + &Paste + В&ставить + + + + Pastes the clipboard's contents + Вставляет содержимое буфера обмена + + + + &Delete + &Удалить + + + + Deletes the selected widgets + Удаляет выбранные виджеты + + + + Select &All + &Выделить все + + + + Selects all widgets + Выделяет все виджеты + + + + Bring to &Front + Переместить &вперед + + + + + Raises the selected widgets + Поднимает выбранные виджеты на передний план + + + + Send to &Back + Переместить &назад + + + + + Lowers the selected widgets + Опускает выбранные виджеты на задний план + + + + Adjust &Size + Подогнать &размер + + + + Adjusts the size of the selected widget + Подгоняет размер выбранного виджета + + + + Lay Out &Horizontally + Скомпоновать по &горизонтальная + + + + Lays out the selected widgets horizontally + Компонует выделенные виджеты по горизонтали (QHBoxLayout) + + + + Lay Out &Vertically + Скомпоновать по &вертикали + + + + Lays out the selected widgets vertically + Компонует выделенные виджеты по вертикали (QVBoxLayout) + + + + Lay Out in a &Form Layout + Скомпоновать в &две колонки + + + + Lays out the selected widgets in a form layout + Компонует выделенные виджеты в две колонки (QFormLayout) + + + + Lay Out in a &Grid + Скомпоновать по &сетке + + + + Lays out the selected widgets in a grid + Компонует выделенные виджеты по сетке (QGridLayout) + + + + Lay Out Horizontally in S&plitter + Скомпоновать по г&оризонтали с разделителем + + + + Lays out the selected widgets horizontally in a splitter + Компонует выделенные виджеты по горизонтали (QSplitter) + + + + Lay Out Vertically in Sp&litter + Скомпоновать по в&ертикали с разделителем + + + + Lays out the selected widgets vertically in a splitter + Компонует выделенные виджеты по вертикали (QSplitter) + + + + &Break Layout + &Удалить компоновщик + + + + Breaks the selected layout + Удаляет выбранный компоновщик + + + + Si&mplify Grid Layout + Упрост&ить компоновку по сетке + + + + Removes empty columns and rows + Удаляет пустые колонки и строки в QGridLayout + + + + &Preview... + &Предпросмотр... + + + + Preview current form + Предпросмотр формы + + + + Form &Settings... + &Настройки формы... + + + + Break Layout + Удалить компоновщик + + + + Adjust Size + Подогнать размер + + + + Could not create form preview + Title of warning message box + Не удалось создать предпросмотр формы + + + + Form Settings - %1 + Настройки формы - %1 + + + + qdesigner_internal::FormWindowSettings + + + None + Нет + + + + Device Profile: %1 + Профиль устройства: %1 + + + + qdesigner_internal::GridPanel + + + Form + Форма + + + + Grid + Сетка + + + + Visible + Видимая + + + + Grid &X + Сетка &X + + + + + Snap + Прилипать + + + + Reset + Сбросить + + + + Grid &Y + Сетка &Y + + + + qdesigner_internal::GroupBoxTaskMenu + + + Change title... + Изменить заголовок... + + + + qdesigner_internal::HtmlTextEdit + + + Insert HTML entity + Вставить элемент HTML + + + + qdesigner_internal::IconSelector + + + The pixmap file '%1' cannot be read. + Невозможно прочитать файл растрового изображения '%1'. + + + + The file '%1' does not appear to be a valid pixmap file: %2 + Файл '%1' не похож на корректный файл растрового изображения: %2 + + + + The file '%1' could not be read: %2 + Не удалось прочитать файл %1: %2 + + + + Choose a Pixmap + Выбор растрового изображения + + + + Pixmap Read Error + Ошибка чтения растрового изображения + + + + ... + ... + + + + Normal Off + Нормальный, выкл + + + + Normal On + Нормальный, вкл + + + + Disabled Off + Выключенный, выкл + + + + Disabled On + Выключенный, вкл + + + + Active Off + Активный, выкл + + + + Active On + Активный, вкл + + + + Selected Off + Выбранный, выкл + + + + Selected On + Выбранный, вкл + + + + Choose Resource... + Выбрать ресурс... + + + + Choose File... + Выбрать файл... + + + + Reset + Сбросить + + + + Reset All + Сбросить всё + + + + qdesigner_internal::ItemListEditor + + + Properties &<< + Свойства &<< + + + + + Properties &>> + Свойства &>> + + + + Items List + Список элементов + + + + New Item + Новый элемент + + + + &New + &Новый + + + + Delete Item + Удалить элемент + + + + &Delete + &Удалить + + + + Move Item Up + Переместить элемент вверх + + + + U + U + + + + Move Item Down + Переместить элемент вниз + + + + D + D + + + + qdesigner_internal::LabelTaskMenu + + + Change rich text... + Изменить форматированный текст... + + + + Change plain text... + Изменить обычный текст... + + + + qdesigner_internal::LineEditTaskMenu + + + Change text... + Изменить текст... + + + + qdesigner_internal::ListWidgetEditor + + + New Item + Новый элемент + + + + Edit List Widget + Изменение виджета List + + + + Edit Combobox + Изменение виджета ComboBox + + + + qdesigner_internal::ListWidgetTaskMenu + + + Edit Items... + + + + + Change List Contents + Изменение содержимого списка + + + + qdesigner_internal::MdiContainerWidgetTaskMenu + + + Next Subwindow + Следующее дочернее докно + + + + Previous Subwindow + Предыдущее дочернее докно + + + + Tile + Замостить + + + + Cascade + Каскадом + + + + qdesigner_internal::MenuTaskMenu + + + Remove + Удалить + + + + qdesigner_internal::MorphMenu + + + Morph into + Преобразовать в + + + + qdesigner_internal::NewActionDialog + + + New Action... + Новое действие... + + + + &Text: + &Текст: + + + + Object &name: + &Имя объекта: + + + + &Icon: + &Значок: + + + + Shortcut: + Горячая клавиша: + + + + Checkable: + Триггерное: + + + + ToolTip: + Подсказка: + + + + + ... + ... + + + + qdesigner_internal::NewDynamicPropertyDialog + + + Set Property Name + Установка имени свойства + + + + The current object already has a property named '%1'. +Please select another, unique one. + Объект уже содержит свойство с именем '%1'. +Укажите другое имя. + + + + The '_q_' prefix is reserved for the Qt library. +Please select another name. + Приставка '_q_' зарезервирована для целей библиотеки Qt. +Укажите другое имя. + + + + Create Dynamic Property + Создание динамического свойства + + + + Property Name + Имя свойства + + + + horizontalSpacer + + + + + Property Type + Тип свойства + + + + qdesigner_internal::NewFormWidget + + + Default size + Размер по умолчанию + + + + QVGA portrait (240x320) + QVGA книжная (240x320) + + + + QVGA landscape (320x240) + QVGA альбомная (320x240) + + + + VGA portrait (480x640) + VGA книжная (480x640) + + + + VGA landscape (640x480) + VGA альбомная (640x480) + + + + Widgets + New Form Dialog Categories + Виджеты + + + + Custom Widgets + Пользовательские виджеты + + + + None + Нет + + + + Error loading form + Ошибка загрузки формы + + + + Internal error: No template selected. + Внутренняя ошибка: Шаблон не выбран. + + + + 0 + 0 + + + + Choose a template for a preview + Выберите шаблон для предпросмотра + + + + Embedded Design + Оформление портативных устройств + + + + Device: + Устройство: + + + + Screen Size: + Размер экрана: + + + + qdesigner_internal::NewPromotedClassPanel + + + Add + Добавить + + + + New Promoted Class + Новый преобразованный класс + + + + Base class name: + Имя базового класса: + + + + Promoted class name: + Имя преобразованного класса: + + + + Header file: + Заголовочный файл: + + + + Global include + Глобальное включение + + + + Reset + Восстановить + + + + qdesigner_internal::ObjectInspector + + + &Find in Text... + &Найти в тексте... + + + + qdesigner_internal::ObjectInspector::ObjectInspectorPrivate + + + Change Current Page + Смена текущей страницы + + + + qdesigner_internal::OrderDialog + + + Index %1 (%2) + Индекс %1 (%2) + + + + %1 %2 + %1 %2 + + + + Change Page Order + Изменение порядка страниц + + + + Page Order + Порядок страниц + + + + Move page up + Переместить страницу выше + + + + Move page down + Переместить страницу ниже + + + + qdesigner_internal::PaletteEditor + + + Edit Palette + Правка палитры + + + + Tune Palette + Настройка палитры + + + + Show Details + Показывать детали + + + + Compute Details + Расчитывать детали + + + + Quick + Быстрый + + + + Preview + Предпросмотр + + + + Disabled + Выключенная + + + + Inactive + Неактивная + + + + Active + Активная + + + + qdesigner_internal::PaletteEditorButton + + + Change Palette + Изменить палитру + + + + qdesigner_internal::PaletteModel + + + Color Role + Роль цвета + + + + Active + Активный + + + + Inactive + Неактивный + + + + Disabled + Выключенный + + + + qdesigner_internal::PixmapEditor + + + Choose Resource... + Выбрать ресурс... + + + + Choose File... + Выбрать файл... + + + + Copy Path + Скопировать путь + + + + Paste Path + Вставить путь + + + + + ... + ... + + + + qdesigner_internal::PlainTextEditorDialog + + + Edit text + Правка текста + + + + qdesigner_internal::PluginDialog + + + Components + Компоненты + + + + Plugin Information + Информация о модуле + + + + Refresh + Обновить + + + + Scan for newly installed custom widget plugins. + Поиск вновь установленных модулей пользовательских виджетов. + + + + Qt Designer couldn't find any plugins + Qt Designer не может найти ни одного модуля + + + + Qt Designer found the following plugins + Qt Designer нашёл следующие модули + + + + New custom widget plugins have been found. + Найдены новые модули пользовательских виджетов. + + + + qdesigner_internal::PreviewActionGroup + + + %1 Style + Стиль %1 + + + + qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate + + + Load Custom Device Skin + Загрузить особую обложку устройства + + + + All QVFB Skins (*.%1) + Все обложки QVFB (*.%1) + + + + %1 - Duplicate Skin + %1 - Повторяющаяся обложка + + + + The skin '%1' already exists. + Обложка '%1' уже существует. + + + + %1 - Error + %1 - Ошибка + + + + %1 is not a valid skin directory: +%2 + %1 не является корректным каталогом обложек: +%2 + + + + qdesigner_internal::PreviewDeviceSkin + + + &Close + &Закрыть + + + + qdesigner_internal::PreviewManager + + + %1 - [Preview] + %1 - [Предпросмотр] + + + + qdesigner_internal::PreviewWidget + + + Preview Window + Окно предпросмотра + + + + LineEdit + LineEdit + + + + ComboBox + ComboBox + + + + PushButton + PushButton + + + + ButtonGroup2 + ButtonGroup2 + + + + CheckBox1 + CheckBox1 + + + + CheckBox2 + CheckBox2 + + + + ButtonGroup + ButtonGroup + + + + RadioButton1 + RadioButton1 + + + + RadioButton2 + RadioButton2 + + + + RadioButton3 + RadioButton3 + + + + qdesigner_internal::PromotionModel + + + Name + Имя + + + + Header file + Заголовочный файл + + + + Global include + Глобальное включение + + + + Usage + Использование + + + + qdesigner_internal::PromotionTaskMenu + + + Promoted widgets... + Преобразованные виджеты... + + + + Promote to ... + Преобразовать в ... + + + + Change signals/slots... + Изменить сигналы/слоты... + + + + Promote to + Преобразовать в + + + + Demote to %1 + Преобразовать в %1 + + + + qdesigner_internal::PropertyEditor + + + Add Dynamic Property... + Добавить динамическое свойство... + + + + Remove Dynamic Property + Удалить динамическое свойство + + + + Sorting + Сортировка + + + + Color Groups + Цветовые группы + + + + Tree View + Древовидный список + + + + Drop Down Button View + Вид выпадающего списка + + + + String... + Строка... + + + + Bool... + Булево... + + + + Other... + Другое... + + + + Configure Property Editor + Настроить радактор свойств + + + + Object: %1 +Class: %2 + Объект: %1 +Класс: %2 + + + + qdesigner_internal::PropertyLineEdit + + + Insert line break + Вставить разрыв строки + + + + qdesigner_internal::QDesignerPromotionDialog + + + Promoted Widgets + Преобразованные виджеты + + + + Promoted Classes + Преобразованные классы + + + + Promote + Преобразовать + + + + Change signals/slots... + Изменить сигналы/слоты... + + + + %1 - Error + %1 - Ошибка + + + + qdesigner_internal::QDesignerResource + + + Loading qrc file + Загрузка файла qrc + + + + The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p> + Не удалось найти указанный файл qrc <p><b>%1</b></p><p>Желаете обновить его расположение?</p> + + + + New location for %1 + Новое расположение %1 + + + + Resource files (*.qrc) + Файл ресурсов (*.qrc) + + + + qdesigner_internal::QDesignerTaskMenu + + + Change objectName... + Изменить objectName... + + + + Change toolTip... + Изменить toolTip... + + + + Change whatsThis... + Изменить whatsThis... + + + + Change styleSheet... + Изменить styleSheet... + + + + Create Menu Bar + Создать панель меню + + + + Add Tool Bar + Добавить панель инструментов + + + + Create Status Bar + Создать строку состояния + + + + Remove Status Bar + Удалить строку состояния + + + + Change script... + Изменить сценарий... + + + + Change signals/slots... + Изменить сигналы/слоты... + + + + Go to slot... + Перейти к слоту... + + + + Size Constraints + Ограничения размера + + + + Set Minimum Width + Установить минимальную ширину + + + + Set Minimum Height + Установить минимальную высоту + + + + Set Minimum Size + Установить минимальный размер + + + + Set Maximum Width + Установить максимальную ширину + + + + Set Maximum Height + Установить максимальную высоту + + + + Set Maximum Size + Установить максимальный размер + + + + Edit ToolTip + Правка текста всплывающей подсказки + + + + Edit WhatsThis + Правка текста подсказки режима "Что это?" + + + + no signals available + Нет доступных сигналов + + + + Set size constraint on %n widget(s) + + Установка ограничений размера для %n виджета + Установка ограничений размера для %n виджетов + Установка ограничений размера для %n виджетов + + + + + qdesigner_internal::QDesignerWidgetBox + + + + Unexpected element <%1> + Неожиданный элемент <%1> + + + + A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 +%5 + Возникла ошибка разбора в строке %1 позиции %2 кода XML, определённого для виджета %3: %4 +%5 + + + + The XML code specified for the widget %1 does not contain any widget elements. +%2 + Код XML, определённый для виджета %1, не содержит каких-либо элементов виджетов. +%2 + + + + qdesigner_internal::QtGradientEditor + + + Linear + Линейный + + + + Radial + Радиальный + + + + Conical + Конический + + + + Pad + Равномерный + + + + Repeat + Цикличный + + + + Reflect + Зеркальный + + + + qdesigner_internal::QtGradientStopsController + + + H + H + + + + S + S + + + + V + V + + + + + Hue + Оттенок + + + + Sat + Насыщ + + + + Val + Знач + + + + Saturation + Насыщенность + + + + Value + Значение + + + + R + R + + + + G + G + + + + B + B + + + + Red + Красный + + + + Green + Зелёный + + + + Blue + Синий + + + + qdesigner_internal::RichTextEditorDialog + + + Edit text + Правка текста + + + + Rich Text + Форматированный текст + + + + Source + Исходник + + + + &OK + &ОК + + + + &Cancel + От&мена + + + + qdesigner_internal::RichTextEditorToolBar + + + Bold + Жирный + + + + CTRL+B + + + + + Italic + Курсив + + + + CTRL+I + + + + + Underline + Подчёркнутый + + + + CTRL+U + + + + + Left Align + По левому краю + + + + Center + По центру + + + + Right Align + По правому краю + + + + Justify + По ширине + + + + Superscript + Верхний индекс + + + + Subscript + Нижний индекс + + + + Insert &Link + Вставить &ссылку + + + + Insert &Image + Вставить &изображение + + + + qdesigner_internal::ScriptDialog + + + Edit script + Правка сценария + + + + <html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively. + <html>Укажите сценарий Qt, который должен выполняться при загрузке формы.<br>Виджет и его дочерние виджеты доступны через переменные <i>widget</i> и <i>childWidgets</i>. + + + + Syntax error + Синтаксическая ошибка + + + + qdesigner_internal::ScriptErrorDialog + + + Script errors + Ошибки сценария + + + + qdesigner_internal::SignalSlotDialog + + + There is already a slot with the signature '%1'. + Уже есть слот с сигнатурой '%1'. + + + + There is already a signal with the signature '%1'. + Уже есть сигнал с сигнатурой '%1'. + + + + %1 - Duplicate Signature + %1 - Повторяющаяся сигнатура + + + + + Signals/Slots of %1 + Сигналы/слоты %1 + + + + qdesigner_internal::SignalSlotEditorPlugin + + + Edit Signals/Slots + Правка сигналов/слотов + + + + F4 + + + + + qdesigner_internal::SignalSlotEditorTool + + + Edit Signals/Slots + Правка сигналов/слотов + + + + qdesigner_internal::StatusBarTaskMenu + + + Remove + Удалить + + + + qdesigner_internal::StringListEditorButton + + + Change String List + Изменить список строк + + + + qdesigner_internal::StyleSheetEditorDialog + + + + Valid Style Sheet + Корректная таблица стилей + + + + Add Resource... + Добавить ресурс... + + + + Add Gradient... + Добавить градиент... + + + + Add Color... + Добавить цвет... + + + + Add Font... + Добавить шрифт... + + + + Edit Style Sheet + Правка таблицы стилей + + + + Invalid Style Sheet + Некорректная таблица стилей + + + + qdesigner_internal::TabOrderEditor + + + Start from Here + Начать отсюда + + + + Restart + Перезапустить + + + + Tab Order List... + Список порядка переключений... + + + + Tab Order List + Список порядка переключений + + + + Tab Order + Порядок переключений + + + + qdesigner_internal::TabOrderEditorPlugin + + + Edit Tab Order + Изменить порядок переключений + + + + qdesigner_internal::TabOrderEditorTool + + + Edit Tab Order + Изменить порядок переключений + + + + qdesigner_internal::TableWidgetEditor + + + + Properties &>> + Свойства &>> + + + + Edit Table Widget + Правка табличного виджета + + + + &Items + &Элементы + + + + Table Items + Элементы таблицы + + + + New Column + Новый столбец + + + + New Row + Новая строка + + + + &Columns + С&толбцы + + + + &Rows + &Строки + + + + Properties &<< + Свойства &<< + + + + qdesigner_internal::TableWidgetTaskMenu + + + Edit Items... + + + + + qdesigner_internal::TemplateOptionsWidget + + + Pick a directory to save templates in + Выберите каталог для сохранения шаблонов + + + + Form + Форма + + + + Additional Template Paths + Дополнительные пути к шаблонам + + + + + ... + ... + + + + qdesigner_internal::TextEditTaskMenu + + + Edit HTML + Правка HTML + + + + Change HTML... + Изменить HTML... + + + + Edit Text + Правка текста + + + + Change Plain Text... + Правка обычного текста... + + + + qdesigner_internal::TextEditor + + + Choose Resource... + Выбрать ресурс... + + + + Choose File... + Выбрать файл... + + + + ... + ... + + + + Choose a File + Выбор файла + + + + qdesigner_internal::ToolBarEventFilter + + + Insert Separator before '%1' + Вставить разделитель перед '%1' + + + + Append Separator + Добавить разделитель + + + + Remove action '%1' + Удалить действие '%1' + + + + Remove Toolbar '%1' + Удалить панель инструментов '%1' + + + + Insert Separator + Вставить разделитель + + + + qdesigner_internal::TreeWidgetEditor + + + New Column + Новый столбец + + + + &Columns + С&толбцы + + + + Per column properties + Свойства столбца + + + + Common properties + Общие свойства + + + + + New Item + Новый элемент + + + + + New Subitem + Новый дочерний элемент + + + + Properties &<< + Свойства &<< + + + + + Properties &>> + Свойства &>> + + + + Edit Tree Widget + Правка виджета Tree + + + + &Items + &Элементы + + + + Tree Items + Элементы дерева + + + + 1 + 1 + + + + &New + &Новый + + + + New &Subitem + Новый &дочерний элемент + + + + Delete Item + Удалить элемент + + + + &Delete + &Удалить + + + + Move Item Left (before Parent Item) + Переместить элемент влево (перед родительским) + + + + L + L + + + + Move Item Right (as a First Subitem of the Next Sibling Item) + Переместить элемент вправо (сделать первым дочерним элементом соседнего элемента) + + + + R + + + + + Move Item Up + Переместить элемент вверх + + + + U + U + + + + Move Item Down + Переместить элемент вниз + + + + D + D + + + + qdesigner_internal::TreeWidgetTaskMenu + + + Edit Items... + + + + + qdesigner_internal::WidgetBox + + + Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML. + Предупреждение: Не удалось создать виджет. Это могло произойти из-за некорректного XML пользовательского виджета. + + + + qdesigner_internal::WidgetBoxTreeWidget + + + Scratchpad + + + + + Custom Widgets + Пользовательские виджеты + + + + Expand all + Развернуть всё + + + + Collapse all + Свернуть всё + + + + List View + Список + + + + Icon View + Значки + + + + Remove + Удалить + + + + Edit name + Изменить имя + + + + qdesigner_internal::WidgetDataBase + + + A custom widget plugin whose class name (%1) matches that of an existing class has been found. + Обнаружен пользовательский модуль виджета, имя класса (%1) которого совпадает с уже имеющимся. + + + + qdesigner_internal::WidgetEditorTool + + + Edit Widgets + Правка виджетов + + + + qdesigner_internal::WidgetFactory + + + The custom widget factory registered for widgets of class %1 returned 0. + Пользовательская фабрика виджетов, зарегистрированная для класса %1, вернула 0. + + + + A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2. + Обнаружено несоответствие имени класса при создании виджета с использованием пользовательской фабрики виджетов, зарегистрированной для класса %1. Она вернула виджет класса %2. + + + + %1 Widget + Виджет %1 + + + + The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget. + При создании компоновщика не удалось определить текущую страницу контейнера '%1' (%2). Это указывает на некорректность файла ui - возможно, компоновщик был создан для контейнерного виджета. + + + + Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. +This indicates an inconsistency in the ui-file. + Попытка добавить компоновщик виджету '%1' (%2), у которого уже есть компоновщик типа %3. +Это указывает на некорректность файла ui. + + + + Cannot create style '%1'. + Не удалось создать стиль '%1'. + + + + qdesigner_internal::WizardContainerWidgetTaskMenu + + + Next + Далее + + + + Back + Назад + + + + qdesigner_internal::ZoomMenu + + + %1 % + Zoom factor + %1 % + + + -- cgit v0.12 From 30fffab792fbce4c2d415140e7cf15416f739e60 Mon Sep 17 00:00:00 2001 From: Aleksandar Sasha Babic Date: Fri, 25 Sep 2009 10:36:39 +0200 Subject: Adding test for line endings Some network tests depend on reading file and comparing it with data fetched from network. On Windows, if not set properly, git will append CRLF when checking out. This makes tests to fail as sizes and binary content are not as expected. Reviewed-by: Janne Anttila --- tests/auto/networkselftest/networkselftest.pro | 15 + tests/auto/networkselftest/rfc3252.txt | 899 +++++++++++++++++++++ tests/auto/networkselftest/tst_networkselftest.cpp | 34 + 3 files changed, 948 insertions(+) create mode 100644 tests/auto/networkselftest/rfc3252.txt diff --git a/tests/auto/networkselftest/networkselftest.pro b/tests/auto/networkselftest/networkselftest.pro index ac610de..b0d537a 100644 --- a/tests/auto/networkselftest/networkselftest.pro +++ b/tests/auto/networkselftest/networkselftest.pro @@ -3,3 +3,18 @@ load(qttest_p4) SOURCES += tst_networkselftest.cpp QT = core network +wince*: { + addFiles.sources = rfc3252.txt + addFiles.path = . + DEPLOYMENT = addFiles + DEFINES += SRCDIR=\\\"\\\" +} else:symbian* { + addFiles.sources = rfc3252.txt + addFiles.path = . + DEPLOYMENT = addFiles +} else:vxworks*: { + DEFINES += SRCDIR=\\\"\\\" +} else { + DEFINES += SRCDIR=\\\"$$PWD/\\\" +} + diff --git a/tests/auto/networkselftest/rfc3252.txt b/tests/auto/networkselftest/rfc3252.txt new file mode 100644 index 0000000..b80c61b --- /dev/null +++ b/tests/auto/networkselftest/rfc3252.txt @@ -0,0 +1,899 @@ + + + + + + +Network Working Group H. Kennedy +Request for Comments: 3252 Mimezine +Category: Informational 1 April 2002 + + + Binary Lexical Octet Ad-hoc Transport + +Status of this Memo + + This memo provides information for the Internet community. It does + not specify an Internet standard of any kind. Distribution of this + memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2002). All Rights Reserved. + +Abstract + + This document defines a reformulation of IP and two transport layer + protocols (TCP and UDP) as XML applications. + +1. Introduction + +1.1. Overview + + This document describes the Binary Lexical Octet Ad-hoc Transport + (BLOAT): a reformulation of a widely-deployed network-layer protocol + (IP [RFC791]), and two associated transport layer protocols (TCP + [RFC793] and UDP [RFC768]) as XML [XML] applications. It also + describes methods for transporting BLOAT over Ethernet and IEEE 802 + networks as well as encapsulating BLOAT in IP for gatewaying BLOAT + across the public Internet. + +1.2. Motivation + + The wild popularity of XML as a basis for application-level protocols + such as the Blocks Extensible Exchange Protocol [RFC3080], the Simple + Object Access Protocol [SOAP], and Jabber [JABBER] prompted + investigation into the possibility of extending the use of XML in the + protocol stack. Using XML at both the transport and network layer in + addition to the application layer would provide for an amazing amount + of power and flexibility while removing dependencies on proprietary + and hard-to-understand binary protocols. This protocol unification + would also allow applications to use a single XML parser for all + aspects of their operation, eliminating developer time spent figuring + out the intricacies of each new protocol, and moving the hard work of + + + + +Kennedy Informational [Page 1] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + parsing to the XML toolset. The use of XML also mitigates concerns + over "network vs. host" byte ordering which is at the root of many + network application bugs. + +1.3. Relation to Existing Protocols + + The reformulations specified in this RFC follow as closely as + possible the spirit of the RFCs on which they are based, and so MAY + contain elements or attributes that would not be needed in a pure + reworking (e.g. length attributes, which are implicit in XML.) + + The layering of network and transport protocols are maintained in + this RFC despite the optimizations that could be made if the line + were somewhat blurred (i.e. merging TCP and IP into a single, larger + element in the DTD) in order to foster future use of this protocol as + a basis for reformulating other protocols (such as ICMP.) + + Other than the encoding, the behavioral aspects of each of the + existing protocols remain unchanged. Routing, address spaces, TCP + congestion control, etc. behave as specified in the extant standards. + Adapting to new standards and experimental algorithm heuristics for + improving performance will become much easier once the move to BLOAT + has been completed. + +1.4. Requirement Levels + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in BCP 14, RFC 2119 + [RFC2119]. + +2. IPoXML + + This protocol MUST be implemented to be compliant with this RFC. + IPoXML is the root protocol REQUIRED for effective use of TCPoXML + (section 3.) and higher-level application protocols. + + The DTD for this document type can be found in section 7.1. + + The routing of IPoXML can be easily implemented on hosts with an XML + parser, as the regular structure lends itself handily to parsing and + validation of the document/datagram and then processing the + destination address, TTL, and checksum before sending it on to its + next-hop. + + The reformulation of IPv4 was chosen over IPv6 [RFC2460] due to the + wider deployment of IPv4 and the fact that implementing IPv6 as XML + would have exceeded the 1500 byte Ethernet MTU. + + + +Kennedy Informational [Page 2] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + All BLOAT implementations MUST use - and specify - the UTF-8 encoding + of RFC 2279 [RFC2279]. All BLOAT document/datagrams MUST be well- + formed and include the XMLDecl. + +2.1. IP Description + + A number of items have changed (for the better) from the original IP + specification. Bit-masks, where present have been converted into + human-readable values. IP addresses are listed in their dotted- + decimal notation [RFC1123]. Length and checksum values are present + as decimal integers. + + To calculate the length and checksum fields of the IP element, a + canonicalized form of the element MUST be used. The canonical form + SHALL have no whitespace (including newline characters) between + elements and only one space character between attributes. There + SHALL NOT be a space following the last attribute in an element. + + An iterative method SHOULD be used to calculate checksums, as the + length field will vary based on the size of the checksum. + + The payload element bears special attention. Due to the character + set restrictions of XML, the payload of IP datagrams (which MAY + contain arbitrary data) MUST be encoded for transport. This RFC + REQUIRES the contents of the payload to be encoded in the base-64 + encoding of RFC 2045 [RFC2045], but removes the requirement that the + encoded output MUST be wrapped on 76-character lines. + + + + + + + + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 3] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + +2.2. Example Datagram + + The following is an example IPoXML datagram with an empty payload: + + + + +
+ + + + + + + + + + + + + + + +
+ + +
+ +3. TCPoXML + + This protocol MUST be implemented to be compliant with this RFC. The + DTD for this document type can be found in section 7.2. + +3.1. TCP Description + + A number of items have changed from the original TCP specification. + Bit-masks, where present have been converted into human-readable + values. Length and checksum and port values are present as decimal + integers. + + To calculate the length and checksum fields of the TCP element, a + canonicalized form of the element MUST be used as in section 2.1. + + An iterative method SHOULD be used to calculate checksums as in + section 2.1. + + The payload element MUST be encoded as in section 2.1. + + + +Kennedy Informational [Page 4] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + The TCP offset element was expanded to a maximum of 255 from 16 to + allow for the increased size of the header in XML. + + TCPoXML datagrams encapsulated by IPoXML MAY omit the header + as well as the declaration. + +3.2. Example Datagram + + The following is an example TCPoXML datagram with an empty payload: + + + + + + + + + + + + + + + + + + + + + + + + +4. UDPoXML + + This protocol MUST be implemented to be compliant with this RFC. The + DTD for this document type can be found in section 7.3. + +4.1. UDP Description + + A number of items have changed from the original UDP specification. + Bit-masks, where present have been converted into human-readable + values. Length and checksum and port values are present as decimal + integers. + + + + + + + +Kennedy Informational [Page 5] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + To calculate the length and checksum fields of the UDP element, a + canonicalized form of the element MUST be used as in section 2.1. An + iterative method SHOULD be used to calculate checksums as in section + 2.1. + + The payload element MUST be encoded as in section 2.1. + + UDPoXML datagrams encapsulated by IPoXML MAY omit the header + as well as the declaration. + +4.2. Example Datagram + + The following is an example UDPoXML datagram with an empty payload: + + + + + + + + + + + + + + +5. Network Transport + + This document provides for the transmission of BLOAT datagrams over + two common families of physical layer transport. Future RFCs will + address additional transports as routing vendors catch up to the + specification, and we begin to see BLOAT routed across the Internet + backbone. + +5.1. Ethernet + + BLOAT is encapsulated in Ethernet datagrams as in [RFC894] with the + exception that the type field of the Ethernet frame MUST contain the + value 0xBEEF. The first 5 octets of the Ethernet frame payload will + be 0x3c 3f 78 6d 6c (" + --> + + + + +Kennedy Informational [Page 7] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 9] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + + + + + + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 10] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + + + + + + + + + + + +7.2. TCPoXML DTD + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 11] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 12] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + + + + + + + + + + + + + + + + + + +7.3. UDPoXML DTD + + + + + + + + + + + + + + + +Kennedy Informational [Page 13] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + +8. Security Considerations + + XML, as a subset of SGML, has the same security considerations as + specified in SGML Media Types [RFC1874]. Security considerations + that apply to IP, TCP and UDP also likely apply to BLOAT as it does + not attempt to correct for issues not related to message format. + +9. References + + [JABBER] Miller, J., "Jabber", draft-miller-jabber-00.txt, + February 2002. (Work in Progress) + + [RFC768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, + August 1980. + + [RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, + September 1981. + + [RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC + 793, September 1981. + + [RFC894] Hornig, C., "Standard for the Transmission of IP + Datagrams over Ethernet Networks.", RFC 894, April 1984. + + [RFC1042] Postel, J. and J. Reynolds, "Standard for the + Transmission of IP Datagrams Over IEEE 802 Networks", STD + 43, RFC 1042, February 1988. + + [RFC1123] Braden, R., "Requirements for Internet Hosts - + Application and Support", RFC 1123, October 1989. + + [RFC1874] Levinson, E., "SGML Media Types", RFC 1874, December + 1995. + + [RFC2003] Perkins, C., "IP Encapsulation within IP", RFC 2003, + October 1996. + + [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part One: Format of Internet Message + Bodies", RFC 2045, November 1996. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2279] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", RFC 2279, January 1998. + + + + + +Kennedy Informational [Page 14] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + + [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 + (IPv6) Specification", RFC 2460, December 1998. + + [RFC3080] Rose, M., "The Blocks Extensible Exchange Protocol Core", + RFC 3080, March 2001. + + [SOAP] Box, D., Ehnebuske, D., Kakivaya, G., Layman, A., + Mendelsohn, N., Nielsen, H. F., Thatte, S. Winer, D., + "Simple Object Access Protocol (SOAP) 1.1" World Wide Web + Consortium Note, May 2000 http://www.w3.org/TR/SOAP/ + + [XML] Bray, T., Paoli, J., Sperberg-McQueen, C. M., "Extensible + Markup Language (XML)" World Wide Web Consortium + Recommendation REC- xml-19980210. + http://www.w3.org/TR/1998/REC-xml-19980210 + +10. Author's Address + + Hugh Kennedy + Mimezine + 1060 West Addison + Chicago, IL 60613 + USA + + EMail: kennedyh@engin.umich.edu + + + + + + + + + + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 15] + +RFC 3252 Binary Lexical Octet Ad-hoc Transport 1 April 2002 + + +11. Full Copyright Statement + + Copyright (C) The Internet Society (2002). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Kennedy Informational [Page 16] + diff --git a/tests/auto/networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp index 00ccadb..4e60101 100644 --- a/tests/auto/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/networkselftest/tst_networkselftest.cpp @@ -41,6 +41,14 @@ #include #include + +#ifdef Q_OS_SYMBIAN +// In Symbian OS test data is located in applications private dir +// Current path (C:\private\) contains only ascii chars +//#define SRCDIR QDir::currentPath() +#define SRCDIR "." +#endif + #include "../network-settings.h" class tst_NetworkSelfTest: public QObject @@ -57,6 +65,7 @@ private slots: void serverReachability(); void remotePortsOpen_data(); void remotePortsOpen(); + void fileLineEndingTest(); // specific protocol tests void ftpServer(); @@ -392,6 +401,31 @@ void tst_NetworkSelfTest::remotePortsOpen() QVERIFY(socket.state() == QAbstractSocket::ConnectedState); } + +void tst_NetworkSelfTest::fileLineEndingTest() +{ + QString referenceName = SRCDIR "/rfc3252.txt"; + long long expectedReferenceSize = 25962; + + QString lineEndingType("LF"); + + QFile reference(referenceName); + QVERIFY(reference.open(QIODevice::ReadOnly)); + QByteArray byteLine = reference.readLine(); + if(byteLine.endsWith("\r\n")) + lineEndingType = "CRLF"; + else if(byteLine.endsWith("\r")) + lineEndingType = "CR"; + + QString referenceAsTextData; + QFile referenceAsText(referenceName); + QVERIFY(referenceAsText.open(QIODevice::ReadOnly)); + referenceAsTextData = referenceAsText.readAll(); + + QVERIFY2(expectedReferenceSize == referenceAsTextData.length(), QString("Reference file %1 has %2 as line ending and file size not matching - Git checkout issue !?!").arg(referenceName, lineEndingType).toLocal8Bit()); + QVERIFY2(!lineEndingType.compare("LF"), QString("Reference file %1 has %2 as line ending - Git checkout issue !?!").arg(referenceName, lineEndingType).toLocal8Bit()); +} + static QList ftpChat() { return QList() << Chat::expect("220") -- cgit v0.12 From 9b90ec5dad799d3e7a7efe6095fdc19ce63d2a8f Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Fri, 25 Sep 2009 10:52:56 +0200 Subject: Raycasting example: basic, minimalistic support for touch devices. Reviewed-by: TrustMe --- demos/embedded/raycasting/raycasting.cpp | 86 ++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/demos/embedded/raycasting/raycasting.cpp b/demos/embedded/raycasting/raycasting.cpp index 3836dc1..ba91281 100644 --- a/demos/embedded/raycasting/raycasting.cpp +++ b/demos/embedded/raycasting/raycasting.cpp @@ -71,7 +71,8 @@ public: , angle(0.5) , playerPos(1.5, 1.5) , angleDelta(0) - , moveDelta(0) { + , moveDelta(0) + , touchDevice(false) { // http://www.areyep.com/RIPandMCS-TextureLibrary.html textureImg.load(":/textures.png"); @@ -83,6 +84,7 @@ public: watch.start(); ticker.start(25, this); setAttribute(Qt::WA_OpaquePaintEvent, true); + setMouseTracking(false); } void updatePlayer() { @@ -114,10 +116,12 @@ public: void render() { // setup the screen surface - if (buffer.size() != size()) - buffer = QImage(size(), QImage::Format_ARGB32); + if (buffer.size() != bufferSize) + buffer = QImage(bufferSize, QImage::Format_ARGB32); int bufw = buffer.width(); int bufh = buffer.height(); + if (bufw <= 0 || bufh <= 0) + return; // we intentionally cheat here, to avoid detach const uchar *ptr = buffer.bits(); @@ -241,11 +245,36 @@ public: *pixel2 = qRgb(96, 96, 96); } - update(); + update(QRect(QPoint(0, 0), bufferSize)); } protected: + void resizeEvent(QResizeEvent*) { +#if defined(Q_OS_SYMBIAN) + // FIXME: use HAL + if (width() > 480 || height() > 480) + touchDevice = true; +#else + touchDevice = false; +#endif + if (touchDevice) { + if (width() < height()) { + trackPad = QRect(0, height() / 2, width(), height() / 2); + centerPad = QPoint(width() / 2, height() * 3 / 4); + bufferSize = QSize(width(), height() / 2); + } else { + trackPad = QRect(width() / 2, 0, width() / 2, height()); + centerPad = QPoint(width() * 3 / 4, height() / 2); + bufferSize = QSize(width() / 2, height()); + } + } else { + trackPad = QRect(); + bufferSize = size(); + } + update(); + } + void timerEvent(QTimerEvent*) { updatePlayer(); render(); @@ -255,7 +284,33 @@ protected: void paintEvent(QPaintEvent *event) { QPainter p(this); p.setCompositionMode(QPainter::CompositionMode_Source); + + if (touchDevice && event->rect().intersects(trackPad)) { + p.fillRect(trackPad, Qt::white); + p.setPen(QPen(QColor(224, 224, 224), 6)); + int rad = qMin(trackPad.width(), trackPad.height()) * 0.3; + p.drawEllipse(centerPad, rad, rad); + + p.setPen(Qt::NoPen); + p.setBrush(Qt::gray); + + QPolygon poly; + poly << QPoint(-30, 0); + poly << QPoint(0, -40); + poly << QPoint(30, 0); + + p.translate(centerPad); + for (int i = 0; i < 4; ++i) { + p.rotate(90); + p.translate(0, 20 - rad); + p.drawPolygon(poly); + p.translate(0, rad - 20); + } + p.resetTransform(); + } + p.drawImage(event->rect(), buffer, event->rect()); + p.end(); } void keyPressEvent(QKeyEvent *event) { @@ -282,6 +337,25 @@ protected: moveDelta = (moveDelta < 0) ? 0 : moveDelta; } + void mousePressEvent(QMouseEvent *event) { + qreal dx = centerPad.x() - event->pos().x(); + qreal dy = centerPad.y() - event->pos().y(); + angleDelta = dx * 2 * M_PI / width(); + moveDelta = dy * 10 / height(); + } + + void mouseMoveEvent(QMouseEvent *event) { + qreal dx = centerPad.x() - event->pos().x(); + qreal dy = centerPad.y() - event->pos().y(); + angleDelta = dx * 2 * M_PI / width(); + moveDelta = dy * 10 / height(); + } + + void mouseReleaseEvent(QMouseEvent*) { + angleDelta = 0; + moveDelta = 0; + } + private: QTime watch; QBasicTimer ticker; @@ -292,6 +366,10 @@ private: qreal moveDelta; QImage textureImg; int textureCount; + bool touchDevice; + QRect trackPad; + QPoint centerPad; + QSize bufferSize; }; int main(int argc, char **argv) -- cgit v0.12 From 3df37bbf2bf3e4f3745496c21353015de80d0a5c Mon Sep 17 00:00:00 2001 From: Iain Date: Thu, 24 Sep 2009 17:10:30 +0200 Subject: Update patch_capabilities.pl help to be a little bit clearer I certainly didn't read it well enough to notice I needed the third parameter with template pkg files. Reviewed-by: Jason Barron (cherry picked from commit 36304a764fb4ee0cc7cc26033c05c8d70c87b4b5) --- bin/patch_capabilities.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index 2fcf703..bfd34f0 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -51,8 +51,8 @@ sub Usage() { print("specified for deployment in a .pkg file.\n"); print("If no capabilities are given, the binaries will be given the\n"); print("capabilities supported by self-signed certificates.\n"); - print("\nUsage: patch_capabilities.pl pkg_filename [target-platform] [capability list]\n"); - print(" If template .pkg file is given, next agrument must be 'target-platform'.\n"); + print("\n *** NOTE: If *_template.pkg file is given, 'target-platform' is REQUIRED. ***\n"); + print("\nUsage: patch_capabilities.pl pkg_filename [capability list]\n"); print("\nE.g. patch_capabilities.pl myapp_template.pkg release-armv5 \"All -TCB\"\n"); exit(); } -- cgit v0.12 From 24b4c1df2f083829f39101ce5d9676d78b2cdc2a Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 23 Sep 2009 16:39:24 +0200 Subject: remove completely useless .qm install sub-target qms are installed centrally from the top-level install target --- tools/linguist/linguist/linguist.pro | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/linguist/linguist/linguist.pro b/tools/linguist/linguist/linguist.pro index 314163c..00ebec1 100644 --- a/tools/linguist/linguist/linguist.pro +++ b/tools/linguist/linguist/linguist.pro @@ -81,9 +81,6 @@ PROJECTNAME = Qt \ Linguist target.path = $$[QT_INSTALL_BINS] INSTALLS += target -linguisttranslations.files = *.qm -linguisttranslations.path = $$[QT_INSTALL_TRANSLATIONS] -INSTALLS += linguisttranslations phrasebooks.path = $$[QT_INSTALL_DATA]/phrasebooks # ## will this work on windows? -- cgit v0.12 From afa1741dbe0b931938f0de6907610f65af4ab93e Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Fri, 25 Sep 2009 11:28:44 +0200 Subject: Raycasting example: fix painting error when the orientation changes. Reviewed-by: TrustMe --- demos/embedded/raycasting/raycasting.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/embedded/raycasting/raycasting.cpp b/demos/embedded/raycasting/raycasting.cpp index ba91281..c3b21b6 100644 --- a/demos/embedded/raycasting/raycasting.cpp +++ b/demos/embedded/raycasting/raycasting.cpp @@ -285,6 +285,8 @@ protected: QPainter p(this); p.setCompositionMode(QPainter::CompositionMode_Source); + p.drawImage(event->rect(), buffer, event->rect()); + if (touchDevice && event->rect().intersects(trackPad)) { p.fillRect(trackPad, Qt::white); p.setPen(QPen(QColor(224, 224, 224), 6)); @@ -306,10 +308,8 @@ protected: p.drawPolygon(poly); p.translate(0, rad - 20); } - p.resetTransform(); } - p.drawImage(event->rect(), buffer, event->rect()); p.end(); } -- cgit v0.12 From af76d1bed8becfcf05dc9f901714575d26433ae9 Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Fri, 25 Sep 2009 10:39:27 +0200 Subject: Removed unused parameter from graphics scene index internal function Reviewed-by: trustme --- src/gui/graphicsview/qgraphicssceneindex.cpp | 7 ++++--- src/gui/graphicsview/qgraphicssceneindex_p.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gui/graphicsview/qgraphicssceneindex.cpp b/src/gui/graphicsview/qgraphicssceneindex.cpp index 3ea957f..f0404fd 100644 --- a/src/gui/graphicsview/qgraphicssceneindex.cpp +++ b/src/gui/graphicsview/qgraphicssceneindex.cpp @@ -265,12 +265,13 @@ bool QGraphicsSceneIndexPrivate::itemCollidesWithPath(const QGraphicsItem *item, /*! \internal + This function returns the items in ascending order. */ void QGraphicsSceneIndexPrivate::recursive_items_helper(QGraphicsItem *item, QRectF exposeRect, QGraphicsSceneIndexIntersector *intersector, QList *items, const QTransform &viewTransform, - Qt::ItemSelectionMode mode, Qt::SortOrder order, + Qt::ItemSelectionMode mode, qreal parentOpacity) const { Q_ASSERT(item); @@ -326,7 +327,7 @@ void QGraphicsSceneIndexPrivate::recursive_items_helper(QGraphicsItem *item, QRe if (itemIsFullyTransparent && !(child->d_ptr->flags & QGraphicsItem::ItemIgnoresParentOpacity)) continue; recursive_items_helper(child, exposeRect, intersector, items, viewTransform, - mode, order, opacity); + mode, opacity); } } @@ -343,7 +344,7 @@ void QGraphicsSceneIndexPrivate::recursive_items_helper(QGraphicsItem *item, QRe if (itemIsFullyTransparent && !(child->d_ptr->flags & QGraphicsItem::ItemIgnoresParentOpacity)) continue; recursive_items_helper(child, exposeRect, intersector, items, viewTransform, - mode, order, opacity); + mode, opacity); } } } diff --git a/src/gui/graphicsview/qgraphicssceneindex_p.h b/src/gui/graphicsview/qgraphicssceneindex_p.h index 768c724..adebfde 100644 --- a/src/gui/graphicsview/qgraphicssceneindex_p.h +++ b/src/gui/graphicsview/qgraphicssceneindex_p.h @@ -138,7 +138,7 @@ public: void recursive_items_helper(QGraphicsItem *item, QRectF exposeRect, QGraphicsSceneIndexIntersector *intersector, QList *items, const QTransform &viewTransform, - Qt::ItemSelectionMode mode, Qt::SortOrder order, qreal parentOpacity = 1.0) const; + Qt::ItemSelectionMode mode, qreal parentOpacity = 1.0) const; inline void items_helper(const QRectF &rect, QGraphicsSceneIndexIntersector *intersector, QList *items, const QTransform &viewTransform, Qt::ItemSelectionMode mode, Qt::SortOrder order) const; @@ -156,7 +156,7 @@ inline void QGraphicsSceneIndexPrivate::items_helper(const QRectF &rect, QGraphi Q_Q(const QGraphicsSceneIndex); const QList tli = q->estimateTopLevelItems(rect, Qt::AscendingOrder); for (int i = 0; i < tli.size(); ++i) - recursive_items_helper(tli.at(i), rect, intersector, items, viewTransform, mode, order); + recursive_items_helper(tli.at(i), rect, intersector, items, viewTransform, mode); if (order == Qt::DescendingOrder) { const int n = items->size(); for (int i = 0; i < n / 2; ++i) -- cgit v0.12 From 67e729c03db7c2f4e1e3e12a859bb9d2c0db2b5a Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Fri, 25 Sep 2009 11:28:20 +0200 Subject: Reuse animation in animatedTiles example Reviewed-by: trustme --- examples/animation/animatedtiles/main.cpp | 34 ++++--------------------------- 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/examples/animation/animatedtiles/main.cpp b/examples/animation/animatedtiles/main.cpp index ca52f47..74164d3 100644 --- a/examples/animation/animatedtiles/main.cpp +++ b/examples/animation/animatedtiles/main.cpp @@ -228,51 +228,25 @@ int main(int argc, char **argv) QAbstractTransition *trans = rootState->addTransition(ellipseButton, SIGNAL(pressed()), ellipseState); trans->addAnimation(group); - group = new QParallelAnimationGroup; - for (int i = 0; i < items.count(); ++i) { - QPropertyAnimation *anim = new QPropertyAnimation(items[i], "pos"); - anim->setDuration(750 + i * 25); - anim->setEasingCurve(QEasingCurve::InOutBack); - group->addAnimation(anim); - } trans = rootState->addTransition(figure8Button, SIGNAL(pressed()), figure8State); trans->addAnimation(group); - group = new QParallelAnimationGroup; - for (int i = 0; i < items.count(); ++i) { - QPropertyAnimation *anim = new QPropertyAnimation(items[i], "pos"); - anim->setDuration(750 + i * 25); - anim->setEasingCurve(QEasingCurve::InOutBack); - group->addAnimation(anim); - } trans = rootState->addTransition(randomButton, SIGNAL(pressed()), randomState); trans->addAnimation(group); - group = new QParallelAnimationGroup; - for (int i = 0; i < items.count(); ++i) { - QPropertyAnimation *anim = new QPropertyAnimation(items[i], "pos"); - anim->setDuration(750 + i * 25); - anim->setEasingCurve(QEasingCurve::InOutBack); - group->addAnimation(anim); - } trans = rootState->addTransition(tiledButton, SIGNAL(pressed()), tiledState); trans->addAnimation(group); - group = new QParallelAnimationGroup; - for (int i = 0; i < items.count(); ++i) { - QPropertyAnimation *anim = new QPropertyAnimation(items[i], "pos"); - anim->setDuration(750 + i * 25); - anim->setEasingCurve(QEasingCurve::InOutBack); - group->addAnimation(anim); - } trans = rootState->addTransition(centeredButton, SIGNAL(pressed()), centeredState); trans->addAnimation(group); - states.start(); QTimer timer; timer.start(125); timer.setSingleShot(true); - rootState->addTransition(&timer, SIGNAL(timeout()), ellipseState); + trans = rootState->addTransition(&timer, SIGNAL(timeout()), ellipseState); + trans->addAnimation(group); + + states.start(); #ifdef QT_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeCursorAuto); -- cgit v0.12 From 03abf8a298193c3e77896b99bac047b542424bbd Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 25 Sep 2009 11:29:44 +0200 Subject: Stabilize GraphicsView and QFocusEvent test --- tests/auto/qfocusevent/tst_qfocusevent.cpp | 10 ++-- tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 79 +++++++++++++++----------- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/tests/auto/qfocusevent/tst_qfocusevent.cpp b/tests/auto/qfocusevent/tst_qfocusevent.cpp index 6c47530..121bd41 100644 --- a/tests/auto/qfocusevent/tst_qfocusevent.cpp +++ b/tests/auto/qfocusevent/tst_qfocusevent.cpp @@ -399,10 +399,10 @@ void tst_QFocusEvent::checkReason_ActiveWindow() QDialog* d = new QDialog( testFocusWidget ); d->show(); d->activateWindow(); // ### CDE - // wait 1 secs to give some visible feedback - QTest::qWait(1000); + QApplication::setActiveWindow(d); + QTest::qWaitForWindowShown(d); - QVERIFY(childFocusWidgetOne->focusOutEventRecieved); + QTRY_VERIFY(childFocusWidgetOne->focusOutEventRecieved); QVERIFY(childFocusWidgetOne->focusOutEventLostFocus); QVERIFY( !childFocusWidgetOne->focusInEventRecieved ); @@ -411,12 +411,12 @@ void tst_QFocusEvent::checkReason_ActiveWindow() QVERIFY( !childFocusWidgetOne->hasFocus() ); d->hide(); - QTest::qWait(1000); + QTest::qWait(100); #if defined(Q_OS_IRIX) QEXPECT_FAIL("", "IRIX requires explicit activateWindow(), so this test does not make any sense.", Abort); #endif - QVERIFY(childFocusWidgetOne->focusInEventRecieved); + QTRY_VERIFY(childFocusWidgetOne->focusInEventRecieved); QVERIFY(childFocusWidgetOne->focusInEventGotFocus); QVERIFY( childFocusWidgetOne->hasFocus() ); diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 9d23096..1aa515c 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -311,15 +311,13 @@ void tst_QGraphicsView::renderHints() view.show(); QTest::qWaitForWindowShown(&view); view.repaint(); - QTest::qWait(125); - QCOMPARE(item->hints, view.renderHints()); + QTRY_COMPARE(item->hints, view.renderHints()); view.setRenderHints(QPainter::Antialiasing | QPainter::NonCosmeticDefaultPen); QCOMPARE(view.renderHints(), QPainter::Antialiasing | QPainter::NonCosmeticDefaultPen); view.repaint(); - QTest::qWait(125); - QCOMPARE(item->hints, view.renderHints()); + QTRY_COMPARE(item->hints, view.renderHints()); } void tst_QGraphicsView::alignment() @@ -384,7 +382,7 @@ void tst_QGraphicsView::interactive() view.show(); QTest::qWaitForWindowShown(&view); - QTestEventLoop::instance().enterLoop(1); + QApplication::processEvents(); QTRY_COMPARE(item->events.size(), 1); // activate QPoint itemPoint = view.mapFromScene(item->scenePos()); @@ -935,11 +933,13 @@ void tst_QGraphicsView::foregroundBrush() view.setSceneRect(-1000, -1000, 2000, 2000); for (int i = -500; i < 500; i += 10) { view.centerOn(i, 0); - QTest::qWait(10); + QApplication::processEvents(); + QApplication::processEvents(); } for (int i = -500; i < 500; i += 10) { view.centerOn(0, i); - QTest::qWait(10); + QApplication::processEvents(); + QApplication::processEvents(); } } @@ -965,7 +965,8 @@ void tst_QGraphicsView::matrix() gradient2.setColorAt(1, Qt::transparent); gradient2.setSpread(QGradient::RepeatSpread); scene.setBackgroundBrush(gradient2); - QTest::qWait(10); + QApplication::processEvents(); + QApplication::processEvents(); } } @@ -978,7 +979,8 @@ void tst_QGraphicsView::matrix() view.show(); for (int i = 0; i < 160; ++i) { view.rotate(18); - QTest::qWait(5); + QApplication::processEvents(); + QApplication::processEvents(); } /* // These cause a crash @@ -993,11 +995,13 @@ void tst_QGraphicsView::matrix() */ for (int i = 0; i < 20; ++i) { view.scale(1.2, 1.2); - QTest::qWait(20); + QApplication::processEvents(); + QApplication::processEvents(); } for (int i = 0; i < 20; ++i) { view.scale(0.6, 0.6); - QTest::qWait(20); + QApplication::processEvents(); + QApplication::processEvents(); } } } @@ -1093,10 +1097,12 @@ void tst_QGraphicsView::centerOnItem() QGraphicsView view(&scene); view.setSceneRect(-1000, -1000, 2000, 2000); view.show(); + QTest::qWaitForWindowShown(&view); int tolerance = 7; for (int x = 0; x < 3; ++x) { for (int i = 0; i < 4; ++i) { + QApplication::processEvents(); view.centerOn(items[i]); QPoint viewCenter = view.mapToScene(view.viewport()->rect().center()).toPoint(); @@ -1111,7 +1117,7 @@ void tst_QGraphicsView::centerOnItem() QFAIL(qPrintable(error)); } - QTest::qWait(250); + QApplication::processEvents(); } view.rotate(13); @@ -1141,6 +1147,7 @@ void tst_QGraphicsView::ensureVisibleRect() view.setSceneRect(-500, -500, 1000, 1000); view.setFixedSize(250, 250); view.show(); + QTest::qWaitForWindowShown(&view); for (int y = -100; y < 100; y += 25) { for (int x = -100; x < 100; x += 13) { @@ -1177,7 +1184,7 @@ void tst_QGraphicsView::ensureVisibleRect() QVERIFY(qAbs(viewPoint.y() - viewRect.top()) >= margin -1); QVERIFY(qAbs(viewPoint.y() - viewRect.bottom()) >= margin -1); - QTest::qWait(10); + QApplication::processEvents(); } } view.rotate(5); @@ -1381,10 +1388,8 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust() view.setFrameStyle(0); view.resize(300, 300); view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(125); + QTest::qWaitForWindowShown(&view) ; + QTRY_VERIFY(rect->numPaints > 0); rect->numPaints = 0; if (updateRect.isNull()) @@ -1521,8 +1526,8 @@ void tst_QGraphicsView::itemAt2() view.setTransformationAnchor(QGraphicsView::NoAnchor); view.setRenderHint(QPainter::Antialiasing); view.show(); - - QTestEventLoop::instance().enterLoop(1); + QTest::qWaitForWindowShown(&view); + QApplication::processEvents(); QPoint itemViewPoint = view.mapFromScene(item->scenePos()); @@ -2135,17 +2140,17 @@ void tst_QGraphicsView::resizeAnchor() for (int size = 200; size <= 400; size += 25) { view.resize(size, size); if (i == 0) { - QCOMPARE(view.mapToScene(50, 50), f); - QVERIFY(view.mapToScene(view.viewport()->rect().center()) != center); + QTRY_COMPARE(view.mapToScene(50, 50), f); + QTRY_VERIFY(view.mapToScene(view.viewport()->rect().center()) != center); } else { - QVERIFY(view.mapToScene(50, 50) != f); + QTRY_VERIFY(view.mapToScene(50, 50) != f); QPointF newCenter = view.mapToScene(view.viewport()->rect().center()); int slack = 3; QVERIFY(qAbs(newCenter.x() - center.x()) < slack); QVERIFY(qAbs(newCenter.y() - center.y()) < slack); } - QTest::qWait(250); + QTest::qWait(20); } } } @@ -2154,12 +2159,15 @@ class CustomView : public QGraphicsView { Q_OBJECT public: + CustomView(QGraphicsScene *s = 0) : QGraphicsView(s) {} QList lastUpdateRegions; + bool painted; protected: void paintEvent(QPaintEvent *event) { lastUpdateRegions << event->region(); + painted = true; QGraphicsView::paintEvent(event); } }; @@ -2247,6 +2255,7 @@ void tst_QGraphicsView::viewportUpdateMode2() // Create a view with viewport rect equal to QRect(0, 0, 200, 200). QGraphicsScene dummyScene; CustomView view; + view.painted = false; view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); view.setScene(&dummyScene); int left, top, right, bottom; @@ -2255,6 +2264,7 @@ void tst_QGraphicsView::viewportUpdateMode2() view.show(); QTest::qWaitForWindowShown(&view); QTest::qWait(50); + QTRY_VERIFY(view.painted); const QRect viewportRect = view.viewport()->rect(); QCOMPARE(viewportRect, QRect(0, 0, 200, 200)); @@ -2921,10 +2931,10 @@ void tst_QGraphicsView::task239729_noViewUpdate() EventSpy spy(view->viewport(), QEvent::Paint); QCOMPARE(spy.count(), 0); - QTest::qWait(150); + QTest::qWait(100); QCOMPARE(spy.count(), 0); scene.update(); - QTest::qWait(150); + QApplication::processEvents(); QTRY_COMPARE(spy.count(), 1); delete view; @@ -3159,7 +3169,6 @@ void tst_QGraphicsView::moveItemWhileScrolling() int a = adjustForAntialiasing ? 2 : 1; expectedRegion += QRect(40, 50, 10, 10).adjusted(-a, -a, a, a); expectedRegion += QRect(40, 60, 10, 10).adjusted(-a, -a, a, a); - QCOMPARE(view.lastPaintedRegion, expectedRegion); } @@ -3343,11 +3352,13 @@ void tst_QGraphicsView::render() { // ### This test can be much more thorough - see QGraphicsScene::render. QGraphicsScene scene; - QGraphicsView view(&scene); + CustomView view(&scene); view.setFrameStyle(0); view.resize(200, 200); + view.painted = false; view.show(); QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(view.painted > 0); RenderTester *r1 = new RenderTester(QRectF(0, 0, 50, 50)); RenderTester *r2 = new RenderTester(QRectF(50, 50, 50, 50)); @@ -3383,10 +3394,12 @@ void tst_QGraphicsView::exposeRegion() QGraphicsScene scene; scene.addItem(item); + item->paints = 0; CustomView view; view.setScene(&scene); view.show(); QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(item->paints > 0); item->paints = 0; view.lastUpdateRegions.clear(); @@ -3449,7 +3462,7 @@ void tst_QGraphicsView::update() QTest::qWaitForWindowShown(&view); QApplication::setActiveWindow(&view); - QTest::qWait(50); + QApplication::processEvents(); QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); const QRect viewportRect = view.viewport()->rect(); @@ -3465,15 +3478,15 @@ void tst_QGraphicsView::update() viewPrivate->processPendingUpdates(); QVERIFY(viewPrivate->dirtyRegion.isEmpty()); QVERIFY(viewPrivate->dirtyBoundingRect.isEmpty()); - QTest::qWait(150); + QApplication::processEvents(); if (!intersects) { - QVERIFY(view.lastUpdateRegions.isEmpty()); + QTRY_VERIFY(view.lastUpdateRegions.isEmpty()); } else { - QCOMPARE(view.lastUpdateRegions.size(), 1); + QTRY_COMPARE(view.lastUpdateRegions.size(), 1); // Note that we adjust by 2 for antialiasing. - QCOMPARE(view.lastUpdateRegions.at(0), QRegion(updateRect.adjusted(-2, -2, 2, 2) & viewportRect)); + QTRY_COMPARE(view.lastUpdateRegions.at(0), QRegion(updateRect.adjusted(-2, -2, 2, 2) & viewportRect)); } - QVERIFY(!viewPrivate->fullUpdatePending); + QTRY_VERIFY(!viewPrivate->fullUpdatePending); #endif } -- cgit v0.12 From 0516ee1ac75d000573ec0592d6c754dd176250a7 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 25 Sep 2009 11:44:01 +0200 Subject: add test case for wrong error message in qtscript --- tests/auto/qscriptengine/tst_qscriptengine.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp index 4d693af..183aa3f 100644 --- a/tests/auto/qscriptengine/tst_qscriptengine.cpp +++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp @@ -95,6 +95,7 @@ private slots: void evaluate(); void nestedEvaluate(); void uncaughtException(); + void errorMessage_QT679(); void valueConversion(); void importExtension(); void infiniteRecursion(); @@ -1625,6 +1626,16 @@ void tst_QScriptEngine::uncaughtException() } } +void tst_QScriptEngine::errorMessage_QT679() +{ + QScriptEngine engine; + engine.globalObject().setProperty("foo", 15); + QScriptValue error = engine.evaluate("'hello world';\nfoo.bar.blah"); + QVERIFY(error.isError()); + QEXPECT_FAIL("", "Task QT-679: the error message always contains the first line of the script, even if the error was on a different line", Continue); + QCOMPARE(error.toString(), QString::fromLatin1("TypeError: Result of expression 'foo.bar' [undefined] is not an object.")); +} + struct Foo { public: int x, y; -- cgit v0.12 From e482169086f6a85603ca4650e42be543533c3b50 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 13:00:16 +0300 Subject: Fixed qgraphicslinearlayout autotest compilation for Symbian (Nokia X86). Nokia X86 compiler does not resolve QCOMPARE corrctly for derived types, that's why we cast it explicitly. Reviewed-by: Janne Koskinen --- tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index a5d79de..32054db 100644 --- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -708,10 +708,10 @@ void tst_QGraphicsLinearLayout::itemAt_visualOrder() QGraphicsWidget *w2 = new QGraphicsWidget; l->insertItem(2, w2); - QCOMPARE(l->itemAt(0), w0); - QCOMPARE(l->itemAt(1), w1); - QCOMPARE(l->itemAt(2), w2); - QCOMPARE(l->itemAt(3), w3); + QCOMPARE(l->itemAt(0), static_cast(w0)); + QCOMPARE(l->itemAt(1), static_cast(w1)); + QCOMPARE(l->itemAt(2), static_cast(w2)); + QCOMPARE(l->itemAt(3), static_cast(w3)); } void tst_QGraphicsLinearLayout::orientation_data() -- cgit v0.12 From ac68ae4d5f186bebb154d553e8f3a7e31ab78568 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 13:02:41 +0300 Subject: Fix QGraphicsLinearLayout autotest for Symbian OS. QPlastiqueStyle is not compiled for Symbian OS, but default ones seems to make the job fine since all get passed. Reviewed-by: Janne Koskinen --- tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index 32054db..9c58b24 100644 --- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -143,9 +143,11 @@ public: // It is only called once. void tst_QGraphicsLinearLayout::initTestCase() { +#ifndef Q_WS_S60 // since the style will influence the results, we have to ensure // that the tests are run using the same style on all platforms QApplication::setStyle(new QPlastiqueStyle); +#endif } // This will be called after the last test function is executed. -- cgit v0.12 From 783ca8d44fd87f842323ad1f9e2fef4a5d0b37ad Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 25 Sep 2009 12:16:01 +0200 Subject: Make menu editor work on Mac OS X. Fix a regression caused by the introduction of the QMenuBar::nativeMenuBar property (defaulting to true), which caused it the menu editor to disappear. Handle QMenuBar::nativeMenuBar it as a fake property, keeping it set to false for Form Editor. Reviewed-by: Jarek Kobus --- tools/designer/src/lib/shared/qdesigner_menubar.cpp | 2 ++ tools/designer/src/lib/shared/qdesigner_propertysheet.cpp | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/designer/src/lib/shared/qdesigner_menubar.cpp b/tools/designer/src/lib/shared/qdesigner_menubar.cpp index 6d231ca..80c7b53 100644 --- a/tools/designer/src/lib/shared/qdesigner_menubar.cpp +++ b/tools/designer/src/lib/shared/qdesigner_menubar.cpp @@ -104,6 +104,8 @@ QDesignerMenuBar::QDesignerMenuBar(QWidget *parent) : setContextMenuPolicy(Qt::DefaultContextMenu); setAcceptDrops(true); // ### fake + // Fake property: Keep the menu bar editable in the form even if a native menu bar is used. + setNativeMenuBar(false); m_addMenu->setText(tr("Type Here")); addAction(m_addMenu); diff --git a/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp b/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp index 851bfc1..7574fdd 100644 --- a/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp +++ b/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp @@ -63,6 +63,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -611,9 +612,15 @@ QDesignerPropertySheet::QDesignerPropertySheet(QObject *object, QObject *parent) createFakeProperty(QLatin1String("dragEnabled")); // windowModality is visible only for the main container, in which case the form windows enables it on loading setVisible(createFakeProperty(QLatin1String("windowModality")), false); - if (qobject_cast(d->m_object)) // prevent toolbars from being dragged off + if (qobject_cast(d->m_object)) { // prevent toolbars from being dragged off createFakeProperty(QLatin1String("floatable"), QVariant(true)); - + } else { + if (qobject_cast(d->m_object)) { + // Keep the menu bar editable in the form even if a native menu bar is used. + const bool nativeMenuBarDefault = !qApp->testAttribute(Qt::AA_DontUseNativeMenuBar); + createFakeProperty(QLatin1String("nativeMenuBar"), QVariant(nativeMenuBarDefault)); + } + } if (d->m_canHaveLayoutAttributes) { static const QString layoutGroup = QLatin1String("Layout"); const char* fakeLayoutProperties[] = { -- cgit v0.12 From d0d0fdb8e46351b4ab8492de31e5363ef6662b57 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Wed, 23 Sep 2009 13:51:17 +0200 Subject: Fix regressions in qeventloop, qtimer, and qsocketnotifier autotests Commit ed375675d4a4f6fd63edeb242e23c87b3de4be6f triggers a behavior in Glib's mainloop implementation where some event sources are not "serviced" every iteration of the mainloop context. This breaks an invariant that many tests relied on, so we need to solve the problem. The invariant is that a newly added timer that would normally fire on the next pass of the event loop (liker a zero timer) SHOULD actually fire. We do this by registering 2 timer event sources with Glib's mainloop: one normal priority source and one idle priority source. The idle priority source is the one that will send events most of the time, with the normal priority one taking over only when processEvents() is called manually. Task-number: QT-877 Reviewed-by: jbache Reviewed-by: thiago Reviewed-by: denis --- src/corelib/kernel/qeventdispatcher_glib.cpp | 133 +++++++++++++++++++++------ src/corelib/kernel/qeventdispatcher_glib_p.h | 2 + src/corelib/kernel/qeventdispatcher_unix.cpp | 8 +- 3 files changed, 112 insertions(+), 31 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index 6e457f4..665b73e 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -127,16 +127,11 @@ struct GTimerSource GSource source; QTimerInfoList timerList; QEventLoop::ProcessEventsFlags processEventsFlags; + bool runWithIdlePriority; }; -static gboolean timerSourcePrepare(GSource *source, gint *timeout) +static gboolean timerSourcePrepareHelper(GTimerSource *src, gint *timeout) { - gint dummy; - if (!timeout) - timeout = &dummy; - - GTimerSource *src = reinterpret_cast(source); - timeval tv = { 0l, 0l }; if (!(src->processEventsFlags & QEventLoop::X11ExcludeTimers) && src->timerList.timerWait(tv)) *timeout = (tv.tv_sec * 1000) + (tv.tv_usec / 1000); @@ -146,10 +141,8 @@ static gboolean timerSourcePrepare(GSource *source, gint *timeout) return (*timeout == 0); } -static gboolean timerSourceCheck(GSource *source) +static gboolean timerSourceCheckHelper(GTimerSource *src) { - GTimerSource *src = reinterpret_cast(source); - if (src->timerList.isEmpty() || (src->processEventsFlags & QEventLoop::X11ExcludeTimers)) return false; @@ -160,9 +153,35 @@ static gboolean timerSourceCheck(GSource *source) return true; } +static gboolean timerSourcePrepare(GSource *source, gint *timeout) +{ + gint dummy; + if (!timeout) + timeout = &dummy; + + GTimerSource *src = reinterpret_cast(source); + if (src->runWithIdlePriority) { + if (timeout) + *timeout = -1; + return false; + } + + return timerSourcePrepareHelper(src, timeout); +} + +static gboolean timerSourceCheck(GSource *source) +{ + GTimerSource *src = reinterpret_cast(source); + if (src->runWithIdlePriority) + return false; + return timerSourceCheckHelper(src); +} + static gboolean timerSourceDispatch(GSource *source, GSourceFunc, gpointer) { - (void) reinterpret_cast(source)->timerList.activateTimers(); + GTimerSource *timerSource = reinterpret_cast(source); + timerSource->runWithIdlePriority = true; + (void) timerSource->timerList.activateTimers(); return true; // ??? don't remove, right again? } @@ -175,6 +194,53 @@ static GSourceFuncs timerSourceFuncs = { NULL }; +struct GIdleTimerSource +{ + GSource source; + GTimerSource *timerSource; +}; + +static gboolean idleTimerSourcePrepare(GSource *source, gint *timeout) +{ + GIdleTimerSource *idleTimerSource = reinterpret_cast(source); + GTimerSource *timerSource = idleTimerSource->timerSource; + if (!timerSource->runWithIdlePriority) { + // Yield to the normal priority timer source + if (timeout) + *timeout = -1; + return false; + } + + return timerSourcePrepareHelper(timerSource, timeout); +} + +static gboolean idleTimerSourceCheck(GSource *source) +{ + GIdleTimerSource *idleTimerSource = reinterpret_cast(source); + GTimerSource *timerSource = idleTimerSource->timerSource; + if (!timerSource->runWithIdlePriority) { + // Yield to the normal priority timer source + return false; + } + return timerSourceCheckHelper(timerSource); +} + +static gboolean idleTimerSourceDispatch(GSource *source, GSourceFunc, gpointer) +{ + GTimerSource *timerSource = reinterpret_cast(source)->timerSource; + (void) timerSourceDispatch(&timerSource->source, 0, 0); + return true; +} + +static GSourceFuncs idleTimerSourceFuncs = { + idleTimerSourcePrepare, + idleTimerSourceCheck, + idleTimerSourceDispatch, + NULL, + NULL, + NULL +}; + struct GPostEventSource { GSource source; @@ -235,14 +301,15 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context) g_main_context_ref(mainContext); } else { QCoreApplication *app = QCoreApplication::instance(); - if (app && QThread::currentThread() == app->thread()) { - mainContext = g_main_context_default(); - g_main_context_ref(mainContext); - } else { - mainContext = g_main_context_new(); - } + if (app && QThread::currentThread() == app->thread()) { + mainContext = g_main_context_default(); + g_main_context_ref(mainContext); + } else { + mainContext = g_main_context_new(); + } } + // setup post event source postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, sizeof(GPostEventSource))); postEventSource->serialNumber = 1; @@ -257,14 +324,21 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context) g_source_set_can_recurse(&socketNotifierSource->source, true); g_source_attach(&socketNotifierSource->source, mainContext); - // setup timerSource + // setup normal and idle timer sources timerSource = reinterpret_cast(g_source_new(&timerSourceFuncs, sizeof(GTimerSource))); (void) new (&timerSource->timerList) QTimerInfoList(); timerSource->processEventsFlags = QEventLoop::AllEvents; + timerSource->runWithIdlePriority = false; g_source_set_can_recurse(&timerSource->source, true); - g_source_set_priority(&timerSource->source, G_PRIORITY_DEFAULT_IDLE); g_source_attach(&timerSource->source, mainContext); + + idleTimerSource = reinterpret_cast(g_source_new(&idleTimerSourceFuncs, + sizeof(GIdleTimerSource))); + idleTimerSource->timerSource = timerSource; + g_source_set_can_recurse(&idleTimerSource->source, true); + g_source_set_priority(&idleTimerSource->source, G_PRIORITY_DEFAULT_IDLE); + g_source_attach(&idleTimerSource->source, mainContext); } QEventDispatcherGlib::QEventDispatcherGlib(QObject *parent) @@ -272,12 +346,9 @@ QEventDispatcherGlib::QEventDispatcherGlib(QObject *parent) { } -QEventDispatcherGlib::QEventDispatcherGlib(GMainContext *mainContext, - QObject *parent) - : QAbstractEventDispatcher(*(new QEventDispatcherGlibPrivate(mainContext)), - parent) -{ -} +QEventDispatcherGlib::QEventDispatcherGlib(GMainContext *mainContext, QObject *parent) + : QAbstractEventDispatcher(*(new QEventDispatcherGlibPrivate(mainContext)), parent) +{ } QEventDispatcherGlib::~QEventDispatcherGlib() { @@ -289,6 +360,9 @@ QEventDispatcherGlib::~QEventDispatcherGlib() g_source_destroy(&d->timerSource->source); g_source_unref(&d->timerSource->source); d->timerSource = 0; + g_source_destroy(&d->idleTimerSource->source); + g_source_unref(&d->idleTimerSource->source); + d->idleTimerSource = 0; // destroy socket notifier source for (int i = 0; i < d->socketNotifierSource->pollfds.count(); ++i) { @@ -324,11 +398,16 @@ bool QEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) // tell postEventSourcePrepare() and timerSource about any new flags QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; d->timerSource->processEventsFlags = flags; - + + if (!(flags & QEventLoop::EventLoopExec)) { + // force timers to be sent at normal priority + d->timerSource->runWithIdlePriority = false; + } + bool result = g_main_context_iteration(d->mainContext, canWait); while (!result && canWait) result = g_main_context_iteration(d->mainContext, canWait); - + d->timerSource->processEventsFlags = savedFlags; if (canWait) diff --git a/src/corelib/kernel/qeventdispatcher_glib_p.h b/src/corelib/kernel/qeventdispatcher_glib_p.h index 8dbc44d..6a4e726 100644 --- a/src/corelib/kernel/qeventdispatcher_glib_p.h +++ b/src/corelib/kernel/qeventdispatcher_glib_p.h @@ -98,6 +98,7 @@ protected: struct GPostEventSource; struct GSocketNotifierSource; struct GTimerSource; +struct GIdleTimerSource; class Q_CORE_EXPORT QEventDispatcherGlibPrivate : public QAbstractEventDispatcherPrivate { @@ -108,6 +109,7 @@ public: GPostEventSource *postEventSource; GSocketNotifierSource *socketNotifierSource; GTimerSource *timerSource; + GIdleTimerSource *idleTimerSource; }; QT_END_NAMESPACE diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index a912971..5a0afb8 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -446,10 +446,10 @@ bool QTimerInfoList::timerWait(timeval &tm) // Find first waiting timer not already active QTimerInfo *t = 0; for (QTimerInfoList::const_iterator it = constBegin(); it != constEnd(); ++it) { - if (!(*it)->inTimerEvent) { - t = *it; - break; - } + if (!(*it)->inTimerEvent) { + t = *it; + break; + } } if (!t) -- cgit v0.12 From bb62bf61c0577a02003a33bf800025cb85e51b54 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 25 Sep 2009 12:32:17 +0200 Subject: improve "nested evaluation" test Test that the variable is stored in the correct activation object. Currently it's marked as an expected failure because it doesn't work with the JSC-based back-end. It did however work with the old back-end, so this is a regression. --- tests/auto/qscriptcontext/tst_qscriptcontext.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/auto/qscriptcontext/tst_qscriptcontext.cpp b/tests/auto/qscriptcontext/tst_qscriptcontext.cpp index dc7184c..063075d 100644 --- a/tests/auto/qscriptcontext/tst_qscriptcontext.cpp +++ b/tests/auto/qscriptcontext/tst_qscriptcontext.cpp @@ -944,6 +944,16 @@ void tst_QScriptContext::inheritActivationAndThisObject() QVERIFY(ret.isNumber()); QCOMPARE(ret.toInt32(), 123); } + + // QT-2219 + { + eng.globalObject().setProperty("a", 123); + QScriptValue ret = eng.evaluate("(function() { myEval('var a = 456'); return a; })()"); + QVERIFY(ret.isNumber()); + QCOMPARE(ret.toInt32(), 456); + QEXPECT_FAIL("", "QT-2219: Wrong activation object is returned from native function's parent context", Continue); + QVERIFY(eng.globalObject().property("a").strictlyEquals(123)); + } } static QScriptValue parentContextToString(QScriptContext *ctx, QScriptEngine *) -- cgit v0.12 From 165767d7ca890e9da9c660034fd76393fe7e87e1 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 25 Sep 2009 13:48:08 +0300 Subject: Changed S60 version check to do runtime check also in emulator. S60 version check for emulator was hardcoded, which caused problems for users of our binary packages, which deploy same binaries to all environments. Changed the check to look for platform .sis files also in emulator and use the hardcoded version only as a fallback option for those SDKs that do not provide these files. Task-number: QTBUG-4579 Reviewed-by: axis --- src/corelib/global/qglobal.cpp | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 4974acf..97362af 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1769,25 +1769,6 @@ static QSysInfo::S60Version cachedS60Version = QSysInfo::S60Version(-1); QSysInfo::S60Version QSysInfo::s60Version() { -# ifdef Q_CC_NOKIAX86 - // For emulator builds. Emulators don't support the trick we use to figure - // out which SDK we are running under, so simply hardcode it there. -# if defined(__SERIES60_31__) - return SV_S60_3_1; - -# elif defined(__S60_32__) - return SV_S60_3_2; - -# elif defined(__S60_50__) - return SV_S60_5_0; - -# else - return SV_S60_Unknown; - -# endif - -# else - // For hardware builds. if (cachedS60Version != -1) return cachedS60Version; @@ -1818,6 +1799,19 @@ QSysInfo::S60Version QSysInfo::s60Version() delete contents; } +# ifdef Q_CC_NOKIAX86 + // Some emulator environments may not contain the version specific .sis files, so + // simply hardcode the version on those environments. +# if defined(__SERIES60_31__) + return cachedS60Version = SV_S60_3_1; +# elif defined(__S60_32__) + return cachedS60Version = SV_S60_3_2; +# elif defined(__S60_50__) + return cachedS60Version = SV_S60_5_0; +# else + return cachedS60Version = SV_S60_Unknown; +# endif +# else return cachedS60Version = SV_S60_Unknown; # endif } @@ -2718,7 +2712,7 @@ int qrand() \since 4.6 \brief The QT_TRID_NOOP macro marks an id for dynamic translation. - + The only purpose of this macro is to provide an anchor for attaching meta data like to qtTrId(). -- cgit v0.12 From ce98cf421d30d09392498518731bdcc50e191583 Mon Sep 17 00:00:00 2001 From: Jesus Sanchez-Palencia Date: Fri, 18 Sep 2009 10:12:43 -0300 Subject: QGraphicsAnchorLayout: enabled hasConflicts() test on autotest Signed-off-by: Jesus Sanchez-Palencia Reviewed-by: Eduardo M. Fleury --- tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp index 8228ab9..a6746db 100644 --- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp +++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp @@ -58,10 +58,9 @@ public: setSpacing( 0 ); } - // ###: Remove me when isValid() is supported bool isValid() { - return true; + return !hasConflicts(); } void setAnchor( @@ -463,9 +462,6 @@ void tst_QGraphicsAnchorLayout1::testAddAndRemoveAnchor() void tst_QGraphicsAnchorLayout1::testIsValid() { - // ###: REMOVE ME - return; - // Empty, valid { QGraphicsWidget *widget = new QGraphicsWidget; -- cgit v0.12 From 44522ab013d4c1157a3b1ed4df28060ad49b5b24 Mon Sep 17 00:00:00 2001 From: Jesus Sanchez-Palencia Date: Thu, 17 Sep 2009 17:42:26 -0300 Subject: QGraphicsAnchorLayoutPrivate: Avoiding graph simplification on empty layouts Signed-off-by: Jesus Sanchez-Palencia Reviewed-by: Eduardo M. Fleury --- src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp index 7041d58..49aabf5 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp @@ -542,7 +542,7 @@ static bool simplifySequentialChunk(Graph *graph, void QGraphicsAnchorLayoutPrivate::simplifyGraph(Orientation orientation) { static bool noSimplification = !qgetenv("QT_ANCHORLAYOUT_NO_SIMPLIFICATION").isEmpty(); - if (noSimplification) + if (noSimplification || items.isEmpty()) return; if (graphSimplified[orientation]) -- cgit v0.12 From 71c811ac3c1954c78e09dd16b661ea4c54afb140 Mon Sep 17 00:00:00 2001 From: Jesus Sanchez-Palencia Date: Thu, 17 Sep 2009 19:14:16 -0300 Subject: QGraphicsAnchorLayout: Removing memory leaks on anchor tests Signed-off-by: Jesus Sanchez-Palencia Reviewed-by: Eduardo M. Fleury --- .../auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp index 2c4a253..08baf26 100644 --- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp +++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp @@ -193,6 +193,8 @@ void tst_QGraphicsAnchorLayout::simple_center() QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize); QCOMPARE(layoutMaximumSize, QSizeF(200, 20)); + + delete p; } void tst_QGraphicsAnchorLayout::simple_semifloat() @@ -240,6 +242,8 @@ void tst_QGraphicsAnchorLayout::simple_semifloat() QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize); QCOMPARE(layoutMaximumSize, QSizeF(200, 20)); + + delete p; } void tst_QGraphicsAnchorLayout::layoutDirection() @@ -286,6 +290,9 @@ void tst_QGraphicsAnchorLayout::layoutDirection() view->show(); QCOMPARE(checkReverseDirection(p), true); + + delete p; + delete view; } void tst_QGraphicsAnchorLayout::diagonal() @@ -985,6 +992,8 @@ void tst_QGraphicsAnchorLayout::setSpacing() QCOMPARE(b->geometry(), QRectF(24, 0, 20, 20)); QCOMPARE(c->geometry(), QRectF(0, 20, 44, 20)); + delete p; + delete view; } /*! @@ -1067,6 +1076,7 @@ void tst_QGraphicsAnchorLayout::hardComplexS60() QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize); QCOMPARE(layoutMaximumSize, QSizeF(240, 40)); + delete p; } void tst_QGraphicsAnchorLayout::stability() @@ -1281,6 +1291,8 @@ void tst_QGraphicsAnchorLayout::conflicts() //QEXPECT_FAIL("", "The constraints are just within their bounds in order to be feasible", Continue); //a->setMinimumSize(QSizeF(30,10)); //QCOMPARE(l->hasConflicts(), false); + + delete p; } QTEST_MAIN(tst_QGraphicsAnchorLayout) -- cgit v0.12 From 91196d46565e1650847d8befa1b971989e5bc894 Mon Sep 17 00:00:00 2001 From: Jesus Sanchez-Palencia Date: Thu, 17 Sep 2009 19:15:12 -0300 Subject: QGraphicsAnchorLayout: Adding hasConflicts() verifications on anchor tests Signed-off-by: Jesus Sanchez-Palencia Reviewed-by: Eduardo M. Fleury --- .../tst_qgraphicsanchorlayout.cpp | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp index 08baf26..c24cce9 100644 --- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp +++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp @@ -154,6 +154,8 @@ void tst_QGraphicsAnchorLayout::simple() QGraphicsWidget p; p.setLayout(l); + QVERIFY(l->hasConflicts() == false); + QCOMPARE(l->count(), 2); } @@ -183,6 +185,8 @@ void tst_QGraphicsAnchorLayout::simple_center() setAnchor(l, b, Qt::AnchorBottom, c, Qt::AnchorTop, 0); setAnchor(l, c, Qt::AnchorBottom, l, Qt::AnchorBottom, 0); + QVERIFY(l->hasConflicts() == false); + QCOMPARE(l->count(), 3); QGraphicsWidget *p = new QGraphicsWidget(0, Qt::Window); @@ -230,6 +234,8 @@ void tst_QGraphicsAnchorLayout::simple_semifloat() setAnchor(l, a, Qt::AnchorBottom, l, Qt::AnchorBottom, 0); setAnchor(l, b, Qt::AnchorBottom, l, Qt::AnchorBottom, 0); + QVERIFY(l->hasConflicts() == false); + QCOMPARE(l->count(), 4); QGraphicsWidget *p = new QGraphicsWidget(0, Qt::Window); @@ -290,6 +296,7 @@ void tst_QGraphicsAnchorLayout::layoutDirection() view->show(); QCOMPARE(checkReverseDirection(p), true); + QVERIFY(l->hasConflicts() == false); delete p; delete view; @@ -333,6 +340,8 @@ void tst_QGraphicsAnchorLayout::diagonal() l->addAnchor(e, Qt::AnchorRight, l, Qt::AnchorRight); l->addAnchor(d, Qt::AnchorRight, e, Qt::AnchorLeft); + QVERIFY(l->hasConflicts() == false); + QCOMPARE(l->count(), 5); QGraphicsWidget p; @@ -380,6 +389,9 @@ void tst_QGraphicsAnchorLayout::diagonal() QCOMPARE(p.size(), testA); QCOMPARE(checkReverseDirection(&p), true); + + c->setMinimumWidth(300); + QVERIFY(l->hasConflicts()); } void tst_QGraphicsAnchorLayout::parallel() @@ -472,6 +484,8 @@ void tst_QGraphicsAnchorLayout::parallel() QCOMPARE(e->geometry(), QRectF(375, 400, 175, 100)); QCOMPARE(f->geometry(), QRectF(550, 500, 200, 100)); QCOMPARE(p.size(), layoutMaximumSize); + + QVERIFY(l->hasConflicts() == false); } void tst_QGraphicsAnchorLayout::parallel2() @@ -496,6 +510,7 @@ void tst_QGraphicsAnchorLayout::parallel2() l->addAnchor(l, Qt::AnchorLeft, b, Qt::AnchorLeft); l->addAnchor(b, Qt::AnchorRight, a, Qt::AnchorRight); + QVERIFY(l->hasConflicts() == false); QCOMPARE(l->count(), 2); QGraphicsWidget p; @@ -577,6 +592,8 @@ void tst_QGraphicsAnchorLayout::snake() QCOMPARE(b->geometry(), QRectF(90.0, 100.0, 10.0, 100.0)); QCOMPARE(c->geometry(), QRectF(90.0, 200.0, 100.0, 100.0)); QCOMPARE(p.size(), layoutMaximumSize); + + QVERIFY(l->hasConflicts() == false); } void tst_QGraphicsAnchorLayout::snakeOppositeDirections() @@ -610,6 +627,7 @@ void tst_QGraphicsAnchorLayout::snakeOppositeDirections() l->addAnchor(c, Qt::AnchorRight, l, Qt::AnchorRight); + QVERIFY(l->hasConflicts() == false); QCOMPARE(l->count(), 3); QGraphicsWidget p; @@ -713,6 +731,8 @@ void tst_QGraphicsAnchorLayout::fairDistribution() QCOMPARE(c->geometry(), QRectF(200.0, 200.0, 100.0, 100.0)); QCOMPARE(d->geometry(), QRectF(0.0, 300.0, 300.0, 100.0)); QCOMPARE(p.size(), layoutMaximumSize); + + QVERIFY(l->hasConflicts() == false); } void tst_QGraphicsAnchorLayout::fairDistributionOppositeDirections() @@ -789,6 +809,8 @@ void tst_QGraphicsAnchorLayout::fairDistributionOppositeDirections() QCOMPARE(a->size(), d->size()); QCOMPARE(e->size().width(), 4 * a->size().width()); QCOMPARE(p.size(), layoutMaximumSize); + + QVERIFY(l->hasConflicts() == false); } void tst_QGraphicsAnchorLayout::proportionalPreferred() @@ -851,6 +873,8 @@ void tst_QGraphicsAnchorLayout::proportionalPreferred() QCOMPARE(a->size().width(), 10 * factor); QCOMPARE(c->size().width(), 14 * factor); QCOMPARE(p.size(), QSizeF(12, 400)); + + QVERIFY(l->hasConflicts() == false); } void tst_QGraphicsAnchorLayout::example() @@ -904,6 +928,7 @@ void tst_QGraphicsAnchorLayout::example() l->addAnchor(l, Qt::AnchorLeft, g, Qt::AnchorLeft); l->addAnchor(f, Qt::AnchorRight, g, Qt::AnchorRight); + QVERIFY(l->hasConflicts() == false); QCOMPARE(l->count(), 7); QGraphicsWidget p; @@ -992,6 +1017,8 @@ void tst_QGraphicsAnchorLayout::setSpacing() QCOMPARE(b->geometry(), QRectF(24, 0, 20, 20)); QCOMPARE(c->geometry(), QRectF(0, 20, 44, 20)); + QVERIFY(l->hasConflicts() == false); + delete p; delete view; } @@ -1076,6 +1103,7 @@ void tst_QGraphicsAnchorLayout::hardComplexS60() QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize); QCOMPARE(layoutMaximumSize, QSizeF(240, 40)); + QVERIFY(l->hasConflicts() == false); delete p; } @@ -1138,6 +1166,7 @@ void tst_QGraphicsAnchorLayout::delete_anchor() QGraphicsWidget *p = new QGraphicsWidget; p->setLayout(l); + QVERIFY(l->hasConflicts() == false); QCOMPARE(l->count(), 3); scene.addItem(p); -- cgit v0.12 From 7ab951514db4487958321b8d81f5490748f38a3b Mon Sep 17 00:00:00 2001 From: "Eduardo M. Fleury" Date: Fri, 18 Sep 2009 15:48:03 -0300 Subject: QSimplex: Add class and methods documentation This private class is used by QGraphicsAnchorLayout as the linear programming solver engine. This method adds documentation to implementation, method and classes. Signed-off-by: Eduardo M. Fleury Reviewed-by: Jesus Sanchez-Palencia --- src/gui/graphicsview/qsimplex_p.cpp | 113 ++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 5 deletions(-) diff --git a/src/gui/graphicsview/qsimplex_p.cpp b/src/gui/graphicsview/qsimplex_p.cpp index e3a991e..7de7da0 100644 --- a/src/gui/graphicsview/qsimplex_p.cpp +++ b/src/gui/graphicsview/qsimplex_p.cpp @@ -48,6 +48,32 @@ QT_BEGIN_NAMESPACE +/*! + \class QSimplex + + The QSimplex class is a Linear Programming problem solver based on the two-phase + simplex method. + + It takes a set of QSimplexConstraints as its restrictive constraints and an + additional QSimplexConstraint as its objective function. Then methods to maximize + and minimize the problem solution are provided. + + The two-phase simplex method is based on the following steps: + First phase: + 1.a) Modify the original, complex, and possibly not feasible problem, into a new, + easy to solve problem. + 1.b) Set as the objective of the new problem, a feasible solution for the original + complex problem. + 1.c) Run simplex to optimize the modified problem and check whether a solution for + the original problem exists. + + Second phase: + 2.a) Go back to the original problem with the feasibl (but not optimal) solution + found in the first phase. + 2.b) Set the original objective. + 3.c) Run simplex to optimize the original problem towards its optimal solution. +*/ + QSimplex::QSimplex() : objective(0), rows(0), columns(0), firstArtificial(0), matrix(0) { } @@ -84,15 +110,31 @@ void QSimplex::clearDataStructures() objective = 0; } +/*! + Sets the new constraints in the simplex solver and returns whether the problem + is feasible. + + This method sets the new constraints, normalizes them, creates the simplex matrix + and runs the first simplex phase. +*/ bool QSimplex::setConstraints(const QList newConstraints) { + //////////////////////////// + // Reset to initial state // + //////////////////////////// clearDataStructures(); if (newConstraints.isEmpty()) return true; // we are ok with no constraints constraints = newConstraints; - // Set Variables direct mapping + /////////////////////////////////////// + // Prepare variables and constraints // + /////////////////////////////////////// + + // Set Variables direct mapping. + // "variables" is a list that provides a stable, indexed list of all variables + // used in this problem. QSet variablesSet; for (int i = 0; i < constraints.size(); ++i) variablesSet += \ @@ -100,12 +142,25 @@ bool QSimplex::setConstraints(const QList newConstraints) variables = variablesSet.toList(); // Set Variables reverse mapping + // We also need to be able to find the index for a given variable, to do that + // we store in each variable its index. for (int i = 0; i < variables.size(); ++i) { // The variable "0" goes at the column "1", etc... variables[i]->index = i + 1; } // Normalize Constraints + // In this step, we prepare the constraints in two ways: + // Firstly, we modify all constraints of type "LessOrEqual" or "MoreOrEqual" + // by the adding slack or surplus variables and making them "Equal" constraints. + // Secondly, we need every single constraint to have a direct, easy feasible + // solution. Constraints that have slack variables are already easy to solve, + // to all the others we add artificial variables. + // + // At the end we modify the constraints as follows: + // - LessOrEqual: SLACK variable is added. + // - Equal: ARTIFICIAL variable is added. + // - More or Equal: ARTIFICIAL and SURPLUS variables are added. int variableIndex = variables.size(); QList artificialList; @@ -138,12 +193,18 @@ bool QSimplex::setConstraints(const QList newConstraints) } } + // All original, slack and surplus have already had its index set + // at this point. We now set the index of the artificial variables + // as to ensure they are at the end of the variable list and therefore + // can be easily removed at the end of this method. firstArtificial = variableIndex + 1; for (int i = 0; i < artificialList.size(); ++i) artificialList[i]->index = ++variableIndex; artificialList.clear(); - // Matrix + ///////////////////////////// + // Fill the Simplex matrix // + ///////////////////////////// // One for each variable plus the Basic and BFS columns (first and last) columns = variableIndex + 2; @@ -188,24 +249,42 @@ bool QSimplex::setConstraints(const QList newConstraints) setValueAt(i, columns - 1, c->constant); } - // Set temporary objective: -1 * sum_of_artificial_vars + // Set objective for the first-phase Simplex. + // Z = -1 * sum_of_artificial_vars for (int j = firstArtificial; j < columns - 1; ++j) setValueAt(0, j, 1.0); // Maximize our objective (artificial vars go to zero) solveMaxHelper(); + // If there is a solution where the sum of all artificial + // variables is zero, then all of them can be removed and yet + // we will have a feasible (but not optimal) solution for the + // original problem. + // Otherwise, we clean up our structures and report there is + // no feasible solution. if (valueAt(0, columns - 1) != 0.0) { qWarning() << "QSimplex: No feasible solution!"; clearDataStructures(); return false; } - // Remove artificial variables + // Remove artificial variables. We already have a feasible + // solution for the first problem, thus we don't need them + // anymore. clearColumns(firstArtificial, columns - 2); return true; } +/*! + \internal + + Run simplex on the current matrix with the current objective. + + This is the iterative method. The matrix lines are combined + as to modify the variable values towards the best solution possible. + The method returns when the matrix is in the optimal state. +*/ void QSimplex::solveMaxHelper() { reducedRowEchelon(); @@ -320,6 +399,12 @@ void QSimplex::reducedRowEchelon() } } +/*! + \internal + + Does one iteration towards a better solution for the problem. + See 'solveMaxHelper'. +*/ bool QSimplex::iterate() { // Find Pivot column @@ -361,7 +446,13 @@ bool QSimplex::iterate() Both solveMin and solveMax are interfaces to this method. The enum solverFactor admits 2 values: Minimum (-1) and Maximum (+1). - */ + + This method sets the original objective and runs the second phase + Simplex to obtain the optimal solution for the problem. As the internal + simplex solver is only able to _maximize_ objectives, we handle the + minimization case by inverting the original objective and then + maximizing it. +*/ qreal QSimplex::solver(solverFactor factor) { // Remove old objective @@ -381,16 +472,28 @@ qreal QSimplex::solver(solverFactor factor) return factor * valueAt(0, columns - 1); } +/*! + Minimize the original objective. +*/ qreal QSimplex::solveMin() { return solver(Minimum); } +/*! + Maximize the original objective. +*/ qreal QSimplex::solveMax() { return solver(Maximum); } +/*! + \internal + + Reads results from the simplified matrix and saves them in the + "result" member of each QSimplexVariable. +*/ void QSimplex::collectResults() { // All variables are zero unless overridden below. -- cgit v0.12 From 38d7c46843e8a1c267d019c9e8d9f60286a49106 Mon Sep 17 00:00:00 2001 From: "Eduardo M. Fleury" Date: Fri, 18 Sep 2009 11:16:14 -0300 Subject: QGraphicsAnchorLayout: Fix bug where simplex would return wrong results Jan-Arve found a bug where QSimplex would return bad results in some tight situations. The problem was triggered randomly but the chances of appearance were higher in problems with only one feasible solution, ie. problems what were in the boundary of feasibility. The QSimplex solver implements a two-phase simplex solver, the first phase is responsible for finding a _feasible_ solution for the problem (not the best one). The second phase starts with the basic feasible solution (just found) and changes until one that is _optimal_ is found. To implement that solution we need to add artificial variables to the original problem, before phase 1, and remove them, before starting phase 2. Unfortunately though, there was some randomness in the criteria used by the solver that would sometimes cause the removal of a good variable instead of an artificial one, between the phases. With one good variable missing, the solver would also miss an important restriction, without such, it would push the objective function too far, thus returning a "wrong" result. This commit adds a tie-breaker condition to the pivot row logic to ensure the artificial variables are removed before the "good" ones. Signed-off-by: Eduardo M. Fleury Reviewed-by: Artur Duque de Souza --- src/gui/graphicsview/qsimplex_p.cpp | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/gui/graphicsview/qsimplex_p.cpp b/src/gui/graphicsview/qsimplex_p.cpp index 7de7da0..94eb5c0 100644 --- a/src/gui/graphicsview/qsimplex_p.cpp +++ b/src/gui/graphicsview/qsimplex_p.cpp @@ -273,6 +273,25 @@ bool QSimplex::setConstraints(const QList newConstraints) // solution for the first problem, thus we don't need them // anymore. clearColumns(firstArtificial, columns - 2); + + #ifdef QT_DEBUG + // Ensure that at the end of the simplex each row should either: + // - Have a positive value on the column associated to its variable, or + // - Have zero values in all columns. + // + // This avoids a regression where restrictions would be lost + // due to randomness in the pivotRowForColumn method. + for (int i = 1; i < rows; ++i) { + int variableIndex = valueAt(i, 0); + if (valueAt(i, variableIndex) > 0) + continue; + + for (int j = 1; j < columns; ++j) { + Q_ASSERT(valueAt(i, j) == 0); + } + } + #endif + return true; } @@ -371,6 +390,23 @@ int QSimplex::findPivotColumn() return minIndex; } +/*! + \internal + + For a given pivot column, find the pivot row. That is, the row with the + minimum associated "quotient" where: + + - quotient is the division of the value in the last column by the value + in the pivot column. + - rows with value less or equal to zero are ignored + - if two rows have the same quotient, lines are chosen based on the + highest variable index (value in the first column) + + The last condition avoids a bug where artificial variables would be + left behind for the second-phase simplex, and with 'good' + constraints would be removed before it, what would lead to incorrect + results. +*/ int QSimplex::pivotRowForColumn(int column) { qreal min = qreal(999999999999.0); // ### @@ -385,6 +421,8 @@ int QSimplex::pivotRowForColumn(int column) if (quotient < min) { min = quotient; minIndex = i; + } else if ((quotient == min) && (valueAt(i, 0) > valueAt(minIndex, 0))) { + minIndex = i; } } -- cgit v0.12 From 029519af1ac37cfbe839390f151567284a3deab2 Mon Sep 17 00:00:00 2001 From: "Eduardo M. Fleury" Date: Fri, 18 Sep 2009 12:39:47 -0300 Subject: QGraphicsAnchorLayout: Enable boundary feasibility test This test would trigger random Q_ASSERT failures but should work fine after the previous commit. Signed-off-by: Eduardo M. Fleury Reviewed-by: Jesus Sanchez-Palencia --- tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp index c24cce9..2fee98d 100644 --- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp +++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp @@ -1316,10 +1316,8 @@ void tst_QGraphicsAnchorLayout::conflicts() a->setMinimumSize(QSizeF(29,10)); QCOMPARE(l->hasConflicts(), false); - // It will currently fail if we uncomment this: - //QEXPECT_FAIL("", "The constraints are just within their bounds in order to be feasible", Continue); - //a->setMinimumSize(QSizeF(30,10)); - //QCOMPARE(l->hasConflicts(), false); + a->setMinimumSize(QSizeF(30,10)); + QCOMPARE(l->hasConflicts(), false); delete p; } -- cgit v0.12 From 351747745aa0cca64a314c033376e75171041de4 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 24 Sep 2009 19:13:22 +0200 Subject: Stop fluidlauncher timers when in background to save battery Changed fluidlauncher to use a stacked widget instead of two top level windows. Used the ActivationChange event to get notification from the OS window system when fluidlauncher is active. Slideshow related timers are stopped when the window is deactivated and restarted when activated. Task-number: QT-886 Reviewed-by: Alessandro Portale --- demos/embedded/fluidlauncher/fluidlauncher.cpp | 27 +++++++++++++++++++++++--- demos/embedded/fluidlauncher/fluidlauncher.h | 5 ++++- demos/embedded/fluidlauncher/slideshow.cpp | 5 ++--- demos/embedded/fluidlauncher/slideshow.h | 2 +- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/demos/embedded/fluidlauncher/fluidlauncher.cpp b/demos/embedded/fluidlauncher/fluidlauncher.cpp index 808f362..3cd3f3c 100644 --- a/demos/embedded/fluidlauncher/fluidlauncher.cpp +++ b/demos/embedded/fluidlauncher/fluidlauncher.cpp @@ -54,6 +54,10 @@ FluidLauncher::FluidLauncher(QStringList* args) slideShowWidget = new SlideShow(); inputTimer = new QTimer(); + addWidget(pictureFlowWidget); + addWidget(slideShowWidget); + setCurrentWidget(pictureFlowWidget); + QRect screen_size = QApplication::desktop()->screenGeometry(); QObject::connect(pictureFlowWidget, SIGNAL(itemActivated(int)), this, SLOT(launchApplication(int))); @@ -80,7 +84,7 @@ FluidLauncher::FluidLauncher(QStringList* args) if (success) { populatePictureFlow(); - pictureFlowWidget->showFullScreen(); + showFullScreen(); inputTimer->start(); } else { pictureFlowWidget->setAttribute(Qt::WA_DeleteOnClose, true); @@ -222,7 +226,6 @@ void FluidLauncher::launchApplication(int index) } inputTimer->stop(); - pictureFlowWidget->hide(); QObject::connect(demoList[index], SIGNAL(demoFinished()), this, SLOT(demoFinished())); @@ -234,6 +237,7 @@ void FluidLauncher::switchToLauncher() { slideShowWidget->stopShow(); inputTimer->start(); + setCurrentWidget(pictureFlowWidget); } @@ -253,11 +257,28 @@ void FluidLauncher::switchToSlideshow() { inputTimer->stop(); slideShowWidget->startShow(); + setCurrentWidget(slideShowWidget); } void FluidLauncher::demoFinished() { - pictureFlowWidget->showFullScreen(); + setCurrentWidget(pictureFlowWidget); inputTimer->start(); } +void FluidLauncher::changeEvent(QEvent* event) +{ + if (event->type() == QEvent::ActivationChange) { + if (isActiveWindow()) { + if(currentWidget() == pictureFlowWidget) { + resetInputTimeout(); + } else { + slideShowWidget->startShow(); + } + } else { + inputTimer->stop(); + slideShowWidget->stopShow(); + } + } + QStackedWidget::changeEvent(event); +} diff --git a/demos/embedded/fluidlauncher/fluidlauncher.h b/demos/embedded/fluidlauncher/fluidlauncher.h index 2c40526..ff742e2 100644 --- a/demos/embedded/fluidlauncher/fluidlauncher.h +++ b/demos/embedded/fluidlauncher/fluidlauncher.h @@ -50,7 +50,7 @@ #include "slideshow.h" #include "demoapplication.h" -class FluidLauncher : public QObject +class FluidLauncher : public QStackedWidget { Q_OBJECT @@ -65,6 +65,9 @@ public slots: void inputTimedout(); void demoFinished(); +protected: + void changeEvent(QEvent *event); + private: PictureFlow* pictureFlowWidget; SlideShow* slideShowWidget; diff --git a/demos/embedded/fluidlauncher/slideshow.cpp b/demos/embedded/fluidlauncher/slideshow.cpp index a397c2b..55daedf 100644 --- a/demos/embedded/fluidlauncher/slideshow.cpp +++ b/demos/embedded/fluidlauncher/slideshow.cpp @@ -83,7 +83,8 @@ void SlideShowPrivate::showNextSlide() -SlideShow::SlideShow() +SlideShow::SlideShow(QWidget* parent) : + QWidget(parent) { d = new SlideShowPrivate; @@ -125,7 +126,6 @@ void SlideShow::clearImages() void SlideShow::startShow() { - showFullScreen(); d->interSlideTimer.start(d->slideInterval, this); d->showNextSlide(); update(); @@ -134,7 +134,6 @@ void SlideShow::startShow() void SlideShow::stopShow() { - hide(); d->interSlideTimer.stop(); } diff --git a/demos/embedded/fluidlauncher/slideshow.h b/demos/embedded/fluidlauncher/slideshow.h index 6d51662..214652e 100644 --- a/demos/embedded/fluidlauncher/slideshow.h +++ b/demos/embedded/fluidlauncher/slideshow.h @@ -53,7 +53,7 @@ class SlideShow : public QWidget Q_PROPERTY(int slideInterval READ slideInterval WRITE setSlideInterval) public: - SlideShow(); + SlideShow(QWidget* parent = 0); ~SlideShow(); void addImage(QString filename); void addImageDir(QString dirName); -- cgit v0.12 From 17387e79ddfc867feb8f65f18b6ad49e6403d0e7 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Fri, 25 Sep 2009 12:46:49 +0200 Subject: Fix app showing a blank screen after switching to it using task switcher On S60, the widget backing store is dropped when app window is hidden in order to save memory. This has a side effect that the widgets are not redrawn when the backing store is recreated if they have static content. Fix is to invalidate the backing buffer after recreating it, and repaint the widget. Reviewed-by: Jason Barron --- src/gui/kernel/qapplication_s60.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 27e8602..8daac42 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -480,7 +480,7 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent) alienWidget = qwidget; S60->mousePressTarget = alienWidget; } - + alienWidget = S60->mousePressTarget; if (alienWidget != S60->lastPointerEventTarget) @@ -600,7 +600,7 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod if (keyCode >= Qt::Key_Left && keyCode <= Qt::Key_Down || keyCode == Qt::Key_Select) { /*Explanation about virtualMouseAccel: Tapping an arrow key allows precise pixel positioning - Holding an arrow key down, acceleration is applied to allow cursor + Holding an arrow key down, acceleration is applied to allow cursor to be quickly moved to another part of the screen by key repeats. */ if (S60->virtualMouseLastKey == keyCode) { @@ -668,7 +668,7 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod } } #endif - + Qt::KeyboardModifiers mods = mapToQtModifiers(keyEvent.iModifiers); QKeyEventEx qKeyEvent(type == EEventKeyUp ? QEvent::KeyRelease : QEvent::KeyPress, keyCode, mods, qt_keymapper_private()->translateKeyEvent(keyCode, mods), @@ -993,13 +993,13 @@ void qt_init(QApplicationPrivate * /* priv */, int) S60->hasTouchscreen = true; S60->virtualMouseRequired = false; } - + if (touch) { QApplicationPrivate::navigationMode = Qt::NavigationModeNone; } else { QApplicationPrivate::navigationMode = Qt::NavigationModeKeypadDirectional; } - + #ifndef QT_NO_CURSOR //Check if window server pointer cursors are supported or not #ifndef Q_SYMBIAN_FIXED_POINTER_CURSORS @@ -1063,7 +1063,7 @@ void qt_cleanup() // it dies. delete QApplicationPrivate::inputContext; QApplicationPrivate::inputContext = 0; - + //Change mouse pointer back S60->wsSession().SetPointerCursorMode(EPointerCursorNone); @@ -1383,7 +1383,8 @@ int QApplication::s60ProcessEvent(TWsEvent *event) } else if ((visChangedEvent->iFlags & TWsVisibilityChangedEvent::EPartiallyVisible) && !w->d_func()->maybeBackingStore()) { w->d_func()->topData()->backingStore = new QWidgetBackingStore(w); - w->update(); + w->d_func()->invalidateBuffer(w->rect()); + w->repaint(); } return 1; } @@ -1599,7 +1600,7 @@ void QApplicationPrivate::setNavigationMode(Qt::NavigationMode mode) const bool isCursorOn = (mode == Qt::NavigationModeCursorAuto && !S60->hasTouchscreen) || mode == Qt::NavigationModeCursorForceVisible; - + if (!wasCursorOn && isCursorOn) { //Show the cursor, when changing from another mode to cursor mode qt_symbian_set_cursor_visible(true); @@ -1629,7 +1630,7 @@ void QApplication::restoreOverrideCursor() if (qApp->d_func()->cursor_list.isEmpty()) return; qApp->d_func()->cursor_list.removeFirst(); - + if (!qApp->d_func()->cursor_list.isEmpty()) { qt_symbian_setGlobalCursor(qApp->d_func()->cursor_list.first()); } -- cgit v0.12 From 2bea70ee7f25462a6942dff15a21a6d5377433d3 Mon Sep 17 00:00:00 2001 From: ninerider Date: Fri, 25 Sep 2009 12:47:30 +0200 Subject: Fixed the image comparison tests for Windows Mobile 5 The image comparison reference snapshots were not up to date. Also the comparison ignores the title bar completely. Reviewed-by: banana joe --- .../windowsmobile/test/testQMenuBar_current.png | Bin 23702 -> 22964 bytes .../windowsmobile/test/testSimpleWidget_current.png | Bin 22034 -> 23841 bytes tests/auto/windowsmobile/test/tst_windowsmobile.cpp | 17 ++++++++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/auto/windowsmobile/test/testQMenuBar_current.png b/tests/auto/windowsmobile/test/testQMenuBar_current.png index d03e69a..f0042b8 100644 Binary files a/tests/auto/windowsmobile/test/testQMenuBar_current.png and b/tests/auto/windowsmobile/test/testQMenuBar_current.png differ diff --git a/tests/auto/windowsmobile/test/testSimpleWidget_current.png b/tests/auto/windowsmobile/test/testSimpleWidget_current.png index 09a10a3..8086c41 100644 Binary files a/tests/auto/windowsmobile/test/testSimpleWidget_current.png and b/tests/auto/windowsmobile/test/testSimpleWidget_current.png differ diff --git a/tests/auto/windowsmobile/test/tst_windowsmobile.cpp b/tests/auto/windowsmobile/test/tst_windowsmobile.cpp index 2d7c9ea..7a86a51 100644 --- a/tests/auto/windowsmobile/test/tst_windowsmobile.cpp +++ b/tests/auto/windowsmobile/test/tst_windowsmobile.cpp @@ -57,6 +57,8 @@ class tst_WindowsMobile : public QObject public: tst_WindowsMobile() { + qApp->setCursorFlashTime (24 * 3600 * 1000); // once a day + // qApp->setCursorFlashTime (INT_MAX); #ifdef Q_OS_WINCE_WM q_initDD(); #endif @@ -123,11 +125,20 @@ void compareScreenshots(const QString &image1, const QString &image2) QImage screenShot(image1); QImage original(image2); - //ignore the clock + // cut away the title bar before comparing + QDesktopWidget desktop; + QRect desktopFrameRect = desktop.frameGeometry(); + QRect desktopClientRect = desktop.availableGeometry(); + QPainter p1(&screenShot); QPainter p2(&original); - p1.fillRect(310, 6, 400, 34, Qt::black); - p2.fillRect(310, 6, 400, 34, Qt::black); + + //screenShot.save("scr1.png", "PNG"); + p1.fillRect(0, 0, desktopFrameRect.width(), desktopClientRect.y(), Qt::black); + p2.fillRect(0, 0, desktopFrameRect.width(), desktopClientRect.y(), Qt::black); + + //screenShot.save("scr2.png", "PNG"); + //original.save("orig1.png", "PNG"); QVERIFY(original == screenShot); } -- cgit v0.12 From 0fa201d84468d82bec4268971eba865c50606e5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= Date: Fri, 25 Sep 2009 13:07:42 +0200 Subject: Use qDebug() instead of printf() when dumping the simplex matrix. printf() does not work very well on windows, since it will not send the output to OutputDebugString(). This allows us to catch the output even if the program is configured without "CONFIG += console". --- .../graphicsview/anchorlayout/anchorlayout.pro | 1 + src/gui/graphicsview/qsimplex_p.cpp | 22 ++++++++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/examples/graphicsview/anchorlayout/anchorlayout.pro b/examples/graphicsview/anchorlayout/anchorlayout.pro index c969c8b..c2a1bea 100644 --- a/examples/graphicsview/anchorlayout/anchorlayout.pro +++ b/examples/graphicsview/anchorlayout/anchorlayout.pro @@ -12,3 +12,4 @@ sources.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/anchorlayout INSTALLS += target sources TARGET = anchorlayout_example +CONFIG+=console \ No newline at end of file diff --git a/src/gui/graphicsview/qsimplex_p.cpp b/src/gui/graphicsview/qsimplex_p.cpp index 94eb5c0..1ba24a3 100644 --- a/src/gui/graphicsview/qsimplex_p.cpp +++ b/src/gui/graphicsview/qsimplex_p.cpp @@ -333,23 +333,21 @@ void QSimplex::clearColumns(int first, int last) void QSimplex::dumpMatrix() { - printf("---- Simplex Matrix ----\n"); + qDebug("---- Simplex Matrix ----\n"); - printf(" "); + QString str(QLatin1String(" ")); for (int j = 0; j < columns; ++j) - printf(" <% 2d >", j); - printf("\n"); - + str += QString::fromAscii(" <%1 >").arg(j, 2); + qDebug("%s", qPrintable(str)); for (int i = 0; i < rows; ++i) { - printf("Row %2d:", i); + str = QString::fromAscii("Row %1:").arg(i, 2); qreal *row = matrix + i * columns; - for (int j = 0; j < columns; ++j) { - printf(" % 2.2f", row[j]); - } - printf("\n"); + for (int j = 0; j < columns; ++j) + str += QString::fromAscii("%1").arg(row[j], 7, 'f', 2); + qDebug("%s", qPrintable(str)); } - printf("------------------------\n\n"); + qDebug("------------------------\n"); } void QSimplex::combineRows(int toIndex, int fromIndex, qreal factor) @@ -474,7 +472,7 @@ bool QSimplex::iterate() setValueAt(pivotRow, 0, pivotColumn); // dumpMatrix(); - // printf("------------ end of iteration --------------\n"); + // qDebug("------------ end of iteration --------------\n"); return true; } -- cgit v0.12 From 8a993264ca8bd6273f1d5bb4288d64592d07760f Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Fri, 25 Sep 2009 13:15:24 +0200 Subject: Replacing QPointer usage with QWeakPointer in statemachine Reviewed-by: thierry --- src/corelib/statemachine/qabstracttransition.cpp | 6 +++--- src/corelib/statemachine/qabstracttransition_p.h | 4 ++-- src/corelib/statemachine/qstate.cpp | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp index a81fe0f..8b858c7 100644 --- a/src/corelib/statemachine/qabstracttransition.cpp +++ b/src/corelib/statemachine/qabstracttransition.cpp @@ -187,7 +187,7 @@ QAbstractState *QAbstractTransition::targetState() const Q_D(const QAbstractTransition); if (d->targetStates.isEmpty()) return 0; - return d->targetStates.first(); + return d->targetStates.first().data(); } /*! @@ -211,7 +211,7 @@ QList QAbstractTransition::targetStates() const Q_D(const QAbstractTransition); QList result; for (int i = 0; i < d->targetStates.size(); ++i) { - QAbstractState *target = d->targetStates.at(i); + QAbstractState *target = d->targetStates.at(i).data(); if (target) result.append(target); } @@ -225,7 +225,7 @@ void QAbstractTransition::setTargetStates(const QList &targets) { Q_D(QAbstractTransition); - for (int i=0; i #include -#include +#include QT_BEGIN_NAMESPACE @@ -80,7 +80,7 @@ public: QStateMachine *machine() const; void emitTriggered(); - QList > targetStates; + QList > targetStates; #ifndef QT_NO_ANIMATION QList animations; diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp index 70026b8..a6e4a57 100644 --- a/src/corelib/statemachine/qstate.cpp +++ b/src/corelib/statemachine/qstate.cpp @@ -291,9 +291,9 @@ QAbstractTransition *QState::addTransition(QAbstractTransition *transition) } transition->setParent(this); - const QList > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; + const QList > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; for (int i = 0; i < targets.size(); ++i) { - QAbstractState *t = targets.at(i); + QAbstractState *t = targets.at(i).data(); if (!t) { qWarning("QState::addTransition: cannot add transition to null state"); return 0; -- cgit v0.12 From 02f161410dce9e2bac89f11d293f811bb224257c Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 14:35:34 +0300 Subject: Made QDir::tempPath and QDesktopServices::TempLocation consistent in S60 Reviewed-by: TrustMe Autotest: Fixes qdesktopservices::storageLocation test --- src/gui/util/qdesktopservices_s60.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp index b78e51b..fd06cf3 100644 --- a/src/gui/util/qdesktopservices_s60.cpp +++ b/src/gui/util/qdesktopservices_s60.cpp @@ -70,7 +70,6 @@ QT_BEGIN_NAMESPACE _LIT(KCacheSubDir, "Cache\\"); _LIT(KSysBin, "\\Sys\\Bin\\"); -_LIT(KTempDir, "\\System\\Temp\\"); _LIT(KBrowserPrefix, "4 " ); _LIT(KFontsDir, "z:\\resource\\Fonts\\"); const TUid KUidBrowser = { 0x10008D39 }; @@ -381,9 +380,7 @@ QString QDesktopServices::storageLocation(StandardLocation type) #endif break; case TempLocation: - path.Append(writableExeDrive().Name()); - path.Append(KTempDir); - //return QDir::tempPath(); break; + return QDir::tempPath(); break; case HomeLocation: path.Append(writableDataRoot()); -- cgit v0.12 From 5897e2b3eb54eee3b04c9d949890e254e20152d4 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Fri, 25 Sep 2009 13:52:22 +0200 Subject: Doc: Point out that not all DBMS'es can be expected to function equally well. In particular, MSSQL, DB2 and Sybase suffer from cross-platform and feature complete client libraries. --- doc/src/sql-programming/sql-driver.qdoc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/src/sql-programming/sql-driver.qdoc b/doc/src/sql-programming/sql-driver.qdoc index ea11bfb..84aea6c 100644 --- a/doc/src/sql-programming/sql-driver.qdoc +++ b/doc/src/sql-programming/sql-driver.qdoc @@ -77,6 +77,12 @@ \row \o \link #QTDS QTDS\endlink \o Sybase Adaptive Server \endtable + SQLite is the in-process database system with the best test coverage + and support on all platforms. Oracle via OCI, and PostreSQL and MySQL + through either ODBC or a native driver are well-tested on Windows and + Linux. The completeness of the support for other systems depends on the + availability and quality of client libraries. + \bold{Note:} To build a driver plugin you need to have the appropriate client library for your Database Management System (DBMS). This provides access to the API exposed by the DBMS, and is typically shipped with it. @@ -445,7 +451,7 @@ Sybase client library. Refer to the Sybase documentation for information on how to set up a Sybase client configuration file to enable connections to databases on non-default ports. - \section3 How to Build the QDTS Plugin on Unix and Mac OS X + \section3 How to Build the QTDS Plugin on Unix and Mac OS X Under Unix, two libraries are available which support the TDS protocol: @@ -609,7 +615,8 @@ The Qt InterBase plugin makes it possible to access the InterBase and Firebird databases. InterBase can either be used as a client/server or without a server in which case it operates on local files. The - database file must exist before a connection can be established. + database file must exist before a connection can be established. Firebird + must be used with a server configuration. Note that InterBase requires you to specify the full path to the database file, no matter whether it is stored locally or on another -- cgit v0.12 From 5b6799dffbd8ffc0c5943bf7dc35c945db0ae5ec Mon Sep 17 00:00:00 2001 From: mread Date: Fri, 25 Sep 2009 12:48:21 +0100 Subject: tst_qfilesystemwatcher directory changed test relaxed The polling watcher was generating two events for directory content deletion on Symbian emulator. 1 for content change, 1 for time change. Seems within the bounds of reason for a poller, so test relaxed to allow it. Reviewed-by: Liang QI --- tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 32cbed3..88bf229 100644 --- a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -515,7 +515,9 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() timer.start(3000); eventLoop.exec(); QCOMPARE(fileChangedSpy.count(), 0); - QCOMPARE(dirChangedSpy.count(), 1); + // polling watcher has generated separate events for content and time change + // on Symbian emulator, so allow possibility of 2 events + QVERIFY(dirChangedSpy.count() == 1 || dirChangedSpy.count() == 2); QVERIFY(QDir().rmdir("testDir")); } -- cgit v0.12 From f4cbcefc738b6cb8d6676907733f92e06ae33f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 25 Sep 2009 13:56:56 +0200 Subject: browser: Don't add closed tabs to the closed-tab history in privacy mode Task-number: QTBUG-4508 Reviewed-by: Simon Hausmann --- demos/browser/tabwidget.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/demos/browser/tabwidget.cpp b/demos/browser/tabwidget.cpp index f2f1b32..8a7ae0b 100644 --- a/demos/browser/tabwidget.cpp +++ b/demos/browser/tabwidget.cpp @@ -560,10 +560,13 @@ void TabWidget::closeTab(int index) } hasFocus = tab->hasFocus(); - m_recentlyClosedTabsAction->setEnabled(true); - m_recentlyClosedTabs.prepend(tab->url()); - if (m_recentlyClosedTabs.size() >= TabWidget::m_recentlyClosedTabsSize) - m_recentlyClosedTabs.removeLast(); + QWebSettings *globalSettings = QWebSettings::globalSettings(); + if (!globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { + m_recentlyClosedTabsAction->setEnabled(true); + m_recentlyClosedTabs.prepend(tab->url()); + if (m_recentlyClosedTabs.size() >= TabWidget::m_recentlyClosedTabsSize) + m_recentlyClosedTabs.removeLast(); + } } QWidget *lineEdit = m_lineEdits->widget(index); m_lineEdits->removeWidget(lineEdit); -- cgit v0.12 From fcee72bcff0f7ebda01f990d772e27f4ab6ea73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 25 Sep 2009 14:02:40 +0200 Subject: doc: Update browser demo screenshot --- doc/src/images/browser-demo.png | Bin 157205 -> 144715 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/src/images/browser-demo.png b/doc/src/images/browser-demo.png index 466f218..5e0c0be 100644 Binary files a/doc/src/images/browser-demo.png and b/doc/src/images/browser-demo.png differ -- cgit v0.12 From 7c663d00eeea346813bb7ebcc36ac042b03e7688 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Fri, 25 Sep 2009 14:10:30 +0200 Subject: Doc: Document that iterators become invalid when the container is modified. Implicit sharing makes this a bit of a trap, since the iterator continues to function, but only on the data in the copies. --- doc/src/frameworks-technologies/containers.qdoc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/src/frameworks-technologies/containers.qdoc b/doc/src/frameworks-technologies/containers.qdoc index d29ca0e..0ac9732 100644 --- a/doc/src/frameworks-technologies/containers.qdoc +++ b/doc/src/frameworks-technologies/containers.qdoc @@ -267,7 +267,10 @@ Iterators provide a uniform means to access items in a container. Qt's container classes provide two types of iterators: Java-style - iterators and STL-style iterators. + iterators and STL-style iterators. Iterators of both types are + invalidated when the data in the container is modified or detached + from \l{Implicit Sharing}{implicitly shared copies} due to a call + to a non-const member function. \section2 Java-Style Iterators -- cgit v0.12 From a39f17108e43e8b676738c15d8f0c150787de514 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Fri, 25 Sep 2009 14:28:53 +0200 Subject: Move selfsigned cert & key out of root directory Moved the certificate/key to the src/s60installs path. Updated createpackage.pl to look in this new location. Task-number: QTBUG-4553 Reviewed-by: axis --- bin/createpackage.pl | 6 +++--- selfsigned.cer | 19 ------------------- selfsigned.key | 12 ------------ src/s60installs/selfsigned.cer | 19 +++++++++++++++++++ src/s60installs/selfsigned.key | 12 ++++++++++++ 5 files changed, 34 insertions(+), 34 deletions(-) delete mode 100644 selfsigned.cer delete mode 100644 selfsigned.key create mode 100644 src/s60installs/selfsigned.cer create mode 100644 src/s60installs/selfsigned.key diff --git a/bin/createpackage.pl b/bin/createpackage.pl index 4597b04..7e87758 100755 --- a/bin/createpackage.pl +++ b/bin/createpackage.pl @@ -146,9 +146,9 @@ my $signed_sis_name = $pkgoutputbasename.".sis"; my $scriptpath = dirname(__FILE__); my $certtext = $certificate; my $certpath = $scriptpath; -$certpath =~ s-^(.*[^\\])$-$1\\-o; # ensure path ends with a backslash -$certpath = $certpath."../"; # certificates are one step up in hierarcy -$certpath =~ s-/-\\-go; # for those working with UNIX shells +$certpath =~ s-^(.*[^\\])$-$1\\-o; # ensure path ends with a backslash +$certpath =~ s-/-\\-go; # for those working with UNIX shells +$certpath =~ s-bin\\$-src\\s60installs\\-; # certificates are one step up in hierarcy # Check some pre-conditions and print error messages if needed unless (length($templatepkg) && length($platform) && length($target)) { diff --git a/selfsigned.cer b/selfsigned.cer deleted file mode 100644 index af72449..0000000 --- a/selfsigned.cer +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDFTCCAtOgAwIBAgIBADALBgcqhkjOOAQDBQAwcDELMAkGA1UEBhMCTk8xDjAM -BgNVBAoTBU5va2lhMRQwEgYDVQQLEwtRdCBTb2Z0d2FyZTEOMAwGA1UEAxMFVHJv -bGwxKzApBgkqhkiG9w0BCQEWHHF0czYwLWZlZWRiYWNrQHRyb2xsdGVjaC5jb20w -HhcNMDgxMDAzMTMwNDM1WhcNMDkxMDAzMTMwNDM1WjBwMQswCQYDVQQGEwJOTzEO -MAwGA1UEChMFTm9raWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMQ4wDAYDVQQDEwVU -cm9sbDErMCkGCSqGSIb3DQEJARYccXRzNjAtZmVlZGJhY2tAdHJvbGx0ZWNoLmNv -bTCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQC7OyI3lyV06OqahpbeEa5p9ucmoBxV -n6YKvBjliPNMhQe7Di1Igv63rllQPqABv1Qu1YJc5CPiF4dSSQ/R7XjKEQqPZY4A -PZooTKWVCs+e3Yo2HWaZYRks/euvcqvEOqmkZ2RUccaTb1T+b2et0vphFmlVYXPx -BrIlbKtgJg+6QwIVAJnqTjBmWtEYQ6kFWfLE3yFIKx0BAoGAais4n6lD7yFJHB2F -mb4W09EPx+LZTFSHgj9uzLiWWDEVl+j9jA4eYZBMb2yRBZ9zVXqjDSrFLWMuoNrV -taqAVb9V2DrDHx3s0gSQmS5BNK2KThZCNOgj3YT4GRIZR4L6gqDBS5dkWLrwFUfC -l6Hw9tizQR4EO4HgjEnMSxzXDzsDgYQAAoGAJH/tVAEb1boQKTt5eHRI/zCtw4ab -Vtw7jHMzqQ+m921izJyzz5AJCVjtu6a1bLnW09i9oFIZ7bYs+Cd+qRgac2cVkX4x -xmMXuAgw03VMf3vEbK2M2+BkjpUGrfoST5XG/eJbno6Tp1BGvYd88ZLt3gXBPnqi -2QpMaOGqMED4mWkwCwYHKoZIzjgEAwUAAy8AMCwCFGCSlB1FYaBiIAuirrAACZzi -p2jnAhQ/hlJjpxOgF7Z5RZCNAhz6HNhZ3g== ------END CERTIFICATE----- diff --git a/selfsigned.key b/selfsigned.key deleted file mode 100644 index 47c51a0..0000000 --- a/selfsigned.key +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -MIIBugIBAAKBgQC7OyI3lyV06OqahpbeEa5p9ucmoBxVn6YKvBjliPNMhQe7Di1I -gv63rllQPqABv1Qu1YJc5CPiF4dSSQ/R7XjKEQqPZY4APZooTKWVCs+e3Yo2HWaZ -YRks/euvcqvEOqmkZ2RUccaTb1T+b2et0vphFmlVYXPxBrIlbKtgJg+6QwIVAJnq -TjBmWtEYQ6kFWfLE3yFIKx0BAoGAais4n6lD7yFJHB2Fmb4W09EPx+LZTFSHgj9u -zLiWWDEVl+j9jA4eYZBMb2yRBZ9zVXqjDSrFLWMuoNrVtaqAVb9V2DrDHx3s0gSQ -mS5BNK2KThZCNOgj3YT4GRIZR4L6gqDBS5dkWLrwFUfCl6Hw9tizQR4EO4HgjEnM -SxzXDzsCgYAkf+1UARvVuhApO3l4dEj/MK3DhptW3DuMczOpD6b3bWLMnLPPkAkJ -WO27prVsudbT2L2gUhnttiz4J36pGBpzZxWRfjHGYxe4CDDTdUx/e8RsrYzb4GSO -lQat+hJPlcb94luejpOnUEa9h3zxku3eBcE+eqLZCkxo4aowQPiZaQIUV0KZx9KH -Qp9/xwskqgJvmWgR8KQ= ------END DSA PRIVATE KEY----- diff --git a/src/s60installs/selfsigned.cer b/src/s60installs/selfsigned.cer new file mode 100644 index 0000000..af72449 --- /dev/null +++ b/src/s60installs/selfsigned.cer @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFTCCAtOgAwIBAgIBADALBgcqhkjOOAQDBQAwcDELMAkGA1UEBhMCTk8xDjAM +BgNVBAoTBU5va2lhMRQwEgYDVQQLEwtRdCBTb2Z0d2FyZTEOMAwGA1UEAxMFVHJv +bGwxKzApBgkqhkiG9w0BCQEWHHF0czYwLWZlZWRiYWNrQHRyb2xsdGVjaC5jb20w +HhcNMDgxMDAzMTMwNDM1WhcNMDkxMDAzMTMwNDM1WjBwMQswCQYDVQQGEwJOTzEO +MAwGA1UEChMFTm9raWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMQ4wDAYDVQQDEwVU +cm9sbDErMCkGCSqGSIb3DQEJARYccXRzNjAtZmVlZGJhY2tAdHJvbGx0ZWNoLmNv +bTCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQC7OyI3lyV06OqahpbeEa5p9ucmoBxV +n6YKvBjliPNMhQe7Di1Igv63rllQPqABv1Qu1YJc5CPiF4dSSQ/R7XjKEQqPZY4A +PZooTKWVCs+e3Yo2HWaZYRks/euvcqvEOqmkZ2RUccaTb1T+b2et0vphFmlVYXPx +BrIlbKtgJg+6QwIVAJnqTjBmWtEYQ6kFWfLE3yFIKx0BAoGAais4n6lD7yFJHB2F +mb4W09EPx+LZTFSHgj9uzLiWWDEVl+j9jA4eYZBMb2yRBZ9zVXqjDSrFLWMuoNrV +taqAVb9V2DrDHx3s0gSQmS5BNK2KThZCNOgj3YT4GRIZR4L6gqDBS5dkWLrwFUfC +l6Hw9tizQR4EO4HgjEnMSxzXDzsDgYQAAoGAJH/tVAEb1boQKTt5eHRI/zCtw4ab +Vtw7jHMzqQ+m921izJyzz5AJCVjtu6a1bLnW09i9oFIZ7bYs+Cd+qRgac2cVkX4x +xmMXuAgw03VMf3vEbK2M2+BkjpUGrfoST5XG/eJbno6Tp1BGvYd88ZLt3gXBPnqi +2QpMaOGqMED4mWkwCwYHKoZIzjgEAwUAAy8AMCwCFGCSlB1FYaBiIAuirrAACZzi +p2jnAhQ/hlJjpxOgF7Z5RZCNAhz6HNhZ3g== +-----END CERTIFICATE----- diff --git a/src/s60installs/selfsigned.key b/src/s60installs/selfsigned.key new file mode 100644 index 0000000..47c51a0 --- /dev/null +++ b/src/s60installs/selfsigned.key @@ -0,0 +1,12 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIBugIBAAKBgQC7OyI3lyV06OqahpbeEa5p9ucmoBxVn6YKvBjliPNMhQe7Di1I +gv63rllQPqABv1Qu1YJc5CPiF4dSSQ/R7XjKEQqPZY4APZooTKWVCs+e3Yo2HWaZ +YRks/euvcqvEOqmkZ2RUccaTb1T+b2et0vphFmlVYXPxBrIlbKtgJg+6QwIVAJnq +TjBmWtEYQ6kFWfLE3yFIKx0BAoGAais4n6lD7yFJHB2Fmb4W09EPx+LZTFSHgj9u +zLiWWDEVl+j9jA4eYZBMb2yRBZ9zVXqjDSrFLWMuoNrVtaqAVb9V2DrDHx3s0gSQ +mS5BNK2KThZCNOgj3YT4GRIZR4L6gqDBS5dkWLrwFUfCl6Hw9tizQR4EO4HgjEnM +SxzXDzsCgYAkf+1UARvVuhApO3l4dEj/MK3DhptW3DuMczOpD6b3bWLMnLPPkAkJ +WO27prVsudbT2L2gUhnttiz4J36pGBpzZxWRfjHGYxe4CDDTdUx/e8RsrYzb4GSO +lQat+hJPlcb94luejpOnUEa9h3zxku3eBcE+eqLZCkxo4aowQPiZaQIUV0KZx9KH +Qp9/xwskqgJvmWgR8KQ= +-----END DSA PRIVATE KEY----- -- cgit v0.12 From f63b210e677e59c5b28d6e7b8bfa0af290c75bcb Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Fri, 25 Sep 2009 14:30:11 +0200 Subject: Fixed crash with QPixmap::fill() when pixmap is painted to using opengl1 Reviewed-by: Samuel --- src/opengl/qpixmapdata_gl.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp index 8cb6c8d..2331c6d 100644 --- a/src/opengl/qpixmapdata_gl.cpp +++ b/src/opengl/qpixmapdata_gl.cpp @@ -384,8 +384,20 @@ void QGLPixmapData::fill(const QColor &color) m_hasFillColor = true; m_fillColor = color; } else { - QImage image = fillImage(color); - fromImage(image, 0); + + if (m_source.isNull()) { + m_fillColor = color; + m_hasFillColor = true; + + } else if (m_source.depth() == 32) { + m_source.fill(PREMUL(color.rgba())); + + } else if (m_source.depth() == 1) { + if (color == Qt::color1) + m_source.fill(1); + else + m_source.fill(0); + } } } @@ -399,15 +411,11 @@ QImage QGLPixmapData::fillImage(const QColor &color) const QImage img; if (pixelType() == BitmapType) { img = QImage(w, h, QImage::Format_MonoLSB); - img.setNumColors(2); - img.setColor(0, QColor(Qt::color0).rgba()); - img.setColor(1, QColor(Qt::color1).rgba()); - int gray = qGray(color.rgba()); - if (qAbs(255 - gray) < gray) - img.fill(0); - else + if (color == Qt::color1) img.fill(1); + else + img.fill(0); } else { img = QImage(w, h, m_hasAlpha -- cgit v0.12 From 789232278180296b04b7178a95a2e0394eb6736c Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 15:34:25 +0300 Subject: Clean-up for qprocess autotest since default stack in S60 is now 80K. Specialized test code to set higher stack for this test case is not needed anymore since default stack for Qt thread in S60 now is 80 KB. See commit: 9324fdde Reviewed-by: TrustMe --- tests/auto/qprocess/tst_qprocess.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/tests/auto/qprocess/tst_qprocess.cpp b/tests/auto/qprocess/tst_qprocess.cpp index e759b0e..9e3bce0 100644 --- a/tests/auto/qprocess/tst_qprocess.cpp +++ b/tests/auto/qprocess/tst_qprocess.cpp @@ -1318,15 +1318,6 @@ protected slots: private: int exitCode; -#ifdef Q_OS_SYMBIAN - enum - { - /** - * The maximum stack size. - */ - SymbianStackSize = 0x14000 - }; -#endif }; //----------------------------------------------------------------------------- @@ -1334,9 +1325,6 @@ void tst_QProcess::processInAThread() { for (int i = 0; i < 10; ++i) { TestThread thread; -#if defined(Q_OS_SYMBIAN) - thread.setStackSize(SymbianStackSize); -#endif thread.start(); QVERIFY(thread.wait(10000)); QCOMPARE(thread.code(), 0); @@ -1359,10 +1347,6 @@ void tst_QProcess::processesInMultipleThreads() thread1.serial = serialCounter++; thread2.serial = serialCounter++; thread3.serial = serialCounter++; - - thread1.setStackSize(SymbianStackSize); - thread2.setStackSize(SymbianStackSize); - thread3.setStackSize(SymbianStackSize); #endif thread1.start(); thread2.start(); -- cgit v0.12 From c0cb9c68f598197c1d52c4b9d3445c6b5c49ed8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 25 Sep 2009 14:33:33 +0200 Subject: browser demo: Disable debug logging in release mode --- demos/browser/browser.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/demos/browser/browser.pro b/demos/browser/browser.pro index afc25e3..407030f 100644 --- a/demos/browser/browser.pro +++ b/demos/browser/browser.pro @@ -6,6 +6,8 @@ CONFIG += qt warn_on contains(QT_BUILD_PARTS, tools):!symbian:!embedded: CONFIG += uitools else: DEFINES += QT_NO_UITOOLS +release:DEFINES+=QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT + FORMS += \ addbookmarkdialog.ui \ bookmarks.ui \ -- cgit v0.12 From a8c50d490769f587b54a8a60f592a091e2f1e05b Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 15:44:06 +0300 Subject: Skipped QProcess::setProcessEnvironment auto test for Symbian. Symbian OS doesn't support environment variables. Reviewed-by: Miikka Heikkinen --- tests/auto/qprocess/tst_qprocess.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/auto/qprocess/tst_qprocess.cpp b/tests/auto/qprocess/tst_qprocess.cpp index 9e3bce0..d5bc0bd 100644 --- a/tests/auto/qprocess/tst_qprocess.cpp +++ b/tests/auto/qprocess/tst_qprocess.cpp @@ -1868,8 +1868,10 @@ void tst_QProcess::setProcessEnvironment_data() void tst_QProcess::setProcessEnvironment() { -#if !defined (Q_OS_WINCE) - // there is no concept of system variables on Windows CE as there is no console +#if defined (Q_OS_WINCE) || defined(Q_OS_SYMBIAN) + QSKIP("OS doesn't support environment variables", SkipAll); +#endif + // make sure our environment variables are correct QVERIFY(qgetenv("tst_QProcess").isEmpty()); QVERIFY(!qgetenv("PATH").isEmpty()); @@ -1899,7 +1901,6 @@ void tst_QProcess::setProcessEnvironment() QCOMPARE(process.readAll(), value.toLocal8Bit()); } -#endif } //----------------------------------------------------------------------------- void tst_QProcess::systemEnvironment() -- cgit v0.12 From 4a7f44a97382e84c94cf453f6129b7d38d696dd6 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 15:58:16 +0300 Subject: Added "requires qtscript" to qsharedmemory test pro in S60 and WinCE. qsharedmemory autotest does not compile for S60 and WinCE without QtScript and QtScript currently does not compiled for S60, that's why the following statement was added: requires(contains(QT_CONFIG,script)) Reviewed-by: TrustMe --- tests/auto/qsharedmemory/lackey/lackey.pro | 2 ++ tests/auto/qsharedmemory/test/test.pro | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/auto/qsharedmemory/lackey/lackey.pro b/tests/auto/qsharedmemory/lackey/lackey.pro index 9d2fcad..d25a50a 100644 --- a/tests/auto/qsharedmemory/lackey/lackey.pro +++ b/tests/auto/qsharedmemory/lackey/lackey.pro @@ -9,6 +9,8 @@ DESTDIR = ./ win32: CONFIG += console mac:CONFIG -= app_bundle +requires(contains(QT_CONFIG,script)) + DEFINES += QSHAREDMEMORY_DEBUG DEFINES += QSYSTEMSEMAPHORE_DEBUG diff --git a/tests/auto/qsharedmemory/test/test.pro b/tests/auto/qsharedmemory/test/test.pro index 779a942..c9f4fec 100644 --- a/tests/auto/qsharedmemory/test/test.pro +++ b/tests/auto/qsharedmemory/test/test.pro @@ -18,12 +18,14 @@ TARGET = ../tst_qsharedmemory } wince*:{ +requires(contains(QT_CONFIG,script)) QT += gui script addFiles.sources = ../lackey/lackey.exe ../lackey/scripts addFiles.path = lackey DEPLOYMENT += addFiles DEFINES += SRCDIR=\\\"\\\" }else:symbian*{ +requires(contains(QT_CONFIG,script)) QT += gui script addFiles.sources = ../lackey/scripts addFiles.path = /data/qsharedmemorytemp/lackey -- cgit v0.12 From f2fa66d3dd722d88c651738bef7b1ccb3c91c156 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 25 Sep 2009 16:05:22 +0300 Subject: Added "requires qtscript" to qsystemsemaphore test in S60 and WinCE. qsystemsemaphore autotest does not compile for S60 and WinCE without QtScript and QtScript currently does not compile for S60, that's why the following statement was added to pro file: requires(contains(QT_CONFIG,script)) Reviewed-by: TrustMe --- tests/auto/qsystemsemaphore/test/test.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/auto/qsystemsemaphore/test/test.pro b/tests/auto/qsystemsemaphore/test/test.pro index b8d3a4a..ed7898c 100644 --- a/tests/auto/qsystemsemaphore/test/test.pro +++ b/tests/auto/qsystemsemaphore/test/test.pro @@ -18,6 +18,7 @@ win32 { RESOURCES += ../files.qrc wince*: { +requires(contains(QT_CONFIG,script)) # this test calls lackey, which then again depends on QtScript. # let's add it here so that it gets deployed easily QT += script @@ -28,6 +29,7 @@ DEPLOYMENT += lackey } symbian: { +requires(contains(QT_CONFIG,script)) # this test calls lackey, which then again depends on QtScript. # let's add it here so that it gets deployed easily QT += script -- cgit v0.12 From 237c2afc0846224e00e5889c2c3ee8bde583689d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 25 Sep 2009 16:15:08 +0300 Subject: Desktopservices demo no longer attempts to play music files in emulator Since Symbian emulator support for playing music files is spotty at best, resulting in failure to launch at best and freezing of the emulator at worst, disabled even trying to launch music files. Task-number: QT-2047 Reviewed-by: Janne Koskinen --- demos/embedded/desktopservices/contenttab.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/demos/embedded/desktopservices/contenttab.cpp b/demos/embedded/desktopservices/contenttab.cpp index 69b7cf8..d218702 100644 --- a/demos/embedded/desktopservices/contenttab.cpp +++ b/demos/embedded/desktopservices/contenttab.cpp @@ -145,9 +145,20 @@ void ContentTab::handleErrorInOpen(QListWidgetItem *item) // NEW SLOTS void ContentTab::openItem(QListWidgetItem *item) { - bool ret = QDesktopServices::openUrl(itemUrl(item)); - if (!ret) - handleErrorInOpen(item); +#if defined(Q_OS_SYMBIAN) && defined(Q_CC_NOKIAX86) + // Opening music files doesn't work in Symbian emulator and in some SDKs freezes the + // emulator entirely, so prevent it. + QStringList nameFilters = m_ContentDir.nameFilters(); + if (nameFilters.contains("*.mp3")) { + QMessageBox::warning(this, tr("Operation Failed"), tr("Action not supported in emulator."), + QMessageBox::Close); + } else +#endif + { + bool ret = QDesktopServices::openUrl(itemUrl(item)); + if (!ret) + handleErrorInOpen(item); + } } -- cgit v0.12 From 0f7f8ccc526c8bc02d1554415cfc52f0f5708743 Mon Sep 17 00:00:00 2001 From: ninerider Date: Fri, 25 Sep 2009 15:51:49 +0200 Subject: Individual targets for the test processes defined The deployment for Windows CE did not work as the processes could not be located properly on the device. Reviewed-by: banana joe --- tests/auto/qprocess/qprocess.pro | 4 +- tests/auto/qprocess/test/test.pro | 100 +++++++++++++++++++++++++++++--------- 2 files changed, 81 insertions(+), 23 deletions(-) diff --git a/tests/auto/qprocess/qprocess.pro b/tests/auto/qprocess/qprocess.pro index 047828a..892686d 100644 --- a/tests/auto/qprocess/qprocess.pro +++ b/tests/auto/qprocess/qprocess.pro @@ -1,6 +1,8 @@ TEMPLATE = subdirs -SUBDIRS = testProcessCrash \ +SUBDIRS = \ + testBatFiles \ + testProcessCrash \ testProcessEcho \ testProcessEcho2 \ testProcessEcho3 \ diff --git a/tests/auto/qprocess/test/test.pro b/tests/auto/qprocess/test/test.pro index 82f91f8..e1afd22 100644 --- a/tests/auto/qprocess/test/test.pro +++ b/tests/auto/qprocess/test/test.pro @@ -26,29 +26,85 @@ QT = core embedded: QT += gui wince*: { - addFiles.sources = \ - ../fileWriterProcess \ - "../test Space In Name" \ - ../testBatFiles \ - ../testDetached \ - ../testExitCodes \ - ../testGuiProcess \ - ../testProcessCrash \ - ../testProcessDeadWhileReading \ - ../testProcessEcho \ - ../testProcessEcho2 \ - ../testProcessEcho3 \ - ../testProcessEchoGui \ - ../testProcessEOF \ - ../testProcessLoopback \ - ../testProcessNormal \ - ../testProcessOutput \ - ../testProcessSpacesArgs \ - ../testSoftExit \ - ../testSpaceInName + + addFile_fileWriterProcess.sources = $$OUT_PWD/../fileWriterProcess/fileWriterProcess.exe + addFile_fileWriterProcess.path = fileWriterProcess + + addFile_testBatFiles.sources = $$PWD/../testBatFiles/* + addFile_testBatFiles.path = testBatFiles + + addFile_testDetached.sources = $$OUT_PWD/../testDetached/testDetached.exe + addFile_testDetached.path = testDetached + + addFile_testExitCodes.sources = $$OUT_PWD/../testExitCodes/testExitCodes.exe + addFile_testExitCodes.path = testExitCodes + + addFile_testGuiProcess.sources = $$OUT_PWD/../testGuiProcess/testGuiProcess.exe + addFile_testGuiProcess.path = testGuiProcess - addFiles.path = \Program Files\tst_qprocess - DEPLOYMENT += addFiles + addFile_testProcessCrash.sources = $$OUT_PWD/../testProcessCrash/testProcessCrash.exe + addFile_testProcessCrash.path = testProcessCrash + + addFile_testProcessDeadWhileReading.sources = $$OUT_PWD/../testProcessDeadWhileReading/testProcessDeadWhileReading.exe + addFile_testProcessDeadWhileReading.path = testProcessDeadWhileReading + + addFile_testProcessEcho.sources = $$OUT_PWD/../testProcessEcho/testProcessEcho.exe + addFile_testProcessEcho.path = testProcessEcho + + addFile_testProcessEcho2.sources = $$OUT_PWD/../testProcessEcho2/testProcessEcho2.exe + addFile_testProcessEcho2.path = testProcessEcho2 + + addFile_testProcessEcho3.sources = $$OUT_PWD/../testProcessEcho3/testProcessEcho3.exe + addFile_testProcessEcho3.path = testProcessEcho3 + + addFile_testProcessEOF.sources = $$OUT_PWD/../testProcessEOF/testProcessEOF.exe + addFile_testProcessEOF.path = testProcessEOF + + addFile_testProcessLoopback.sources = $$OUT_PWD/../testProcessLoopback/testProcessLoopback.exe + addFile_testProcessLoopback.path = testProcessLoopback + + addFile_testProcessNormal.sources = $$OUT_PWD/../testProcessNormal/testProcessNormal.exe + addFile_testProcessNormal.path = testProcessNormal + + addFile_testProcessOutput.sources = $$OUT_PWD/../testProcessOutput/testProcessOutput.exe + addFile_testProcessOutput.path = testProcessOutput + + addFile_testProcessNoSpacesArgs.sources = $$OUT_PWD/../testProcessSpacesArgs/nospace.exe + addFile_testProcessNoSpacesArgs.path = testProcessSpacesArgs + + addFile_testProcessOneSpacesArgs.sources = $$OUT_PWD/../testProcessSpacesArgs/"one space".exe + addFile_testProcessOneSpacesArgs.path = testProcessSpacesArgs + + addFile_testProcessTwoSpacesArgs.sources = $$OUT_PWD/../testProcessSpacesArgs/"two space s".exe + addFile_testProcessTwoSpacesArgs.path = testProcessSpacesArgs + + addFile_testSoftExit.sources = $$OUT_PWD/../testSoftExit/testSoftExit.exe + addFile_testSoftExit.path = testSoftExit + + addFile_testSpaceInName.sources = $$OUT_PWD/../"test Space In Name"/testSpaceInName.exe + addFile_testSpaceInName.path = "test Space In Name" + + + DEPLOYMENT += addFile_fileWriterProcess \ + addFile_testBatFiles \ + addFile_testDetached \ + addFile_testExitCodes \ + addFile_testGuiProcess \ + addFile_testProcessCrash \ + addFile_testProcessDeadWhileReading \ + addFile_testProcessEcho \ + addFile_testProcessEcho2 \ + addFile_testProcessEcho3 \ + addFile_testProcessEchoGui \ + addFile_testProcessEOF \ + addFile_testProcessLoopback \ + addFile_testProcessNormal \ + addFile_testProcessOutput \ + addFile_testProcessNoSpacesArgs \ + addFile_testProcessOneSpacesArgs \ + addFile_testProcessTwoSpacesArgs \ + addFile_testSoftExit \ + addFile_testSpaceInName } symbian: { -- cgit v0.12 From d811a26dc7e821537e9cbd8a275093e58cf0d185 Mon Sep 17 00:00:00 2001 From: ninerider Date: Fri, 25 Sep 2009 15:54:58 +0200 Subject: Process could not be located on WindowsCE The SRCDIR entry was added to the project file to correct the deployment for WindowsCE. Also the process start is now monitored in the test. Reviewed-by: Joerg --- tests/auto/qsharedmemory/qsystemlock/qsystemlock.pro | 6 ++++++ .../qsharedmemory/qsystemlock/tst_qsystemlock.cpp | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/tests/auto/qsharedmemory/qsystemlock/qsystemlock.pro b/tests/auto/qsharedmemory/qsystemlock/qsystemlock.pro index 042ab3f..2628f19 100644 --- a/tests/auto/qsharedmemory/qsystemlock/qsystemlock.pro +++ b/tests/auto/qsharedmemory/qsystemlock/qsystemlock.pro @@ -5,6 +5,12 @@ include(../src/src.pri) win32: CONFIG += console mac:CONFIG -= app_bundle +wince*|symbian { + DEFINES += SRCDIR=\\\"\\\" +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} + DESTDIR = ./ DEFINES += QSHAREDMEMORY_DEBUG diff --git a/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp b/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp index b6355fe..87fc3ee 100644 --- a/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp +++ b/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp @@ -195,26 +195,35 @@ void tst_QSystemLock::processes() QStringList scripts; for (int i = 0; i < readOnly; ++i) - scripts.append("../lackey/scripts/systemlock_read.js"); + scripts.append(QFileInfo(SRCDIR "lackey/scripts/ systemlock_read.js").absoluteFilePath() ); for (int i = 0; i < readWrite; ++i) - scripts.append("../lackey/scripts/systemlock_readwrite.js"); + scripts.append(QFileInfo(SRCDIR "lackey/scripts/systemlock_readwrite.js").absoluteFilePath()); QList consumers; + unsigned int failedProcesses = 0; for (int i = 0; i < scripts.count(); ++i) { + QStringList arguments = QStringList() << scripts.at(i); QProcess *p = new QProcess; p->setProcessChannelMode(QProcess::ForwardedChannels); - consumers.append(p); - p->start("../lackey/lackey", arguments); + + p->start(QFileInfo(SRCDIR "lackey/lackey").absoluteFilePath(), arguments); + // test, if the process could be started. + + if (p->waitForStarted(2000)) + consumers.append(p); + else + ++failedProcesses; } while (!consumers.isEmpty()) { consumers.first()->waitForFinished(3000); - consumers.first()->kill(); + consumers.first()->kill(); QCOMPARE(consumers.first()->exitStatus(), QProcess::NormalExit); QCOMPARE(consumers.first()->exitCode(), 0); delete consumers.takeFirst(); } + QCOMPARE(failedProcesses, unsigned int(0)); } QTEST_MAIN(tst_QSystemLock) -- cgit v0.12 From 64a17b5b280000058f9af38e26bc9beca1bd15bd Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Fri, 25 Sep 2009 15:32:40 +0200 Subject: Fix compilation of files that #include on newer Symbian SDKs. The new public classes in the 's60framework' sub-directory of QtGui introduce a header file dependency to the middleware layer of the SDK by including 'aknapp.h'. Since the build system doesn't know if you have included QtGui or not, the closest approximation is to append the middleware layer include path in cases where the QT variable contains 'gui' Reviewed-by: axis --- mkspecs/features/qt_functions.prf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index 8956ef7..645aa3a 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -45,6 +45,11 @@ defineTest(qtAddLibrary) { } } } + symbian*:isEqual(LIB_NAME, QtGui) { + # Needed for #include because qs60mainapplication.h includes aknapp.h + INCLUDEPATH -= $$MW_LAYER_SYSTEMINCLUDE + INCLUDEPATH = $$MW_LAYER_SYSTEMINCLUDE $$INCLUDEPATH + } isEmpty(LINKAGE) { CONFIG(debug, debug|release) { win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d -- cgit v0.12 From 9e389da2e1c46906df9f1427af4dc311e4ac64e5 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Fri, 25 Sep 2009 16:33:03 +0200 Subject: Doc: Added a note about Phonon. Reviewed-by: Trust Me --- src/gui/image/qmovie.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index 48aee1c..42b8dea 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -47,6 +47,10 @@ \ingroup painting + This class is used to show simple animations without sound. If you want + to display video and media content, use the \l{Phonon Module}{Phonon} + multimedia framework instead. + First, create a QMovie object by passing either the name of a file or a pointer to a QIODevice containing an animated image format to QMovie's constructor. You can call isValid() to check if the image data is valid, -- cgit v0.12 From b4c52810efd42ba9cd8087180a5bf9d48c18de84 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Fri, 25 Sep 2009 16:33:33 +0200 Subject: Doc: Added some notes to help people implement custom models. Reviewed-by: Trust Me --- src/corelib/kernel/qabstractitemmodel.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp index ce6c844..8e2273d 100644 --- a/src/corelib/kernel/qabstractitemmodel.cpp +++ b/src/corelib/kernel/qabstractitemmodel.cpp @@ -1226,6 +1226,9 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent, /*! \fn bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent) + \note The base class implementation of this function does nothing and + returns false. + Inserts a single row before the given \a row in the child items of the \a parent specified. @@ -1834,6 +1837,9 @@ void QAbstractItemModel::setSupportedDragActions(Qt::DropActions actions) } /*! + \note The base class implementation of this function does nothing and + returns false. + On models that support this, inserts \a count rows into the model before the given \a row. Items in the new row will be children of the item represented by the \a parent model index. @@ -1849,11 +1855,11 @@ void QAbstractItemModel::setSupportedDragActions(Qt::DropActions actions) Returns true if the rows were successfully inserted; otherwise returns false. - The base class implementation does nothing and returns false. - If you implement your own model, you can reimplement this function if you want to support insertions. Alternatively, you can provide your own API for - altering the data. + altering the data. In either case, you will need to call + beginInsertRows() and endInsertRows() to notify other components that the + model has changed. \sa insertColumns(), removeRows(), beginInsertRows(), endInsertRows() */ -- cgit v0.12