Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Error at using setTextCursor with Scroll.
Robot last edited by
Now I develop some Code editor, I have a big problem.
I am using Qt4.
The problem is occur at using Function of Highlighter current line with scrolling the QtextEdit.
I used this highlighting code : http://www.qtcentre.org/threads/45634-QPlainTextEdit-highlight-selected-line
and I made thread for Code editor and inside of thread use this function
the error message is differ at some time.
first thing is :
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xa975cb40]
0xb6ec3fb1 in QTextLine::cursorTox(int*, QTextLine::Edge) const()
second thing is :
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
dequeue_pending_request: Assertion '!xcb_xlib_unknown_req_in_deq' failed.
Error occur when change position of cursor with scrolling at gui.
sometimes if i don't use scroll with short code, this problem occured.
I don't know why this problem occur at this time.
I want to get a hint for solve this problem.
Please give me a you mention!
@Robot SIGSEGV is usually caused by a dangling/null pointer. Check this:
QTextCursor cursor(_pEditor->findBlockByLineNumber(line)); _pEditor->setTextCursor(cursor);
is _pEditor null or dangling pointer?
Do I understand you correctly that you have a second thread where you're handling your editor? If so then: DON'T DO THAT! All GUI related Qt classes (everything derived from QWidget) are not thread safe and should not be used outside of the main thread!
Robot last edited by
Thank for reply it.
_pEditor is not a dangling/null pointer.
this pointer is class that inherited QplainTextedit.
about your comment, I use second thread for doing coed that user made with _pEditor(QplainTextedit) and then use GUI classes for user.
I want to give for user what is the line that currently doing at made _pEditor.
so every execute of code, I change the current line with setTextCursor and Highlighter.
but you said to me, I can't use GUI classes outside of main thread, How can I Highlight current line?!
@Robot "_pEditor is not a dangling/null pointer" - how did you verify this? As I said SIGSEGV is usually caused by/null/dangling pointers - you should debug your app to find out what happens when it crashes.
To your second question: your second thread should not modify the UI, instead it should emit a signal with needed parameters. In your GUI thread connect this signal to a slot where you then update your UI.