Hi ich habe eine kleine Frage:
Ich habe in einer Tabelle z.B neun Spalten. Wenn ich auf ein QTableWidgetItem klicke, das sich in Spalte 0 - 2 befindet,
sollen in dieser Reihe alle Items von 0 - 2 markiert werden. Klickt man jetzt noch(ctrl gedrückt) auf irgend ein Item, das sich in Spalte 6 - 9 befindet soll zusätzlich noch
Spalre 6 - 9 in der entsprechenden Reihe markiert werden.
Ich habe bereits eine Methode gefunden, wie ich das machen kann, aber dazu muss ich immer alles selektierten QModelIndexe in einer Schleife
durchmarschieren, was bei einer großen Selektion zu viel Zeit in anspruch nimmt...
danke
markieren von 3 spalten in QTableWidget
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: markieren von 3 spalten in QTableWidget
Ein QTableWidget hat ein selectionModel() und dieses Model hat die Funktion QItemSelectionModel::select(). Damit kann man auch mehr als ein Item selektieren
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: markieren von 3 spalten in QTableWidget
danke für die Antwort.
Das ist mir klar, ich hab eine funktionierende Lösung gefunden, nur von der Performance her kann man diese Lösung vergessen, da bei einer größeren Selection
dieser Slot ewig dauert, da er immer wieder die ganzen selektierten QModelIndexes abarbeiten muss.
Das ist mir klar, ich hab eine funktionierende Lösung gefunden, nur von der Performance her kann man diese Lösung vergessen, da bei einer größeren Selection
dieser Slot ewig dauert, da er immer wieder die ganzen selektierten QModelIndexes abarbeiten muss.
Code: Alles auswählen
Es geht um eine Tabelle mit 6 Spalten, die in 2 gedachte spalten, mit jeweils 3 spalten, geteilt wird und dann auch entsprechend selektiert werden soll.
void MyTableWidget::sel_slot()
{
qDebug() << "MyTableWidget::sel_slot() ausgelöst von signal: QTableWidget::itemSelectionChanged()";
QModelIndexList midxes = this->selectedIndexes();
for(int i = 0; i < midxes.size(); i++){
int row_num = midxes.value(i).row();
int col_num = midxes.value(i).column();
int range1, range2;
if(col_num <= 2){
range1 = 0;
range2 = 2;
}
else if(col_num <= 5){
range1 = 3;
range2 = 5;
}
QModelIndex topleft = indexFromItem(item(row_num,range1));
QModelIndex bottomright = indexFromItem(item(row_num,range2));
QItemSelectionModel* model = this->selectionModel();
QItemSelection item_sel = model->selection();
QItemSelection n_itemsel(topleft,bottomright);
item_sel.merge(n_itemsel,QItemSelectionModel::Select);
model->select(item_sel,QItemSelectionModel::Select);
}
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: markieren von 3 spalten in QTableWidget
Warum musst Du immer über alle Indices laufen? Es gibt doch genug Signale die einem sagen welche Items gerade (de)selektiert wurden. Damit kann man doch arbeiten...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: markieren von 3 spalten in QTableWidget
Ok danke, auf das hätt ich selber auch kommen können.
Jetzt benutze ich das selectionChanged(QItemSelection selected, QItemSelection deselected) Signal und arbeite mit den indexes() von selected, habe aber ein kleines Problem. Das Verhalten der Selection ist nämlich anders. Wenn ich jetzt zum Beispiel mit der Maus(durch gedrücktes ziehen) mehrere Items selektiere(ohne strg gedrückt) werden nur die einzelnen selektiert. Wenn ich strg gedrückt halte funktioniert es.
Jetzt benutze ich das selectionChanged(QItemSelection selected, QItemSelection deselected) Signal und arbeite mit den indexes() von selected, habe aber ein kleines Problem. Das Verhalten der Selection ist nämlich anders. Wenn ich jetzt zum Beispiel mit der Maus(durch gedrücktes ziehen) mehrere Items selektiere(ohne strg gedrückt) werden nur die einzelnen selektiert. Wenn ich strg gedrückt halte funktioniert es.