Russian Qt Forum
Ноябрь 27, 2024, 04:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: GUI для поиска по документу  (Прочитано 5043 раз)
moskk
Гость
« : Октябрь 10, 2012, 16:12 »

приветствую.
задача: написать гуйку для отображения результатов поиска по тектстовому документу. выглядеть должно примерно так, как поиск по форуму, только попроще: несколько клеток, в каждую клетку пишется кусок предложения, в котором встретилась фраза. в центре куска искомая фраза, подсвеченая цветом. по щелчку на тексте документ должен прокручиваться до нужного места.
есть несколько идей:
1. заюзать QTextBrowser или QTextEdit. текст для отображения передавать в виде хтмл, куски, где встречается искомое слово, отделять горизонтальной чертой <hr>. ВОПРОС: как понять, в какой кусок текста (из нескольких найденных) я ткнул мышью? или в какой символ документа по счёту? или ещё как?
2. заюзать QListWidget, в его клетки впихнуть при помощи setItemWidget опять же QTextBrowser или QTextEdit. но: кол-во текста в каждом куске разное, а размер клеток в листе одинаковый - будет некрасиво. опять ВОПРОС: как ячейку листа растянуть/сжать под размер виджета в ней? и как виджет приаджастить к тексту в нём?
3. может, есть какие-то более стандартные и внятные варианты?
буду рад ответу на любой из вопросов  Улыбающийся плиз-плиз!
Записан
cya-st
Гость
« Ответ #1 : Октябрь 10, 2012, 19:17 »

http://qt-project.org/doc/qt-4.8/model-view-programming.html - тут все доступно описано
Записан
moskk
Гость
« Ответ #2 : Октябрь 11, 2012, 19:28 »

http://qt-project.org/doc/qt-4.8/model-view-programming.html - тут все доступно описано
бесспорно, но вопрос был не по архитектуре, а по конкреным приёмам работы с виджетами.
в идеале должно получиться, как на картинке в аттаче. какие бы виджеты лучше использовать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Октябрь 11, 2012, 20:23 »

qtreeview/qtreewidget
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
cya-st
Гость
« Ответ #4 : Октябрь 11, 2012, 21:26 »

http://qt-project.org/doc/qt-4.8/model-view-programming.html - тут все доступно описано
бесспорно, но вопрос был не по архитектуре, а по конкреным приёмам работы с виджетами.
в идеале должно получиться, как на картинке в аттаче. какие бы виджеты лучше использовать?

там рассматриваются конкретные примеры, реализация MVC. Что вы имеете под понятием архитектура? Архитектура приложения?
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #5 : Октябрь 11, 2012, 23:55 »

qtreeview/qtreewidget
не. нафиг.
довольно часто приходится искать потом в результатах поиска.
по этому уж лучше использовать нечто из чего можно тупо скопировать текст.
это я ка программист говорю.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Bepec
Гость
« Ответ #6 : Октябрь 12, 2012, 12:05 »

Насколько я помню, скопировать из treeWidget не составляет проблемс Улыбающийся
Записан
moskk
Гость
« Ответ #7 : Октябрь 12, 2012, 12:58 »

там рассматриваются конкретные примеры, реализация MVC. Что вы имеете под понятием архитектура? Архитектура приложения?
я имею, что я имею общее представление, что такое MVC, и что для решения моей задачи нужно некий внутренний источник данных и некий гуй для их отображения. причём гуй должен состоять из некой иерархии встроенных друг в друга виджетов.
подозреваю, что не очень чётко изложил задачу (сам еёё только недавно понял). попробую ещё раз: есть плавающее окно, в котором нужно отобразить результат поиска. поиском оно не занимается, а только отображает результат, получаемый извне. его задачи:
- попарсить результаты поиска
- передать их окну просмотрщика документов
- получить о него html-код с кусками документов, в которых искомые фрагменты подсвечены
- отобразить их в списке (с подсветкой кусков, что важно)
- а потом ещё при кликах на разных строках списка сгенерить команду просмотрщику промотать документ до нужного места.
дерево файлов в самом списке не нужно, поиск всегда по одному документу, и поиск в найденном не нужен.ъ

в итоге получилось так (аттач). для списка использован QTableWidget (QListWidget отказался отображать в себе виджеты почему-то), для айтемов - QTextBrowser (необходимо, чтобы айтем понимал html). оставшиеся вопросы:
1. как запретить выделение текста в QTextBrowser? искал - не понял. выключать его не катаит, так как он тогда становится чёрно-белым.
2. как пробросить клики на браузерах таблице? это нужно, чтобы понять, на каком айтеме мы ткнули мышью.
3. почему может не отображаться горизонтальный скролл в таблице? с вертикальным всё нормально, появляется, когда нужен, а горизонтальный не появляется никогда. в настройках у обоих стоит ScrollBarAsNeeded.

upd: почитал доки и понял, что первые два вопроса по идее побеждаются, если отнаследоваться от QTextBrowser и сделать promote. я просто раньше в билдере писал в основном, там наследование от VCL-ного класса - целая история.
но третий вопрос остаётся.
« Последнее редактирование: Октябрь 12, 2012, 13:56 от moskk » Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #8 : Октябрь 12, 2012, 16:08 »

Насколько я помню, скопировать из treeWidget не составляет проблемс Улыбающийся
Только из текущей ячейки.
А если надо получить весь результат и пройтись по нему еще раз - у вас проблемы.
поверьте, намучался. Задача возникает не часто, на если возникает - это ЖПО.

Мне в нотепаде++ нравится как реализовано.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Bepec
Гость
« Ответ #9 : Октябрь 12, 2012, 17:35 »

treeWidget -> treeView со своей моделью -> слот у модели, отдающий список содержимого -> профит.
Записан
moskk
Гость
« Ответ #10 : Октябрь 17, 2012, 14:28 »

по третьему вопросу нашлось решение: http://www.qtcentre.org/threads/51584-no-horizontal-scroll-bar-in-QTableWidget?p=231298#post231298
проблема исчезает, если в таблице более одной колонки, либо если сделать для таблицы:
Код
C++ (Qt)
tb.setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
tb.horizontalHeader()->setMinimumWidth(minwidth);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 23.