On 2010-06-24, sandokan wrote:
> Mark Summerfield-4 wrote:
> > [snip]
> > 
> > Actually I meant:
> >     file = QFile(self.filename)
> >     
> >     if file.open(QIODevice::ReadOnly):
> >     ba = file.readAll() # ba is a QByteArray filled with raw bytes
> >     hexbytes = []
> >     
> >     for i in range(ba.count()):
> >         if QChar(" ") < QChar(ba[i]) < QChar(128):
> >             hexbytes.append(ba[i].toAscii())
> >             
> >         else:
> >             hexbytes.append(ba[i].toHex())
> >             # the above might need to be:
> >             # hexbytes.append(QByteArray(ba[i]).toHex())
> >             # or even:
> >             # hexbytes.append(str(QByteArray(ba[i]).toHex()))
> >     
> >     self.ui.textEditAscii1.setPlainText("".join(hexbytes))
> > 
> > Still untested though!
> 
> Hmm, this appending approach is very slow again :( Moreover, I need to be
> able to print out also non-printable ASCII characters (0-32) and not to
> show them as hex.
> However thank you for you comments, I will try to think about different
> solution...if you have any other idea then please let me know
> 
> T.

Well here's one last sketch of an idea (and this will work well no
matter how big the file).

- Create a plain QWidget and lay it out with a vertical scrollbar.
- Set the QWidget's font to be fixed width.
- Use QFontMetrics for the fixed width font to calculate how many
  characters wide the widget is and how many lines high.
- Instead of reading the entire file, just read enough to occupy the
  space available and in the QWidget's paintEvent() use drawText() to
  draw them. 
- Set the scroll bar proportional to the size of the file and how much
  can be displayed.
- If the user scrolls read in what's needed and repaint.

This approach is a lot more work but potentially it could be very fast
and also use the least amount of memory.

Good luck!

-- 
Mark Summerfield, Qtrac Ltd, www.qtrac.eu
    C++, Python, Qt, PyQt - training and consultancy
        "Advanced Qt Programming" - ISBN 0321635906
            http://www.qtrac.eu/aqpbook.html
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to