Создание умного QTextEdit, соориентируйте меня |
Здравствуйте, гость ( Вход | Регистрация )
Создание умного QTextEdit, соориентируйте меня |
dzyk |
13.4.2008, 18:39
Сообщение
#1
|
Студент Группа: Участник Сообщений: 21 Регистрация: 13.4.2008 Пользователь №: 148 Спасибо сказали: 0 раз(а) Репутация: 0 |
Задача:
Создание приложения на Qt - основным элементом является текстовое поле. Пользователь вводит текстовую информацию и она обрабатывается фоновым процессом, в котором с помощью регулярных выражений анализируется введенный текст. В конечном итоге пользователь видит как раскрашивается/маркируется им введенный текст, а приложение помещает куски текста в базу данных. Проблема в том, что в отличии от текстовых редакторов с подсветской синтаксиса языков, анализ введенного текста слишком сложный. Вопросы:
|
|
|
ViGOur |
13.4.2008, 20:17
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Вопросы: 1. Чтобы приложение работало быстро, тебе нужно:
2. А в чем в данном пункте собственно проблема? 3. По тому ТЗ, что ты описал, я бы выбрал QTextEdit. |
|
|
dzyk |
14.4.2008, 16:31
Сообщение
#3
|
Студент Группа: Участник Сообщений: 21 Регистрация: 13.4.2008 Пользователь №: 148 Спасибо сказали: 0 раз(а) Репутация: 0 |
ViGOur, спасибо за совет.
Проблема такая: немогу получить доступ к объекту TextEdit главного потока приложения из дочернего потока. В то время когда обращаешься к объекту, программа просто "убивается операционкой". Выкладываю код. Он основан на примере из книги Бланшета, там в разделе 18 как раз разбирают, как использовать объект главного потока. main.cpp
textwindow.h
textwindow.cpp
transactionthread.h
transactionthread.cpp
|
|
|
dzyk |
14.4.2008, 17:21
Сообщение
#4
|
Студент Группа: Участник Сообщений: 21 Регистрация: 13.4.2008 Пользователь №: 148 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ну понял я что сделал не так
вообщем объект то не создал textEdit_th= new QTextEdit; в строках кода transactionthred.cpp нужно было создать объект то, вот так:
p.s. Как же помогает переписка самого с собой |
|
|
dzyk |
14.4.2008, 17:35
Сообщение
#5
|
Студент Группа: Участник Сообщений: 21 Регистрация: 13.4.2008 Пользователь №: 148 Спасибо сказали: 0 раз(а) Репутация: 0 |
А вообще извращение создавать новые объекты QTextEdit во втором потоке?
Может лучше QString'ом оперировать? |
|
|
ViGOur |
14.4.2008, 17:53
Сообщение
#6
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
А вообще извращение создавать новые объекты QTextEdit во втором потоке? НЕ понял что ты имеешь ввиду. Может лучше QString'ом оперировать? Но единственное запомни, сигналы будут обрабатываться в том потоке, в котором создан принимающий их объект, если тебя это устраивает, то все в порядке. |
|
|
Tonal |
14.4.2008, 18:02
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
В Qt, только в главном потоке можно создавать и оперировать виджетми.
В остальных - низя. Так что передавай QString. |
|
|
dzyk |
16.4.2008, 15:23
Сообщение
#8
|
Студент Группа: Участник Сообщений: 21 Регистрация: 13.4.2008 Пользователь №: 148 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ситуация такая. Написал немного кода. Создается второй поток и через определенные интервалы времени берет текстовое содержимое из TextEdit'а главного потока. И пока пользователь набирает документ - анализирует текст, сортирует его по базам данных, а свою работу показывает изменением цвета, шрифта, (стиля). И делает это просто, вставляя кусок измененного текста в тот же TextEdit главного потока взамен существующего нераскрашеного куска....
Проблема в том, что когда документ достигает среднего размера. Копирование и вставка текста происходит с мерцанием и подрагиванием скроллера... А это ваЩЕ недопустимо. Как же быть? Неужели создавать свой класс, производный от QPaint?.... чего очень не хочется. Может посоветуете что? |
|
|
Текстовая версия | Сейчас: 1.12.2024, 9:05 |