0

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

2
Contributors
9
Replies
10
Views
7 Years
Discussion Span
Last Post by kjiu
-1

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

please!!

0

use method (from documentation of package mentioned above)

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

Edited by quuba: n/a

0

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)
0
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

Edited by quuba: n/a

0

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);
0

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

0

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.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.