Anzeige:
Ergebnis 1 bis 13 von 13

Thema: QCheckListItem

  1. #1
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    QCheckListItem

    Moins!

    Ich hab hier ein Problem mit obigen QCheckListItem ....
    Ich brauche in einem ListView eine Checkbox. Ist ja auch nicht tragisch, denn daß lässt sich ja einfach bewerkstelligen.
    Allerdings benötige ich die CheckBox in der 2. Column!
    Wenn ich allerdings den Standardcontruktor aufrufe, wird diese mir immer in der ersten Column vor dem Text eingefügt ...

    Gibt es eine Möglichkeit das ganze so umzubiegen, das ich die Checkbox frei plazierbar einfügen kann?

    [edit]
    ich habe jetzt 'paintCell()' umgebogen, doch wenn ich in column fest eine 0 eintrage, habe ich die CheckBox in Column 0 und 1.
    Wenn ich eine 1 eintrage, verschwindet mein Text und die CheckBox ist auch nirgends zu sehen ...
    [/edit]
    Geändert von TheDodger (01-10-2002 um 13:18 Uhr)
    Bodo
    Systemadmistration UNIX

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Was passiert, wenn du es vertauschst?
    Also, wenn 0 das Argument ist, rufst du paintCell mit 1 auf und umgekehrt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Code:
    class BCheckListItem : public QCheckListItem
    {
    	public:
    			BCheckListItem( QListViewItem * parent, const QString & text, 
                                             Type tt = QCheckListItem::CheckBox, const QString state = false )
    			: QCheckListItem( parent, text, tt ) {
    
    				if( QString::compare( state, "J" ) == 0 )
    					cbState = true;
    				else
    					cbState = false;
    			}
    virtual void		paintCell( QPainter * p, const QColorGroup & cg, int column, int width, int align ) {
    
    				QCheckListItem::paintCell( p, cg, 1, width, align );
    
    				setOn( cbState );
    			}
    
    	private:
    
    		bool					cbState;
    };
    wenn colum == 0 ist, wird in beiden Columns die CheckBox und der Text angezeigt.
    ist column == 1 wird nicht's mehr dargestellt, alle columns sind leer.

    bleibt column == column (also ändere ich nicht's am Aufruf) wird es wie gewohnt, aber nicht gewollr angezeigt.

    Oder was meintes du genau?
    Bodo
    Systemadmistration UNIX

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    ich dachte an sowas:

    Code:
    virtual void paintCell( QPainter * p, const QColorGroup & cg, int column, int width, int align ) 
    {
    	if (column == 0)
    		column = 1;
    	else if (column == 1)
    		column = 0;
    	QCheckListItem:aintCell( p, cg, column, width, align );
    }
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Ja, so sieht das fast so aus, wie gewollt ... nur das der text in column 0 stehen sollte ...
    Aber ich hoffe das bekomme ich noch hin ... irgendwie ...
    Geändert von TheDodger (02-10-2002 um 07:34 Uhr)
    Bodo
    Systemadmistration UNIX

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Was ist, wenn du im Konstruktor den Text für die erste Spalte ausläßt und ihn in der zweiten setzt, die ja dann deine erste wird.

    Code:
    QCheckListItem* item = new QCheckListItem(parent, QString::null, QCheckListItem::CheckBox);
    item->setText(1, "text");
    Da du ja eine eigene Subklasse hast, kannst du ja den Konstruktor entsprechend modifizieren.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    exact ... und siehe da, so sollte es sein
    Bodo
    Systemadmistration UNIX

  8. #8
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Witzig das ganze ... langsam sieht das echt seltsam aus *fg*

    Äähm ... kann man den CheckBoxen eigentlcih auch SIGNALS/SLOTS zuweisen?
    Irgendwie muß ich jetzt noch mitbekommen, ob das Teil ausgewählt wurde, oder nicht ...
    Bodo
    Systemadmistration UNIX

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von TheDodger
    Äähm ... kann man den CheckBoxen eigentlcih auch SIGNALS/SLOTS zuweisen?
    Nein, das sind keine QObjects.

    Du könntest natürlich deine Klasse zusätzlich von QObject ableiten.


    Irgendwie muß ich jetzt noch mitbekommen, ob das Teil ausgewählt wurde, oder nicht ...
    Ich bin mir jetzt nicht sicher, wie sich QCheckListItem verhalten.
    Du kannst aber mit den Signals von QListView einige Aktionen auf den Items mitbekommen (Select, Click, Space, ContextMenu, etc).
    Vielleicht schalten sie eh nur bei click und space um oder so.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Original geschrieben von anda_skoa

    Ich bin mir jetzt nicht sicher, wie sich QCheckListItem verhalten.
    Du kannst aber mit den Signals von QListView einige Aktionen auf den Items mitbekommen (Select, Click, Space, ContextMenu, etc).
    Vielleicht schalten sie eh nur bei click und space um oder so.
    Schon, doch wenn ich aucf einen Eintrag im Listview klicke, hole ich mir auch gleichzeitig Daten aus einer DB ... i

    Eigentlcih ist es relativ egal, ob ich Funktion noch einmal aufrufe, allerdings bekomme ich ja nicht mit, ob sich der Zudtand des QCheckListItem ändert ...
    ein clicked( QListViewItem * item, const QPoint & pnt, int c ) gibt mir zwar schon gewaltig viel mit, aber noch nicht's genaueres ...
    Bodo
    Systemadmistration UNIX

  11. #11
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Ich glaube, ich hab's:

    Code:
    void FDEdit::slotOnLVItemClicked( QListViewItem * item, const QPoint & pnt, int c )
    {
    	if( !item )
    		return;
    
    	unsigned int xPos;
    	xPos = pnt.x() - this->x();
    
    	if( xPos < 34 || xPos > 45 ) // in diesem Bereich befindet sich die CheckBox
                  qDebug( "%u", xPos );
    }
    Bodo
    Systemadmistration UNIX

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Sonst mußt du dir halt die aktuellen Zustände der Checkboxen extra speichern (zB in einem QMemArray oder so) und dann bei signals vergleichen, um zu sehen, ob eine Änderung war.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Genauso mache ich es im Moment
    Allerdings ist entweder das kopieren in diese Array schneller als das Darstellen oder anders herum, jedenfalls 'verschluckt' sich meine Funktion bei sehr schnellen Mausklicks ...
    Bodo
    Systemadmistration UNIX

Lesezeichen

Berechtigungen

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