Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Problem mit dynamischen Widget

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    Exclamation Problem mit dynamischen Widget

    Hi,
    ich habe ein kleines Problem mit Qt.
    Ich habe ein hauptwidget

    Code:
    HauptWidget::HauptWidget(){
    	ButtonBox oben;
    	QTreeWidget links
    	xxx rechts;
    	ButtonBox unten;
    }
    daraus ensteht dann grafisch ein Fenster
    HTML-Code:
           ------------------
           |       oben     |
           ------------------
           | links | rechts |
           -----------------
           |      unten     |
           ------------------
    Doch wie wie muss xxx beschaffen sein um dort immer
    wieder ein neues Widget mit Inhalt anzeigen zu lassen
    wenn ich in oben, links oder unten z.B. einen Knopf drücke?

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Doch wie wie muss xxx beschaffen sein um dort immer
    wieder ein neues Widget mit Inhalt anzeigen zu lassen
    wenn ich in oben, links oder unten z.B. einen Knopf drücke?
    Ist dir nur entfallen das du einen Zeiger auf QWidget benutzen kannst, oder verstehe ich die Frage falsch? Ein Zeiger könnte jedenfalls "dynamisch" auf unterschiedliche konkrete Widgettypen zeigen.

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Mehrerer weg führen nach Rom
    QDockWidget oder eine eigene Klasse von QVariant Template ableiten.
    Wobei QDockWidget das sein dürfte was du suchst.
    An sonsten kannst du casten in der Qt Doc "An Introduction to Model/View Programming" abschnitt "Delegates/QAbstractItemDelegate" kannst du sehen wie man es machen kann.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    erstmal vielen dank für eure Hilfe!!!
    Das ist meine letzte Hürde bis ich das Programm online stellen kann.

    QDockWidget hatte ich auch die idee, doch wie ich es verstanden habe wird es an ein anderes Widget angehängt, doch es soll an eine bestimmte Stelle in dem HauptWidget.

    Stimmt da habe ich die Bezeichnung unüberlegt verwendet. doch ich find die idee super!

    aus xxx rechts; wird:
    Code:
    HauptWidget::HauptWidget(){
       QWidget *wid = new QWidget;
       Cocktail  cocktail;
      Colorscheme farbscha;
    }
    
    void Hauptwidget::setright(){
       wid=cocktail;
    }
    grundsätzlich oder?
    Geändert von dml (18-08-2008 um 13:36 Uhr)

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Zitat Zitat von dml Beitrag anzeigen
    erstmal vielen dank für eure Hilfe!!!
    .........
    QDockWidget hatte ich auch die idee, doch wie ich es verstanden habe wird es an ein anderes Widget angehängt, doch es soll an eine bestimmte Stelle in dem HauptWidget.
    ............
    Das ist eine Layout frage siehe QGridLayout oder QHBoxLayout.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    Thumbs up

    cool ich bin durch mit QDockWidget!
    Zickt zwar noch an ein paar Stellen, doch das ist ja normal.

    vielen dank!

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    zwei kleine fragen habe ich leider noch,

    wenn ich zwei Verschiedene WidgetKlassen mit ->setWidget anzeige, bleibt die andere immer bestehen. Ich habe leider keine entsprechende Methode gefunden um zu pruefen ob schon ein Widget gesetzt wurde. Wisst Ihr wie man das sauber lößt?

    Ich habe es geschafft mit NoDockWidgetFeatures die Funktionen zu deaktivieren, doch wie bekomme ich den Strich weg?

    vielen dank!

  8. #8
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Siehe findChild oder findChildren
    Aber im Normalfall sind QStackedWidget dafür besser geeignet.
    Code:
      /* Check Boxen suchen */
      foreach ( QCheckBox *cb, findChildren<QCheckBox *>() )
      {
         qDebug() <<  cb->objectName();
      }
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  9. #9
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Hi,

    ich hab mal noch eine Frage dazu.

    ich habe eine Klasse Recipe, in der habe ich noch eine Methode von QLineEdit
    hinzugefügt.

    Code:
    Recipe{
           QLineEdit erster;
           QLineEdit zweiter;
           QLabel text;
    }
    Code:
    void QLineEdit::mousePressEvent(QMouseEvent *event){
         
    }
    doch wie komme ich nun von QLineEdit auf QLabel?


    Code:
    void QLineEdit::mousePressEvent(QMouseEvent *event){
         text.setText();
    }
    QLabel nur sinngemäß für Zugriff auf Klasse von Recipe, ich brauche aber unbedingt mousePressEvent.





    P.S.:
    Nehmt ihr inzwischen eigentlich auch Geld?
    Geändert von dml (18-04-2009 um 14:12 Uhr)

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Entweder leitest du von QLineEdit ab und reimplementierst mousePressEvent() oder du benutzt einen Eventfilter.

    Im ersten Falle kannst du deiner LineEdit Klasse alles übergeben was du brauchst, im zweiten Falle kann Recipe selbst der EventFilter sein.

    Ableiten ist vom Prinzip her sauberer, bei Eventfiltern muss man ein bischen aufpassen, weil man da mitten in die Eventverarbeitung eingehängt wird.
    Ist aber auch ein bischen mehr Codeaufwand.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Na, ich bin zunächst über
    Code:
    void QLineEdit::mousePressEvent(QMouseEvent *event){
         QLineEdit::parent()->parent()->parent()->parent()->recipe->category...
    }
    gegangen.
    Nicht hübsch, aber einfach. Doch obwohl ich in MainWidget worin sich recipe->category befindet bin, sagt er mir QObject hat kein Element namens recipe.

    QDebug() ->parent()=MainWidget(0x12345).


    Aber ich werde es wohl über den EventFilter probieren müssen, obwohl ich es ein wenig überdimensioniert finde, da ich nur bei zwei LineEdits auf ButtonGroup zugreifen muss.

    danke!

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von dml Beitrag anzeigen
    Na, ich bin zunächst über
    Code:
    void QLineEdit::mousePressEvent(QMouseEvent *event){
         QLineEdit::parent()->parent()->parent()->parent()->recipe->category...
    }
    gegangen.
    Du hast QLineEdit::mousePressEvent() reimplementiert? Im Sinne von Qt abgeändert?

    Nicht hübsch, aber einfach. Doch obwohl ich in MainWidget worin sich recipe->category befindet bin, sagt er mir QObject hat kein Element namens recipe.
    Hat es auch nicht. Siehe API Docs von QObject.
    Vielleicht vergessen zu casten?

    Aber ich werde es wohl über den EventFilter probieren müssen, obwohl ich es ein wenig überdimensioniert finde, da ich nur bei zwei LineEdits auf ButtonGroup zugreifen muss.
    EventFilter ist da die einfachste mir bekannte Art.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Hi,
    ich habe es mit
    Code:
    bool Recipe::eventFilter(QObject *obj, QEvent *eve){
    }
    vesucht. Hat Funktioniert, doch weiß ich nicht wann ich einen bool zurück geben muss
    oder QWidget::eventFilter(object,event)

    dann habe ich es noch mit
    Code:
    void Recipe::mousePressEvent(QMouseEvent *event){
          qDebug()<<"bla";
    }
    versucht, da ich über Hauptklasse von LineEdit und ButtonGroup, eigentlich drauf zugreifen können müsste.
    Doch kommt einfach nicht an.

  14. #14
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von dml Beitrag anzeigen
    Hi,
    Hat Funktioniert, doch weiß ich nicht wann ich einen bool zurück geben muss
    Die Doku sagt "if you want to filter the event out, i.e. stop it being handled further, return true; otherwise return false."
    D.h. wenn du das Event nur sehen willst, aber nicht verhindern willst, dass es auch der LineEdit sieht, einfach false zurückgeben.

    Zitat Zitat von dml Beitrag anzeigen
    Code:
    void Recipe::mousePressEvent(QMouseEvent *event){
          qDebug()<<"bla";
    }
    versucht, da ich über Hauptklasse von LineEdit und ButtonGroup, eigentlich drauf zugreifen können müsste.
    Doch kommt einfach nicht an.
    Was heißt kommt nicht an?

    Ciao,
    Kevin
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

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