Редактирование: The Wizard Magically Reappears

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 3: Строка 3:
by Jo Asplin
by Jo Asplin
-
'''После исчезновения в клубах дыма, с выходом Qt4, QWizard сново часть Qt. QWizard и его новый подмастерье - QWizardPage, отработавшие свое краткое время в Qt4 Solutions, и теперь насыщенные возможностями, которые сделают работу програмиста мастеров легче, чем когда либо.'''
+
'''После исчезновения в клубах дыма, с выходом Qt4, QWizard сново часть Qt. QWizard и его нвоый подмастерье, QWizardPage, отработавшие свое краткое время в Qt4 Solutions, и теперь насыщенные возможностями, которые сделают работу програмиста мастеров легче, чем когда либо.'''
__TOC__
__TOC__
-
[[Qt:Документация_4.3.2/qwizard  | QWizard]] предоставляет каркас для написания мастеров (wizard). Цель мастера - провести пользователя через процесс шаг за шагом. Сравнивая класс [[Qt:Документация_4.3.2/qwizard  | QWizard]] предоставляемый Qt 3 и класс совместимости <tt>Q3Wizard</tt> из Qt 4, новый мастер предоствляет следующие особенности:
+
[[Qt:Документация_4.3.2/qwizard  | QWizard]] provides a framework for writing wizards (also calledassistants). The purpose of a wizard is to guide the user through aprocess step by step. Compared with the [[Qt:Документация_4.3.2/qwizard  | QWizard]] class foundin Qt 3 and the <tt>Q3Wizard</tt> compatibility class of Qt 4, the newwizard provides the following features:
* '''Естественный внешний вид и поведение на всех платформах'''<br />[[Qt:Документация_4.3.2/qwizard  | QWizard]] supports four different looks &mdash; Classic (Windows 95 and X11), Modern(Windows 98 to XP), Aero (Windows Vista), and Mac (Mac OS X). By default,[[Qt:Документация_4.3.2/qwizard  | QWizard]] automatically chooses the most appropriate style for theuser's platform, but this can be overridden.<br />
* '''Естественный внешний вид и поведение на всех платформах'''<br />[[Qt:Документация_4.3.2/qwizard  | QWizard]] supports four different looks &mdash; Classic (Windows 95 and X11), Modern(Windows 98 to XP), Aero (Windows Vista), and Mac (Mac OS X). By default,[[Qt:Документация_4.3.2/qwizard  | QWizard]] automatically chooses the most appropriate style for theuser's platform, but this can be overridden.<br />
Строка 17: Строка 17:
In this article, we will focus on the control and data flow aspectsof wizards: What happens when the user navigates between pages, whenis the user allowed to navigate between pages, and how do we accessdata on which to base these decisions?
In this article, we will focus on the control and data flow aspectsof wizards: What happens when the user navigates between pages, whenis the user allowed to navigate between pages, and how do we accessdata on which to base these decisions?
-
===Пример "Книга заказов парома"===
+
===A Ferry Booking Example===
-
Мы будем использовать мастер заказов паромной переправы, чтобы проилюстрировать различные концепции нового каркаса мастеров. Пять используемых страниц, умышленно сделаны очень простыми: Страница для выбора даты отплытия, страница для ввода имени единственного пассажира, страница для выбора типа каюты, страница для указания госномера автомобиля, в случае если вы хотите перевести ваш автомобиль и, наконец, страница ввода номера кредитной карты.
+
We will use a ferry trip booking wizard to illustrate a number ofthe concepts of the new wizard framework. The five pages involved areintentionally very simple: A page for selecting a sailing date, apage for entering the name of a single passenger, a page for choosinga cabin type, a page for specifying a car registration number in caseyou want to bring your car, and finally a page for entering a creditcard number.
-
Следующая диаграмма изображает возможные пути навигации с помощью мастера:
+
The following diagram depicts the possible navigation paths throughthe wizard:
[[Image:qq22-ferryexample.png|center]]
[[Image:qq22-ferryexample.png|center]]
-
Исходная реализация выглядит подобно этой:
+
The initial implementation looks like this:
<source lang="cpp-qt">
<source lang="cpp-qt">
class BookingWizard : public QWizard
class BookingWizard : public QWizard
Строка 70: Строка 70:
}
}
</source>  
</source>  
-
Следующий фрагмент кода показывает как открыть мастер и собрать результаты из него:
+
The following code snippet shows how to open the wizard and collectresults from it:
<source lang="cpp-qt">
<source lang="cpp-qt">
BookingWizard wizard;
BookingWizard wizard;
Строка 80: Строка 80:
}
}
</source>  
</source>  
-
Обратите внимание, как класс <tt>BookingWizard</tt> должен хранить указатели на виджеты ввода всех страниц для того, чтобы реализовать открытый интерфейс. Кроме того, если страница нуждается в доступе к виджету ввода с другой страницы, то указатель на виджет ввода должен быть передан обоим страницам.
+
Notice how the <tt>BookingWizard</tt> class has to keep pointers to theinput widgets of all the pages in order to implement its publicinterface. In addition, if a page needs to access an input widget ofanother page, the pointer to the input widget would have to be passedto both pages.
 +
 
