Best choice for a long String GUI handling?
-
I need to show information in my GUI. This is a very long String (a chromosome's nucleotid sequence: AGGCTATGCA....), thounsands of characters.
Also, I need to show several of these Strings aligned one under the other:CHROMO 1 | ACGGTACCTAGAGCTTA
CHROMO 2 | ATGGTACCTAGAGCTTA
(...)The user should select a column (He can select a "letter" position, the full column).
Whats the best Widget to show this long information and make some basic manipulation (select columns, replace some "letter" in a sequence..).
Thank you for your advices.
-
Hi,
for column selection I suggest you to use TableWidget or TreeWidget (depending of your app architecture you could use Views instead of Widgets).
-
Hi mcosta, thank you for your advice.
I ve already tried with my own TableView, but It causes a laggy performance. Maybe Tables are not designed for a such function, included TableWidget, isnt? TreeWidget is faster? I dunno if TreeWidget provides a confortable navigation for so long String. Mmm
-
Use a SimpleText inside a View that scrolls? The SimpleText's QDocument will tell you what index (which you can convert to column with a little math) of the text a mouse click is in. Set the layout width of the Document so that it wraps at the length of the longer sequence. Sorry, I don't have the details.
Isn't there some other open source code that displays aligned sequences, from which you can get ideas?
-
Heya bootchk, and ty for your reply.
I've not understood what you mean with QDocument. Maybe several QTextEdit inside a QWidget, is that?
-
Yes.
(Sorry for the confusion. I use a QGraphicsScene. I should have said QGraphicsTextItem or QTextEdit instead of "simple text".) Both QGTI and QTextEdit are similar: they have a document() method to get the QTextDocument. That has a documentLayout() method to get a QTextLayout. That has a lineForTextPosition() method to get a line (at a cursor position). And so forth, you can determine the line and "column" in that line, where the user puts the visual cursor, or even using mouse event coords (as I recall.) The object model of the various classes (Document, Layout, etc) is not easy to understand, but it is not unusual, it has been used for a long time.
-
Ok, I use now a QTextEdit. I thought It's a better idea use just one QTextEdit, and every line (row) will be occuped for a chromosome. I setted Vertical Scroll as "always", but I cannot force an String to occupe only one line.
EDIT------
Ok, now I use lineWrapMode = no wrap.
My problem now is: how to set a new line: chromosomes are now written at the same line.
*Anyway: * QTextEdit is still low performance when I load more than 10 - 12 chromosomes. Some others applications, even if they seem a bit "old" in terms of GUI, can move this amount of data. Maybe another Widget faster?