Название: Разработка собственного IDE. Анализ кода. Отправлено: alexmal от Октябрь 19, 2013, 12:03 Столкнулся с проблемой. нужно сделать анализ кода и определить, находиться ли курсор между { }.
Если находиться, то выполнить определенное действия. Конечно можно смотреть в цикле до и после курсора, но мне кажется, что это не оптимально и будет тормозить Gui. Класс который отвечает за текстовый редактор наследуется от QPlainTextEdit. Название: Re: Разработка собственного IDE. Анализ кода. Отправлено: Bepec от Октябрь 19, 2013, 13:33 Достойная идея :)
Ну как вариант тормозить такое не будет :) Название: Re: Разработка собственного IDE. Анализ кода. Отправлено: Hrundel от Октябрь 20, 2013, 13:09 У QCursor есть событие cursorPositionChanged (). Вот при каждом событии и надо проверять что справа, что слева.
Проблема только в количестве проверяемых знаков и их нахождении в строках. Если "{" стоит где-то в строке 12, а "}" в строке 1234, и в каждой строке по 200-300 знаков, то игра, наверное, не стоит свеч. Однако, можно попробовать написать так, что бы курсор "помнил" позиции знаков "{" и "}" и сверял свою. Просто написать два вектора один для "{", другой для "}" Правда, в этом случае придется при каждом редактировании (например при нажатии клавиши "back") пересчитывать позиции для всех "{" и "}" (тупая арифметика) и проверять их на удаление (вруг этот "back" удалил знак из позиции, значит его надо и из вектора удалить). Но это будет значительно проще чем вариант с проверкой всех строк. По скорости будет в разы быстрее. Название: Re: Разработка собственного IDE. Анализ кода. Отправлено: Sasha от Ноябрь 01, 2013, 18:11 Столкнулся с проблемой. нужно сделать анализ кода и определить, находиться ли курсор между { }. Моё мнение, что если предполагается что-то навороченое, то лучше сразу задуматься о переносе всего анализа в отдельный поток, а то будет как в MSVisualStudio2010 (с другими кроме 6.0 не сталкивался), где при определённой сложности кода, начинает тормозить даже простое перемещение курсора, не говоря уже о редактировании. создаётся впечатление, что весь анализ работает в том же потоке что и GUI (если не так, то я вообще не знаю что это такое).Если находиться, то выполнить определенное действия. Конечно можно смотреть в цикле до и после курсора, но мне кажется, что это не оптимально и будет тормозить Gui. Класс который отвечает за текстовый редактор наследуется от QPlainTextEdit. Чтобы в фоновом потоке не начинать анализ всего текста при каждой модификации, можно перепосылать все события относящиеся к редактированию текста из основного потока в этот фоновый. |