Hello,

I have a problem which is this:

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;
    }

and the problem is there:

new CodeEditor(textEdit.document());

it does't appear at TextEdit

Kjiu

Recommended Answers

All 9 Replies

thank's but I don't know how to write this code.. can you write my code

please!!

use method (from documentation of package mentioned above)

void setDocument(QTextDocument document)
Makes document the new document of the text editor.

sorry for that, I am beginner of learning Java

where I must put :

void	setDocument(QTextDocument document)
new Highlighter(textEdit.document());
        new CodeEditor(textEdit.document());
    }
    public class CodeEditor extends QPlainTextEdit
    
    {
    	public CodeEditor(QTextDocument parent)
public class CodeEditor extends QPlainTextEdit
    {
    	public CodeEditor(QTextDocument textDocument) //textDocument as parameter in constructor
    //	public CodeEditor()
        {
// here
            setDocument(textDocument); //  the same textDocument as argument in method setDocument(

            lineNumberArea = new LineNumberArea(this);
            // .......

Learn Passing Information to a Method or a Constructor
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html

hmmm the error is:

QPlainTextEdit::setDocument: Document set does not support QPlainTextDocumentLayout

private void setupEditor() 
    {
        QFont font = new QFont();
        font.setFamily("Arial");
        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()
        {
    	    setDocument(textDocument);
            lineNumberArea = new LineNumberArea(this);

Summary of conversation.
I know, You want to use the package trolltech to create applications.
As a beginner java programmer you cetainly think "this is the shortest way to achieve rapid results".
As you can see, the use of the package trolltech requires knowledge of two things: first - knowledge of java, a second -knowledge of the specific package trolltech. I think that I have some basic knowledge on java, but I do not know trolltech package.
I can help with the java language problems, but not with a specific package.
For this, I recommend systematic learning the Java language and the Java API, that allows you to create programs with a greater perspective. You can do this, as I did and still do, being self-taught.
See you later on Dani Web pages.

quuba

run:
QPlainTextEdit::setDocument: Document set does not support QPlainTextDocumentLayout
BUILD SUCCESSFUL (total time: 8 seconds)

public static void main(String args[]) {
        QApplication.initialize(args);
        //
        QFont font = new QFont();
        font.setFamily("Lucida Console");
        font.setFixedPitch(true);
        font.setPointSize(30);
        QTextEdit textEdit = new QTextEdit();
        // textEdit.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap);
        textEdit.setFont(font);
        textEdit.insertHtml("<H1><HR WIDTH=\"100%\">Applet HTML Page<HR WIDTH=\"100%\"></H1><P>aaaaaaaaaaaa</P>");

        new CodeEditor(textEdit).show();
        QApplication.exec();
    }
public class CodeEditor extends QTextEdit {

//![constructor]
    public CodeEditor(QTextEdit textEdit) {
        super.setDocument(textEdit.document());

        //lineNumberArea = new LineNumberArea(this);

        //blockCountChanged.connect(this, "updateLineNumberAreaWidth(Integer)");
        //updateRequest.connect(this, "updateLineNumberArea(QRect,Integer)");
        cursorPositionChanged.connect(this, "highlightCurrentLine()");

        //updateLineNumberAreaWidth(0);
        highlightCurrentLine();

        setWindowTitle("Code Editor Example");
        setWindowIcon(new QIcon("classpath:com/trolltech/images/qt-logo.png"));
    }

textEdit is type of QTextEdit then
CodeEditor must extend QTextEdit
commented lines does not work in case QTextEdit.

thanks, but I wanted to have Highlighter and CodeEditor.

I want to be like this :

http://i37.tinypic.com/esixyh.png

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.