Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Konsturktionsproblem bei QAbstractItemModel u. QTreeView
Forum Updated to NodeBB v4.3 + New Features

Konsturktionsproblem bei QAbstractItemModel u. QTreeView

Scheduled Pinned Locked Moved German
5 Posts 3 Posters 3.4k 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.
  • P Offline
    P Offline
    Psychomax
    wrote on last edited by
    #1

    Hallo zusammen! :-)

    Ich hab eine kleine Frage zur Konstruktion von QAbstractItemModels. Ich hab mich versucht sehr nahe am editabletreemodel example zu orientieren.

    Folgendes habe ich von der Klassenstruktur:

    QAbstractItemModel
    |_NetworkDataModel

    QObject
    |_NetworkDataModelItem
    |_Netzwerk

    QObject
    |_NetworkDataModelItem
    |_Netzwerkknoten

    QObject
    |_NetworkDataModelItem
    |_NetzwerkEndpunkt

    So könnte die dargestellte Liste aussehen in der QTreeview:

    Root
    |_Netzwerk 1
    |_Netzwerkknoten 1
    |_NetzwerkEndpunkt1
    |_NetzwerkEndpunkt2
    |_Netwerkknoten 2
    |_NetzwerkEndpunkt1
    |_NetzwerkEndpunkt2
    |NetzwerkEndpunkt3
    |NetzwerkEndpunkt4
    |
    Netzwerk 2
    |
    n

    So der Plan war das jede Klasse für sich das Netzwerkakualisiert und NICHT das Model das füllen übernimmt. Ich hoffe das verständlich was ich meine. ;-) In dem Qt Example ist es ja so, dass ich eine neue Zeite einfüge in dem ich im Model sage mach mal in der Reihe ein neues Item. Möchte ich aber nicht. Das soll das jeweilige Item selber tun und dem Model sagen, dass sich was geändert hat.

    Folgende Probleme habe ich. Angenommen ich sagte Netzwerkknoten 1 "such mal alle deine NetzwerkEndpunkte". Macht er soweit und aktualisiert seine Itemliste. So wie sage ich jetzt dem Model bescheid, dass sich von Netzwerkknoten 1 die Itemliste verändert hat? Ich scheiter momentan immer am QModelIndex.

    So jetzt etwas anspruchsvoller. Ich verändere den Parent von Netzwerkknoten 2 und verändere diesen von Netzwerk 1 zu Netzwerk 2.. Des Sinn sein hier mal egal. Denn wie sage ich hier, dass sich was verändert hat?

    [code]
    bool NetworkDataModelItem::setParent(NetworkDataModelItem *parent)
    {
    //Remove the item from the old list
    if(m_parentItem)
    m_parentItem->m_childItems.removeAt(childNumber());

    bool ret = false;
    if(parent->insertChild(this))
    {
        emit parentChanged();
        ret = true;
    }
    
    return ret;
    

    }
    [/code]

    Würde mich tierisch freuen, wenn ihr mir auf die Sprünge helft! :-)

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

      [quote author="Psychomax" date="1337894610"]

      So der Plan war das jede Klasse für sich das Netzwerkakualisiert und NICHT das Model das füllen übernimmt. Ich hoffe das verständlich was ich meine. ;-) In dem Qt Example ist es ja so, dass ich eine neue Zeite einfüge in dem ich im Model sage mach mal in der Reihe ein neues Item. Möchte ich aber nicht. Das soll das jeweilige Item selber tun und dem Model sagen, dass sich was geändert hat.

      [/quote]
      Ich glaube das wird so nicht funktionieren, da die TreeView nur mit ihrem Model kommuniziert, nicht mit den TreeItems (NetworkDatModelItem).
      Wenn die Items das selbst machen sollen, könntest du überlegen ein QTreeWidget statt QTreeView zu benutzen (und deine Items von QTreeWidgetItem ableiten), aber damit geht dir eben auch ne Menge flexibilität verloren...
      Ich mache das gern so, dass meine TreeItems ein Signal senden, mit dem sich das Model verbindet und das Update für ein bestimmtes Item (parameter im Signal) vornimmt... Dann "sagen" die Items dem Model dass sich was geändert hat, genau wie du es willst. Nur muss anschließend eben noch das Model der View mitteilen dass sich was geändert hat (emit dataChanged())

      1 Reply Last reply
      0
      • G Offline
        G Offline
        giesbert
        wrote on last edited by
        #3

        [quote author="Mr.Universe" date="1343125225"]
        Ich mache das gern so, dass meine TreeItems ein Signal senden, mit dem sich das Model verbindet und das Update für ein bestimmtes Item (parameter im Signal) vornimmt... Dann "sagen" die Items dem Model dass sich was geändert hat, genau wie du es willst. Nur muss anschließend eben noch das Model der View mitteilen dass sich was geändert hat (emit dataChanged())
        [/quote]

        Das geht aber nur, wenn du kein TreeWidget verwendest :-)

        Um eine Verbindung von den items zum Model kommt man auf keinen Fall rum.
        Und mir stellt sich auch die Frage, ob man reine Daten Containern nicht dumm halten sollte und diese Logik in andere Klassen auslagert (wäre mein Favor).

        Nokia Certified Qt Specialist.
        Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

        1 Reply Last reply
        0
        • M Offline
          M Offline
          Mario84
          wrote on last edited by
          #4

          [quote author="Gerolf" date="1343201516"]
          Das geht aber nur, wenn du kein TreeWidget verwendest :-)
          [/quote]

          So meinte ich das doch :D
          also entweder signals oder treewidget, nicht beides...

          1 Reply Last reply
          0
          • G Offline
            G Offline
            giesbert
            wrote on last edited by
            #5

            [quote author="Mr.Universe" date="1343215845"][quote author="Gerolf" date="1343201516"]
            Das geht aber nur, wenn du kein TreeWidget verwendest :-)
            [/quote]

            So meinte ich das doch :D
            also entweder signals oder treewidget, nicht beides...

            [/quote]

            Sorry, war im zusammenhang etwas verwirrt, deswegen wollte ich das nur nochmal klar so hinschreiben :-)

            Nokia Certified Qt Specialist.
            Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

            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