Anzeige:
Ergebnis 1 bis 8 von 8

Thema: listview->auf klick enablen

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749

    listview->auf klick enablen

    Hallo,
    ich möchte zwei items eines listviews miteinander koppeln.
    Wenn item1 auf selected ist soll auch gleichzeitig item2 selected sein.
    Das problem ist dass ich erst durch einen add - button beide items erstelle.
    Wie kann ich das nun verwirklichen ?

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226
    Hallo Mat,

    vielleicht klappt es, wenn du innerhalb deiner add-Funktion ein connect machst, indem du jeweils das Signal void selectionChanged ( QListViewItem * ) mit einem Slot koppelst, in dem du setSelected ( QListViewItem * item, bool selected ) verwendest. Das machst du mit allen Einträgen die gekoppelt werden sollen.

    Schöne Grüße,
    Kirstin

  3. #3
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    Hallo. vielen libeen dank. Leider habe ich es bis jetzt nicht geschafft.
    Zumindest läuft es sehr inkonsistent.
    Also was ich machen will:
    Ein user klickt auf einen add button und im Listview werden an 2 völlig verschiedenen Bereichen( untersch. Tiefe) 2 items eingefügt.
    Jetzt will ich diese beiden items so miteinander verbinden...wenn der user auf eines der beiden klickt also dieses item selected wird soll gleichzeitig auch das andere mit selected werden! Mein Problem ist dass mein ListView im Extended Modus arbeiten muss!!! Ich kann also selectionChanged(QListViewItem*) schon mal nicht verwenden. Mit pressed sieht mein code nun so aus dass ich bei dem item das gesamte ListView durchlaufe und das andere Item anhand des namens selected mache (da beide denselben namen tragen!!!) Ich denke dass ist sehr ineffizient und weiterhin
    stürtzt das Prog ab wenn ich dann zweige im listview mit dem "+" und "-" zeichen schließe/öffne....
    hier mein versuch:
    Code:
    void Class1::myMethod()
    {
    ...
    //hier erstelle durch klick zwei items und füge 
    // sie ein ins listview - > dann kommt hier der connect:
    connect(myListView, SIGNAL(pressed(QListViewItem*)), this, SLOT(connect_BS(QListViewItem*)));
    
    }
    
    //hier kommt der SLOT connect_BS:
    
    void Class1::connect_BS(QListViewItem* item)
    {		
    	QListViewItemIterator it(myListView);
    	while(it.current())
    	{
       		if((it.current()->text(2) == item->text(2)) && it.current()->text(2).startsWith("DerVergleichsText"))
       			myListView->setSelected(it.current(),TRUE);
    		++it;
    	}
    }
    Für eure Hilfe bin ich wie immer sehr dankbar!!!

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du könntest zum Beispiel bei der Erzeugung den jeweils anderen Pointer im Item speichern (eigene Item Subklasse)

    Dann kannst du auch QListViewItem::setSelected überschreiben und wenn das Item selektiert wird, einfach auch das andere selektieren, bzw den Listview sagen, er soll auch den anderen selektieren.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    danke anda...ich nehme mal an das geht so ähnlich wie in dem Thread von mir mit dem PaintCell .....

  6. #6
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    Danke hmm ich weiß nicht wie ich das machen soll mit pointer des anderen items mitspeichern. was oder wie soll ich überschreiben dazu ? Oder meinst du mit eigene SUb item klasse ne eigene Methode definieren ? Sorry aber mit dem ÜBerschreiben von Methoden....hab ich noch nie gemacht. Das Tutorial von dir habe ich versucht irgendwie auf mein Problem zu übertragen aber habs net geschafft oder weiß net weiter.....
    Hier mein erster Versuch....

    Code:
    class MyListViewItem : public QListViewItem
    {
          MyListViewItem();
          ~MyListViewItem();
    public:
    //      virtual void setSelected(bool s, QListViewItem* partner);
            virtual void setSelected(bool s);
    
    };
    
    // MyListViewItem::MyListViewItem() {}
    // MyListViewItem::~MyListViewItem(){}
    
    void MyListViewItem::setSelected(bool s)
    {
    
    }

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das ist richtig.

    In etwa so sollte es gehen

    Code:
    class MyListItem : public QListViewItem
    {
    public:
        void setPartner(QListViewItem* partnerItem)
        {
            m_partnerItem = item;
        }
    
        virtual void setSelected(bool s)
       {
           QListViewItem::setSelected(s);
           if (s && m_parnterItem != 0) m_partnerItem->setSelected(true);
       }
    
    private:
        QListViewItem* m_partnerItem;
    }
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749
    Danke mit ein wenig Änderung funzt jetzt alles! )
    Geändert von Mat (27-12-2005 um 18:22 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •