PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu QTable und QSelection



Kirsche
18-11-2005, 12:26
Hallo Leute,

ich möchte mit "Select All" eine komplette Tabelle auswählen, damit der Benutzer den Inhalt in die Zwischenablage kopieren kann, ohne dass er selber alles in der Tabelle markieren muss.
Das Markieren klappt auch ohne Probleme (es wird alles blau). Wenn der Inhalt anschließend kopiert werden soll, wird höchstens eine Zahl kopiert, wenn überhaupt. Ich habe es auch mit QSelection versucht, aber auch damit klappt das Kopieren nicht.

Hier ist der Code:

void MyWidget::slotCopy()
{
// copy selection into a string, rows separated by newline characters, columns by tab characters

QTableSelection selection = table->selection( table->currentSelection() );
QString s;

for( int i = 0; i < selection.numRows(); i++ )
{
if( i > 0 )
{
s = s + "\n";
}

for( int j = 0; j < selection.numCols(); j++ )
{
if( j > 0 )
{
s = s + "\t";
}

s = s + table->text( selection.topRow() + i, selection.leftCol() + j );
}
}

// copy data to clipboard
QApplication::clipboard()->setText( s );
}


void MyWidget::slotSelectAll()
{
//table->selectCells( 0, 0, table->numRows() - 1, table->numCols() - 1 );

QTableSelection selection( 0, 0, table->numRows() - 1, table->numCols() - 1 );

table->addSelection( selection );
}

Wenn ich mit der Maus einen Bereich in der Tabelle auswähle, kann ich diesen anschließend auch ohne Probleme kopieren.

Was mache ich falsch?

Vielen Dank,

anda_skoa
18-11-2005, 18:36
Wie sind denn die Werte der Selection in slotCopy?

Ist die Selection active?

Ciao,
_

Kirsche
18-11-2005, 21:32
Hallo anda_skoa,

die Werte der Selection stehen auf 1 (was total falsch ist).

Die Selection müsste aktiv sein, da ich sie mit
QTableSelection selection( 0, 0, table->numRows() - 1, table->numCols() - 1 );
erzeuge. Das reicht angeblich aus.

Im Slol slotSelectAll() sind die Werte der Selection ok. Sie wird nur anschließend nicht als gültige Selection erkannnt.

Schöne Grüße,

anda_skoa
19-11-2005, 15:39
Probier mal die aktuelle Selection zu nehmen und dann mit init() und expandTo auf die neuen Werte zu setzen.

Ciao,
_

Kirsche
20-11-2005, 12:48
Hallo anda_skoa,

ich habe es in meiner Select-Funktion gemacht, aber das klappt nicht. In der anderen Funktion kenne ich diese Werte nicht, darum kann ich das nicht machen. Außerdem soll die Funktion ja auch funktionieren, wenn der Benutzer etwas selber auswählt.

Das Problem liegt, glaube ich, darin, dass meine gesetzte Selection nicht als aktuelle erkannt wird.

Schöne Grüße,

Kirsche
20-11-2005, 13:38
Hallo anda_skoa,

ich glaube, ich weiß nun ungefähr, wo das Problem liegt, aber nicht, wie ich es beheben kann.
Das Problem ist, dass die neue Selection hinzugefügt wird und nicht die alte ersetzt. Obwohl ich den SelectionMode auf Sigle gestellt habe, bekomme ich mehrere Selections. Die ich mit selectAll ausgewählt habe, ist dabei leider nicht die aktuelle. Da ich mindestens einmal irgendeine Zelle der Tabelle anklicke, um das Kontextmenü zu erhalten, ist diese Zelle dann die aktuelle Selection, die currentSelection zurückliefert. Ich brauche also eine Möglichkeit, die dafür sorgt, dass es keine andere Selection als meine gerade ausgewählte gibt.

Schöne Grüße,

anda_skoa
20-11-2005, 14:21
Ich würde eher sagen, daß Single Selection das Problem ist, weil die durch den Mausklick ausgelöste Selection dann deine Codegesteuerte ersetzt.

Ciao,
_

Kirsche
20-11-2005, 18:04
Hallo anda_skoa,

zuerst hatte ich es so gelassen, wie es war (also nicht auf single gesetzt). Damit klappte es auch nicht. Dann habe ich viele Selections, aber meine Gesamt-Selection ist nicht die aktuelle.

Schöne Grüße,

anda_skoa
20-11-2005, 20:29
Alle Selections vereinigen?

Ciao,
_

Kirsche
20-11-2005, 22:21
Hallo anda_skoa,

wie geht das?

Schöne Grüße,

anda_skoa
20-11-2005, 22:29
Ich dachte an alle Selections durch gehen und sich die minimum und maximum Werte merken und damit eine neue Selection erzeugen.

Ciao,
_

Kirsche
21-11-2005, 00:18
Hallo anda_skoa,

das Problem ist, dass ich alte Selections irgendwie nicht gelöscht bekomme. Selbst wenn ich remove oder clear benutze, klappt es nicht richtig.

Schöne Grüße,

anda_skoa
21-11-2005, 18:59
Hmm.

Dann hab ich leider gerade keine Ideen mehr.
QTable hab ich selber noch nie benutzt.

Ciao,
_

Kirsche
22-11-2005, 13:42
Hallo anda_skoa,

trotzdem danke für deine Mühe. Ich werde dann wohl noch ein bisschen herumprobieren.

Schöne Grüße,