2009-05-13 1 views
0

Я делаю простое приложение Qt. Он имеет 4 экранов/страниц:Как создать линейную программу GUI

  1. Начало импорта
  2. Выберите папку для импорта изображений в
  3. принять или отклонить каждое изображение в папке, и когда изображения не осталось:
  4. «Нет изображения не осталось» и кнопку ОК.

Я не могу найти лучший способ реализовать это. Я начал с QWidget, но это быстро стало неуправляемым.

Является ли QWizard слишком ограниченным?

EDIT: часть проблемы с QWizard, похоже, всегда имеет кнопки «Назад» и «Далее». Я не хочу, чтобы они были в качестве опций в этой программе, поэтому это заставляет меня поверить, что волшебник не совсем то, что мне нужно.

+0

Почему не может быть кнопка возврата? Что, если я узнаю на экране 2, что я забыл изображение на экране 1? Мне нужно выйти из мастера и начать все заново? – jmucchiello

+0

Я был не совсем понятен - я немного изменил вопрос. Каждый раз, когда пользователь принимает или отклоняет изображение, он копируется в принятую или отклоненную папку, а затем удаляется с устройства, из которого импортируются изображения. «Назад» просто не имеет смысла. Пользователь должен принимать или отклонять каждое изображение, поэтому вперед тоже не имеет смысла. – Skilldrick

ответ

5

Я собираюсь не согласиться с использованием QWizard здесь. Это было бы довольно легко сделать, но в этом случае я думаю, что было бы проще просто использовать QStackedWidget и поменять отображаемый виджет на основе того, что вы хотите, чтобы пользователь мог это сделать. Вероятно, что-то сделано внутри QWizard, без каких-либо осложнений для запуска кнопок и перемещения назад и вперед. Вы также можете захотеть взглянуть на материал государственного аппарата, который они ищут в ближайшее время, так как приложение можно легко разделить на состояния.

+0

Я думаю, что это больше, о чем я думал - я не мог понять, как QWizard это делал, но теперь я вижу! – Skilldrick

1

here (базовый) и here являются примерами QWizards.

Вы можете сделать QWizardPages для своих экранов и добавить их в QWizard. С помощью registerField() вы можете регистрировать поля для связи между страницами.

EDIT: Я не проверял, но я думаю, вы можете контролировать расположение кнопок в QWizard с setButtonLayout

5

Я думаю, что QWizardPage является лучшим выбором.

Вы можете отключить «спину» на QWizardPage, используя setCommitPage(True).

Вам также придется переопределить nextId для «переменного» количества QWizardPages вы хотите между шагом 2 и 4.

+0

@ The downvoter: помогите объяснить? – ChristopheD

0

Создать диалог с кнопкой «Start Import» на вершине. Когда пользователь щелкает это:

заселить QFormLayout:

Макет должен иметь флажок и метка имя изображения для импорта. Я не уверен в ваших требованиях, но вы также можете отобразить миниатюру изображения.

Пользователь просто проверяет изображения, которые ему нужны.

Затем в нижней части есть кнопка «Сохранить ...». Когда пользователь нажимает на это, появляется диалоговое окно «Сохранить как». Вы сохраняете все проверенные изображения, отбрасываете остальные.

Если изображений нет, измените текст кнопки «Сохранить ...» на «ОК» и отобразите QLabel со строкой «Нет изображений слева». Вы можете переключаться между QLabel и QFormLayout с помощью QStackedWidget.

Checkout эту статью на QFormLayout: http://doc.trolltech.com/qq/qq25-formlayout.html

Опция: Избавьтесь от кнопки "Start Import". Попросите приложение автоматически заполнить QFormLayout при запуске (возможно, в конструкторе, если он достаточно быстро).

Смежные вопросы