Защо е толкова бавен QSyntaxHighlighter-а?
-
Здравейте отново,
Имам един текстов редактор (QTextBrowser) чиито текст се оцветява чрез QSyntaxHighlighter. Когато текста е много голям оцветяването става дразнещо бавно. В допълнение за удобство съм направил като се маркира една дума и се натисне едно бутонче да оцвети всички такива дум със жълт фон. Ако текста е много голям чакам няколко секунди докато ги оцвети и още толкова докато махне оцветяването. Това нормално ли е или нещо бъркам някъде?
Под Линукс, в Kate подобно нещо става светкавично. -
Здравей,
не съм работил с този клас, но ако споделиш малко код може да измислим, защо се получава така. Също може да пробваш да разгледаш кода на Kate.
-
Конкретен пример не мога да дам. Мога цялата програмка да изпратя. Може би по пощата?
П.П. Имам някакъв проблем с форума - постоянно ме изхвърля. Като направя някакво действие и ми казва, че трябва първо да се логна, а аз съм логнат. Започвам да натискам F5 и нещата се оправят след няколко рефреша на страницата. После пак се скапва и пак F5 ги оправя.
-
Бих ти предложил, нещо което направиха и в Qt Craetor. Изнеси оцветяването в отделна нишка. С "QtConcurrent":http://developer.qt.nokia.com/doc/qt-4.8/threads-qtconcurrent.html би трябвало да стане лесно и бързо :)
-
С отделна нишка не съм пробвал, защото не виждам как това ще реши проблема със скоростта.
Имам един текстов редактор, който оцветява текста. Самия текст е подобна на асемблер програма. Може да достигне хиляди редове. Самия текст го осветява мигновено в смисъл, че като направя копи-пейст на даден фрагмент, без значение колко е голям, той се оцветява мигновено. Имам едно бутонче което по същата технология оцветява потребителски избрания (маркиран) текст със жълт фон за да се откроява. Маркирам например думата label, натискам бутончето и всички думи label стават със жълт фон. Нещо такова. Само че това става много бавно. Ако са няколко хиляди реда, става за няколко секунди. През това време програмата е блокирала и нищо не може да се прави.
Ако го отделя в друга нишка, ще постигна само това, че няма да ми забива програмата. Пак ще си чакам докато ми оцвети думите. А на мен чакането ми е дразнещото, а не забиването на програмата.
Не знам защо при пействане на текст той се оцветява веднага, а при другото се чака толкова много. Все пак си мисля че бъркам нещо.
Правя следното: копирам целия текст - 4000 ред, изтривам го, а после го пествам. Показва се почти веднага - след 1-2 сек., напълно оцветен. В същото време ако реша да оцветя една дума и чакам над 8 секунди...
8 секунди са голямо чакане, дори да е в друга нишка.