qtforum.de Foren-Übersicht

QtWikiNeu: Zum Wiki  Qt-DocsQt-Dokumentation  Qt-PagesAndere Seiten zu Qt   
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[FAQ] QTableWidget Tipps und Tricks, Delegates

 
Neues Thema eröffnen   Neue Antwort erstellen    qtforum.de Foren-Übersicht -> FAQ - Qt Programmierung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
FlorianBecker



Anmeldedatum: 02.12.2004
Beiträge: 1213
Wohnort: Alzey

BeitragVerfasst am: Mi Aug 24, 2005 9:00    Titel: [FAQ] QTableWidget Tipps und Tricks, Delegates Antworten mit Zitat

Was ist ein QTableWidget?
Das QTableWidget ist in dem item/model based System von Qt4 eine Tabelle, die Item basiert viele Zellen verwaltet. Ein einfaches QTableWidget mit 5 Spalten und 20 Zeilen könnte so aussehen:

Code:
QTableWidget *table = new QTableWidget( 5, 20, this );
layout -> addWidget( table );


Wie ändere ich die Header in einem QTableWidget?
Mit einer Liste:
Code:
QStringList hheader;
hheader << tr( "Oben 1" ) << tr( "Oben 2" ) << tr( "Oben 3" ) << tr( "Oben 4" ) << tr( "Oben 5" );
table -> setHorizontalHeaderLabels( hheader4 );
QStringList vheader;
vheader << tr( "Links 1" ) << tr( "Links 2" ) << tr( "Links 3" ) << tr( "Links 4" );
...
table -> setVerticalHeaderLabels( vheader );


Pro Feld, zur Laufzeit - oberer Header:
Code:
table -> setHorizontalHeaderItem( 0, new QTableWidgetItem( tr( "Oben 1" ) ) );


Pro Feld, zur Laufzeit - linker Header:
Code:
table -> setVerticalHeaderItem( 0, new QTableWidgetItem( tr( "Links 1" ) ) );


Wie erstelle ich eine CheckBox?
Code:
QTableWidgetItem *item = new QTableWidgetItem( tr( "Checkbox" ) );
item -> setFlags( Qt::ItemIsUserCheckable );
// Geklickt
item -> setCheckState( Qt::Checked )
// Nicht geklickt
item -> setCheckState( Qt::Unchecked )


Was sind Delegates und wie erstelle ich eine ComboBox?
Das größte Problem von einem Delegate ist, dass er die komplette Tabelle mit seinem Widget übernimmt. Normalerweise sollte aber nur bestimmte Felder oder bestimmte Spalten dieses Widget benutzen. Das Beispiel kann auf jedes beliebige Widget angewendet werden.

ComboBox nur in der 2. Spalte, restliche Felder gehen aber weiterhin auf den normalen LineEdit.

1. Reimplementieren der Klasse QItemDelegate *.cpp Source:
Code:
ComboBoxDelegate::ComboBoxDelegate( QObject *parent )
    : QItemDelegate( parent ) {}

QWidget *ComboBoxDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const {

  if ( index.column() == 2 ) {

    QComboBox *combo = new QComboBox( parent );
    // Hier die ComboBox mit Daten füllen!!!
    connect( combo, SIGNAL( activated( int ) ), this, SLOT( emitCommitData() ) );
    return combo;
  } else
    return QItemDelegate::createEditor( parent, option, index ); // Extrem wichtig, sonst kommt man nicht mehr zurück.
}

void ComboBoxDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const {

  QComboBox *combo = qobject_cast<QComboBox *>( editor );
  if ( !combo ) {

    QItemDelegate::setEditorData( editor, index ); // Extrem wichtig, sonst kommt man nicht mehr zurück.
    return;
  }
  int pos = combo -> findText( index.model() -> data( index ).toString(), Qt::MatchExactly );
  combo -> setCurrentIndex( pos );
}

void ComboBoxDelegate::setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const {

  QComboBox *combo = qobject_cast<QComboBox *>( editor );
  if ( !combo ) {

    QItemDelegate::setModelData( editor, model, index ); // Extrem wichtig, sonst kommt man nicht mehr zurück.
    return;
  }
  model -> setData( index, combo -> currentText() );
}

void ComboBoxDelegate::emitCommitData() { emit commitData( qobject_cast<QWidget *>( sender() ) ); }


*.h Definitionen:

Code:
class ComboBoxDelegate : public QItemDelegate {

  Q_OBJECT

public:

  ComboBoxDelegate( QObject *parent = 0 );
  QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
  void setEditorData( QWidget *editor, const QModelIndex &index ) const;
  void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const;

private slots:
  void emitCommitData();
};


Wo stehen die Informationen von Trolltech dazu?
http://doc.trolltech.com/4.0/qtablewidget.html
http://doc.trolltech.com/4.0/qitemdelegate.html

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    qtforum.de Foren-Übersicht -> FAQ - Qt Programmierung Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum