Как мне добиться макета, похожего на поиск картинок Google в QT (PyQT)? - PullRequest
3 голосов
/ 01 июля 2010

Я новичок в QT.Я использую PyQT для разработки GUI в своем проекте.Я хочу добиться этого макета в моем приложении.Это приложение ищет изображения из базы данных изображений.Макет поиска картинок Google идеально подходит для моих целей.

альтернативный текст http://img821.imageshack.us/img821/8379/window2.png

Я слежу за книгой "Быстрое программирование графического интерфейса на Python и Qt" и знаком с макетами.Я думаю, мне нужно использовать макет сетки с каждым изображением результата в каждом поле сетки.& использовать вертикальное расположение (image, Qlabel, Qlabel) внутри каждого поля сетки.

Вот некоторые проблемы, с которыми я сталкиваюсь.

  1. Важно, что я не могудля отображения изображения.Какой элемент управления / виджет мне нужен?Я не могу найти ничего похожего на PictureBox из .NET

  2. Как мне отделить эти результаты изображения с фиксированным зазором, как на изображении?Я использую горизонтальные и вертикальные проставки, но это не работает?

  3. Как установить QLabel активным (как гиперссылка).Я не хочу открывать URL.Просто текст должен быть кликабельным.Так что, когда пользователь нажимает на ссылку.Я могу показать больше информации (например, следующий набор результатов, когда он нажимает на номер следующей страницы, или новое окно с изображением в полном размере, когда пользователь нажимает на «просмотр»). Есть ли у нас какой-то новый вид контроля для этого?

  4. Это еще один важный вопрос.Я покажу номера страниц результатов (как показано на рисунке) и предположим, что они кликабельны.Как загрузить новые page результатов?Я имею в виду, что эквивалентно page в QT?

  5. Как вы можете догадаться.Это определенно не будет первой страницей GUI.Первая страница будет точно такой же, как http://google.com (большой логотип и текстовое поле с кнопкой под ней).когда пользователь нажимает кнопку поиска.Эта страница будет отображаться.Опять тот же вопрос.Как изменить страницы?

Пожалуйста, дайте список элементов управления, которые мне понадобятся для этого.Скажи мне, если я чего-то не знаю.

Ответы [ 2 ]

15 голосов
/ 01 июля 2010

1/2 .Для отображения изображений и меток используйте QListWidget с режимом просмотра, установленным в QListView :: IconMode.Однако, если вам нужно настроить отображение сверх того, что может предоставить API QListWidget / QListWidgetItem, вам нужно будет создать свой собственный QAbstractListModel и использовать с ним стандартный QListView.Убедитесь, что прочитали учебник по Qt для модели / вида .

Что касается интервалов между изображениями, проверьте свойство spacing в представлении списка.

Вот пример из файлового менеджера KDE Dolphin: Dolphin's icon mode

3. Используйте обычный QLabel, но задайте для содержимого href.

Пример:

edit: К сожалению, из ваших тегов видно, что вы используете PyQt, ниже приведен код C ++, но он должен быть аналогичен тому, что вы делаете в python. 4. Ну, так как вы используете модель / вид, зачем вообще иметь номера страниц?Пользователь просто сможет прокрутить вид, и будет показано больше картинок.Это, безусловно, самое простое решение, так как вам не нужно ничего делать, когда вы настроили M / V!

Однако, если вы действительно хотите показывать номера страниц, это потребует дополнительной работы в вашей модели.Например, отслеживайте «текущую страницу» в модели и разрешайте доступ только к изображениям на «текущей странице».Затем в вашем слоте, подключенном к сигналу linkActivation (), скажите модели сменить страницу.Я не буду вдаваться в подробности, поскольку это серьезно нарушает всю идею модели / вида.«Правильный способ» сделать это - создать подкласс QListView и добавить поддержку разбиения на страницы, но, как я уже сказал, почему бы не использовать полосы прокрутки?При этом производительности не будет.

5. Используйте QStackedWidget , добавьте к нему все свои "страницы", затем вызовите setCurrentIndex /Виджет (), необходимый для переключения страниц.

Мысли : Кажется, вы очень привержены клонированию внешнего вида, поведения и поведения поиска картинок Google, что хорошо, но GoogleПоиск изображений - это веб-приложение, использующее парадигмы взаимодействия, которые сильно отличаются от обычных приложений для настольных компьютеров (ссылки, страницы и т. Д.).Предположительно вы разрабатываете настольное приложение, и, пытаясь эмулировать поведение веб-приложения, вы столкнетесь с трудностями, поскольку API просто не предназначен для поддержки такого рода взаимодействий.Безусловно, это выполнимо, но вы получите свою работу за вас.

Если вы крайне хотите придерживаться стиля веб-взаимодействия, почему бы не кодировать свое приложение в javascript и HTML ибросить его в QWebView ?

3 голосов
/ 01 июля 2010

Попробуйте использовать QListWidget с viewMode, установленным в IconMode. Это должно сделать все для вас. НО, если вам нужно настроить отображение данных, используйте QListView со своей собственной / стандартной моделью и собственным делегатом для рисования

...