Seite 1 von 1

Ein emit senden aus QTreeWidgetItem

Verfasst: 19. Mai 2006 10:56
von patrik08
Ich habe die class QTreeWidgetItem abgeleitet ... aber nun wie kann ich ein emit open_db_form(int db_id) senden bei checked oder noch besser bei doppelclick

Code: Alles auswählen

/* last item on a QTreeWidget */
class QTreeOne : public QTreeWidgetItem 
{
 public:
    QTreeOne(QTreeWidgetItem* parent);
    int db_id;
    void Set_id( int num );
  protected:
  public:
  signals: 
    void open_db_form(int db_id);
}; 

QTreeOne::QTreeOne(QTreeWidgetItem* parent) :
	QTreeWidgetItem( parent )
{
    this->setBackgroundColor(0,QColor(237,237, 237, 237));
    this->setFlags(Qt::ItemIsUserCheckable);
    this->setCheckState(0,Qt::Unchecked );
}

void QTreeOne::Set_id( int num )
{
  db_id = num;  
}


Verfasst: 19. Mai 2006 11:31
von patrik08
So habe ich es versucht auch nichts...
in der QMainWindow kommt nichts an... warum??
doch kompilieren geht fehlerlos....

Code: Alles auswählen

class QTreeOne : public QObject, public QTreeWidgetItem 
{
    Q_OBJECT
 public:
    QTreeOne(QTreeWidgetItem* parent);
    int db_id;
    void Set_id( int num );
  protected:
  public:
  public slots:
      void Put_works();
  signals: 
    void open_db_form(int db_id);
}; 

QTreeOne::QTreeOne(QTreeWidgetItem* parent) :
	QTreeWidgetItem( parent )
{
    this->setBackgroundColor(0,QColor(237,237, 237, 237));
    this->setFlags(Qt::ItemIsUserCheckable);
    this->setCheckState(0,Qt::Unchecked );
    connect(this, SIGNAL(itemPressed(QTreeOne*,int)),this, SLOT(Put_works()));
}

void QTreeOne::Set_id( int num )
{
  db_id = num;  
}

void QTreeOne::Put_works()
{
  if (db_id > 0) {
  emit open_db_form(db_id);
  }
}


Verfasst: 19. Mai 2006 18:46
von patrik08
Das qt4 leben ist an einige stellen brutal & blutig....
In der dokumentation wirt bei QTreeWidgetItem ein setCheckState angeprisen mit flag ecc... .Gut denkt man :D dann kann ich eine class ableiten man macht den check box .. classe ableiten QTreeWidgetItem & QObject noch dazu .. so dass man ein slot hinein buttern kann unsw..
verbindet den slot ....

In der praxsis dann merkt mann das die ganze schleife durch geht... bei

Code: Alles auswählen

QTreeWidgetItem *sigle = new QTreeWidgetItem(paeort);
                            sigle->setText(0,daten);
                            connect(addo_tree, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(Safari())); 
jeden QTreeWidgetItem ist "itemClicked" auch wenn nur einen offen ist...

also muss man die heilige "daten" die man geschrieben hat noch mal suchen...
also die daten in einem QStringList nochmals packen....

Code: Alles auswählen

AddoLoad.append(daten);
und beim ziel slot 10000 mal ein QLineEdit mit dem selben text aufuellen ... ja weil itemClicked geht soviele mal durch wie auch QTreeWidgetItem vorhanden sind!!!

Code: Alles auswählen

void Shop_Main::Safari()
{
    int xcol = addo_tree->currentColumn();
    QString findertree = addo_tree->currentItem()->text(xcol);
    int total = AddoLoad.size();
    if (total > 0) {
      QStringListIterator i(AddoLoad); 
      while (i.hasNext()) {
       QString itemtext = i.next().toLocal8Bit().constData();
          if (itemtext == findertree) {
            current_addo_item->setText(itemtext);
          }
      } 
    }
}
nun ist der QTreeWidgetItem TEXT endlich in einem textfeld... readonly
gut also den naechsten slot der dieses textfeld ueberwacht auf aenderungen um endlich das formular anzuzeigen von diesem item text der im QTreeWidgetItem liegt... und nur wen es aendrung gibt !
sonst wird das formular von der datenbank 1000 mal abgerufen.. mit einem "itemClicked". :shock: