PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QCheckListItem



TheDodger
01-10-2002, 12:43
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?


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 ...

anda_skoa
01-10-2002, 15:11
Was passiert, wenn du es vertauschst?
Also, wenn 0 das Argument ist, rufst du paintCell mit 1 auf und umgekehrt.

Ciao,
_

TheDodger
01-10-2002, 16:20
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?

anda_skoa
01-10-2002, 17:11
ich dachte an sowas:




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,
_

TheDodger
02-10-2002, 07:25
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 ...

anda_skoa
02-10-2002, 09:57
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.



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,
_

TheDodger
04-10-2002, 06:34
exact ... und siehe da, so sollte es sein :)

TheDodger
15-10-2002, 13:56
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 ...

anda_skoa
15-10-2002, 14:10
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,
_

TheDodger
15-10-2002, 14:15
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 ...

TheDodger
15-10-2002, 15:14
Ich glaube, ich hab's:



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 );
}

anda_skoa
15-10-2002, 15:32
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,
_

TheDodger
15-10-2002, 18:59
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 ...