Results 1 to 4 of 4
Thread: CodeEditor = problem
- 10-30-2009, 08:09 PM #1
Member
- Join Date
- Oct 2009
- Posts
- 8
- Rep Power
- 0
CodeEditor = problem
Hello,
I have a problem :cool: which is this:
Java Code:private void setupEditor() { QFont font = new QFont(); font.setFamily("Courier"); font.setFixedPitch(true); font.setPointSize(10); textEdit = new QTextEdit(); textEdit.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap); textEdit.setFont(font); new Highlighter(textEdit.document()); new CodeEditor(textEdit.document()); } public class CodeEditor extends QPlainTextEdit { public CodeEditor(QTextDocument textDocument)
Please help me :)
- 10-30-2009, 08:17 PM #2
Senior Member
- Join Date
- Aug 2009
- Posts
- 2,388
- Rep Power
- 14
Don't know the difference between Highlighter and CodeEditor so can't say why they behave differently. Did you write both classes yourself?
- 10-30-2009, 09:09 PM #3
Member
- Join Date
- Oct 2009
- Posts
- 8
- Rep Power
- 0
no, this is :
Code Editor Example // QT Jambi
- 10-31-2009, 07:32 AM #4
Member
- Join Date
- Oct 2009
- Posts
- 8
- Rep Power
- 0
this is my CodeEditor:
Java Code:private void setupEditor() { QFont font = new QFont(); font.setFamily("Lucida Console"); font.setFixedPitch(true); font.setPointSize(10); textEdit = new QTextEdit(); textEdit.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap); textEdit.setFont(font); new Highlighter(textEdit.document()); new CodeEditor(textEdit.document()); } public class CodeEditor extends QPlainTextEdit { public CodeEditor(QTextDocument textDocument) // public CodeEditor() { lineNumberArea = new LineNumberArea(this); blockCountChanged.connect(this, "updateLineNumberAreaWidth(Integer)"); updateRequest.connect(this, "updateLineNumberArea(QRect,Integer)"); cursorPositionChanged.connect(this, "highlightCurrentLine()"); updateLineNumberAreaWidth(0); highlightCurrentLine(); } public int lineNumberAreaWidth() { int digits = 1; int max = Math.max(1, blockCount()); while (max >= 10) { max /= 10; ++digits; } int space = 3 + fontMetrics().width('9') * digits; return space; } public void updateLineNumberAreaWidth(Integer newBlockCount) { setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); } public void updateLineNumberArea(QRect rect, Integer dy) { if (dy > 0) lineNumberArea.scroll(0, dy); else lineNumberArea.update(0, rect.y(), lineNumberArea.width(), rect.height()); if (rect.contains(viewport().rect())) updateLineNumberAreaWidth(0); } protected void resizeEvent(QResizeEvent e) { super.resizeEvent(e); QRect cr = contentsRect(); lineNumberArea.setGeometry(new QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height())); } private void highlightCurrentLine() { List<QTextEdit_ExtraSelection> extraSelections = new Vector<QTextEdit_ExtraSelection>(); if (!isReadOnly()) { QTextEdit_ExtraSelection selection = new QTextEdit_ExtraSelection(); QColor lineColor = QColor.yellow.lighter(160); QTextCharFormat format = selection.format(); format.setBackground(new QBrush(lineColor)); format.setProperty(QTextFormat.Property.FullWidthSelection.value(), new Boolean(true)); selection.setFormat(format); QTextCursor cursor = textCursor(); cursor.clearSelection(); selection.setCursor(cursor); extraSelections.add(selection); } setExtraSelections(extraSelections); } public void lineNumberAreaPaintEvent(QPaintEvent event) { QPainter painter = new QPainter(lineNumberArea); painter.setPen(new QPen(QColor.black)); painter.fillRect(event.rect(), new QBrush(QColor.lightGray)); QTextBlock block = firstVisibleBlock(); int blockNumber = block.blockNumber(); int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top(); int bottom = top + (int) blockBoundingRect(block).height(); while (block.isValid() && top <= event.rect().bottom()) { if (block.isVisible() && bottom >= event.rect().top()) { String number = String.valueOf(blockNumber + 1); painter.drawText(0, top, lineNumberArea.width(), fontMetrics().height(), Qt.AlignmentFlag.AlignRight.value(), number); } block = block.next(); top = bottom; bottom = top + (int) blockBoundingRect(block).height(); ++blockNumber; } } private class LineNumberArea extends QWidget { public LineNumberArea(CodeEditor editor) { codeEditor = editor; setParent(codeEditor); } public QSize sizeHint() { return new QSize(codeEditor.lineNumberAreaWidth(), 0); } protected void paintEvent(QPaintEvent event) { codeEditor.lineNumberAreaPaintEvent(event); } private CodeEditor codeEditor; } private LineNumberArea lineNumberArea; }
new CodeEditor(textEdit.document());
it does't appear at TextEdit
Bookmarks