===Регистрация и использование полей===
===Регистрация и использование полей===
Строка 136: Строка 137:
registerField("passenger", passenger);
registerField("passenger", passenger);
</source>  
</source>  
-
А что со свойством и сигналом изменения? Они могут быть переданы, как третий и четвертый аргументы в <tt>registerField()</tt>, но опуская их (в действительности передавая нулевой указатель), мы говорим [[Qt:Документация_4.3.2/qwizardpage  | QWizardPage]], что мы хотели бы использовать здесь значение по умолчанию. [[Qt:Документация_4.3.2/qwizardpage  | QWizardPage]] знает о наиболее общих типах виджетов ввода. Так как [[Qt:Документация_4.3.2/qlineedit  | QLineEdit]] из числа таких счастливчиков (и подкласс тоже), свойство <tt>text</tt> и сигнал <tt>textChanged()</tt> используются автоматически.
+
What about the property and the change signal? These could have beenpassed as the third and fourth arguments to <tt>registerField()</tt>, butby omitting them (effectively passing null pointers instead), we tell[[Qt:Документация_4.3.2/qwizardpage  | QWizardPage]] that we would like to use default values here.[[Qt:Документация_4.3.2/qwizardpage  | QWizardPage]] knows about the most common types of input widgets.Since [[Qt:Документация_4.3.2/qlineedit  | QLineEdit]] is among the lucky ones (a subclass would alsodo), the text property and the <tt>textChanged()</tt> signal isautomatically used.
-
В качестве альтернативы, мы могли бы добавить [[Qt:Документация_4.3.2/qcalendarwidget  | QCalendarWidget]] в список распознаваемых типов полей [[Qt:Документация_4.3.2/qwizard  | QWizard]]'а, раз и на всегда:
+
Alternatively, we could have added [[Qt:Документация_4.3.2/qcalendarwidget  | QCalendarWidget]] to[[Qt:Документация_4.3.2/qwizard  | QWizard]]'s list of recognized field types once and for all:
<source lang="cpp-qt">
<source lang="cpp-qt">
setDefaultProperty("QCalendarWidget", "selectedDate", SIGNAL(selectionChanged()));
setDefaultProperty("QCalendarWidget", "selectedDate", SIGNAL(selectionChanged()));
</source>
</source>
-
===Проверяйте, пока это не слишком поздно===
+
===Validate Before It's Too Late===
-
Если какая-то информация в мастере не верна или недопустима (например, неуказано имя пассажира), она, в данный момент, не обнаруживается до тех пор пока мастер небудет закрыт. Мастер затем должен быть вновь открыт, и вся информация, включая поля, которые были не верны в первый раз, должны быть введены снова. Это очень утомительный, подверженный ошибкам, и повторяющийся процесс, который делает бессмысленной цель использования мастера.
+
If some information in the wizard is invalid or inconsistent (e.g.,the passenger name is empty), it is currently not detected untilafter the wizard is closed. The wizard would then have to bereopened, and all the information, including the field that was incorrectin the first place, would have to be entered again. This is a verytedious, error-prone, and repetitive process that defeats thepurpose of using a wizard.
When hitting '''Next''' or '''Finish''' to accept the currentstate of a wizard, the user would intuitively expect the result to beacceptable. We would like errors to be caught and dealt with as earlyas possible.
When hitting '''Next''' or '''Finish''' to accept the currentstate of a wizard, the user would intuitively expect the result to beacceptable. We would like errors to be caught and dealt with as earlyas possible.
Строка 192: Строка 193:
===Пропуск страницы в середине===
===Пропуск страницы в середине===
-
Сейчас мы собираемся поддержать другую особенность паромной компании: по субботам автомобили на паром не допускаются. Если пользователь выбирает субботу для отплытия, страница '''Car''' (Автомобиль) пропускается полностью.
+
We are now going to support another peculiarity of the ferry company:Cars are not allowed on Saturdays. If the user has selected Saturdayas the sailing date, the '''Car''' page is skipped altogether.
[[Image:qq22-skipcar.png|center]]
[[Image:qq22-skipcar.png|center]]
Строка 228: Строка 229:
</source>  
</source>  
Use <tt>nextId()</tt> with care to avoid cycles and non-existent page IDs.Fortunately, [[Qt:Документация_4.3.2/qwizard  | QWizard]] will warn about these cases at run-time.
Use <tt>nextId()</tt> with care to avoid cycles and non-existent page IDs.Fortunately, [[Qt:Документация_4.3.2/qwizard  | QWizard]] will warn about these cases at run-time.
 +
===Пропуск последней страницы===
===Пропуск последней страницы===

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!


Шаблоны, использованные на текущей версии страницы: