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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разработка собственного IDE. Анализ кода.  (Прочитано 3215 раз)
alexmal
Гость
« : Октябрь 19, 2013, 12:03 »

Столкнулся с проблемой. нужно сделать анализ кода и определить, находиться ли курсор между {  }.
Если находиться, то выполнить определенное действия. Конечно можно смотреть в цикле до и после курсора,
но мне кажется, что это не оптимально и будет тормозить Gui. Класс который отвечает за текстовый редактор наследуется от QPlainTextEdit.
Записан
Bepec
Гость
« Ответ #1 : Октябрь 19, 2013, 13:33 »

Достойная идея Улыбающийся

Ну как вариант тормозить такое не будет Улыбающийся
Записан
Hrundel
Гость
« Ответ #2 : Октябрь 20, 2013, 13:09 »

У QCursor есть событие cursorPositionChanged (). Вот при каждом событии и надо проверять что справа, что слева.
Проблема только в количестве проверяемых знаков и их нахождении в строках. Если "{" стоит где-то в строке 12, а  "}" в строке 1234, и в каждой строке по 200-300 знаков, то игра, наверное, не стоит свеч.
Однако, можно попробовать написать так, что бы курсор "помнил" позиции знаков "{" и "}" и сверял свою. Просто написать два вектора один для "{", другой для "}"
Правда, в этом случае придется при каждом редактировании (например при нажатии клавиши "back") пересчитывать позиции для всех "{" и "}" (тупая арифметика) и проверять их на удаление (вруг этот "back" удалил знак из позиции, значит его надо и из вектора удалить). Но это будет значительно проще чем вариант с проверкой всех строк. По скорости будет в разы быстрее.
« Последнее редактирование: Октябрь 20, 2013, 13:16 от Hrundel » Записан
Sasha
Гость
« Ответ #3 : Ноябрь 01, 2013, 18:11 »

Столкнулся с проблемой. нужно сделать анализ кода и определить, находиться ли курсор между {  }.
Если находиться, то выполнить определенное действия. Конечно можно смотреть в цикле до и после курсора,
но мне кажется, что это не оптимально и будет тормозить Gui. Класс который отвечает за текстовый редактор наследуется от QPlainTextEdit.
Моё мнение, что если предполагается что-то навороченое, то лучше сразу задуматься о переносе всего анализа в отдельный поток, а то будет как в MSVisualStudio2010 (с другими кроме 6.0 не сталкивался), где при определённой сложности кода, начинает тормозить даже простое перемещение курсора, не говоря уже о редактировании. создаётся впечатление, что весь анализ работает в том же потоке что и GUI (если не так, то я вообще не знаю что это такое).
Чтобы в фоновом потоке не начинать анализ всего текста при каждой модификации, можно перепосылать все события относящиеся к редактированию текста из основного потока в этот фоновый.
« Последнее редактирование: Ноябрь 01, 2013, 18:15 от Sasha » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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