Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. QTableView. Nur erste Spalte so selektierbar sein
Forum Updated to NodeBB v4.3 + New Features

QTableView. Nur erste Spalte so selektierbar sein

Scheduled Pinned Locked Moved German
2 Posts 2 Posters 1.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Z Offline
    Z Offline
    Zanetti247
    wrote on last edited by
    #1

    Hi zusammen!

    Ich bin leider ein Anfänger im Bereich der GUI-Entwicklung in Qt.
    Habe in meiner GUI eine TableView eingebaut. Als Model, habe ich QDirModel genommen.
    Die Verzeichnisse sowie ihre Größen und weitere Eigenschaften werden angezeigt.

    Nun möchte ich, dass der User die Möglichkeit besitzt auf einen Ordner zu klicken und diesen zu öffnen...
    Problem => Ich kriege es nicht hin, dass nur die ERSTE Spalte meiner TableView Selektierbar ist.

    Was muss ich tun, damit nur die erste Spalte selektierbar ist? bzw. Wie greife ich auf die Spalten zu?

    Verzeiht mir wenn ich Forenregeln missachte. Ist mein erster Post.

    Danke im Vorraus!

    1 Reply Last reply
    0
    • M Offline
      M Offline
      Milania
      wrote on last edited by
      #2

      Falls es dir ausreicht, wenn der User nur eine Zeile selektieren darf, so kannst du das bequem im Designer unter "selectionBehavior" einstellen (auf "SelectRows" stellen).

      Möchtest du tatsächlich, dass immer nur ein Element aus der ersten Spalte selektiert werden soll, so fällt mir gerade nur die Möglichkeit ein, ein eigenes SelectionModel zu schreiben, d. h. du machst dir eine neue Klasse, welche von QItemSelectionModel erbt, in etwa so:
      @class MySelectionModel : public QItemSelectionModel
      {
      Q_OBJECT
      public:
      MySelectionModel(QAbstractItemModel *model, QObject *parent = 0);

      void doSelect(const QModelIndex &idx);
      

      public slots:
      void select(const QModelIndex & index, QItemSelectionModel::SelectionFlags command);
      void select(const QItemSelection & selection, QItemSelectionModel::SelectionFlags command);

      };@

      Die select Methoden (welche normalerweise die Selektierung vornehmen) kannst du leer lassen:
      @void MySelectionModel::select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
      {
      //Do nothing here
      }

      void MySelectionModel::select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)
      {
      //Do nothing here
      }@

      In der Methode doSelect, bestimmst du dann, wie deine spezielle Selektierung auszusehen hat, z. B. in etwa so (ungetestet)
      @void MySelectionModel::doSelect(const QModelIndex &idx)
      {
      if(idx.column() != 0){
      return;
      }

      //Allows onlye one item to be selected at a time
      //Click selects if unselected and deselects if selected
      //Change it if you do not wish this behavior
      QItemSelection selektion;
      QItemSelectionRange range(idx, idx);
      selektion.append(range);
      
      if(isSelected(idx))
      {
          //Call parents select function
          QItemSelectionModel::select(selektion, QItemSelectionModel::Deselect);
      }
      else
      {
          QItemSelectionModel::select(selektion, QItemSelectionModel::Select);
      }
      

      }@

      Überschreibe dann noch für deine TableView den *_clicked slot und rufe dort deine doSelect(idx) auf.
      Und natürlich musst du dein spezielles SelectionModel noch bei der TableView anmelden.

      Keine Ahnung, ob das eine wahnsinig elegante Art und Weise ist, aber ich hatte so etwas ähnliches mal verwendet, als ich meine eigene Selektierungsregel haben wollte und das war der einzige Weg, wie es dann funktionierte.

      Ach übrigens QDirModel schein deprecated zu sein, du kannst dir ja mal QFileSystemModel ansehen ;-)

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved