Problem mit QT / QComboTableItem



  • Hallo zusammen,
    ich versuche eine Tabelle mit QT darzustellen (V3.2, GPL Linux), und habe das Problem, dass die QComboTableItems nicht gezeichnet werden, es sei denn, dass ich das Tabellenfeld selektiere.

    Weiß zufällig jemand, was ich falsch machen könnte?

    Gruß,
    Tobias



  • hi,
    zeichnest du die Tabelle selber? D.h. hast du die void QTable::display(...) überschrieben?

    Tschau Gartenzwerg



  • Nein, die habe ich nicht überschrieben... einfach ein QTable, mit dem Designer in eine Oberfläche gesetzt und dann:

    m_pTable->setNumRows (0);

    m_pTable->setNumCols(3);
    m_pTable->horizontalHeader()->setLabel(0, "...");
    m_pTable->horizontalHeader()->setLabel(1, "...");
    m_pTable->horizontalHeader()->setLabel(1, "...");

    später:
    QStringList Content;
    Content.append("EINS");
    Content.append("ZWEI");
    Content.append("DREI");
    Content.append("VIER");
    QComboTableItem *pCombo = new QComboTableItem(m_pTable, Content);
    pCombo->setCurrentItem(0);
    m_pTrackTable->setItem(1, 2, pCombo);

    Gruß,
    Tobias



  • hi,
    sorry ich kenne mich mit dem Designer nicht so aus. Aber wieso hast du einmal die QTable m_pTable und m_pTrackTable? Die m_pTable spielt doch keine Rolle oder?
    Kannst du vielleicht noch ein bisschen mehr Code zeigen?
    Übrigens die QTable::display(...) war Quatsch. Habe ich verwechselt. Hast du die QTable::paintCell(...) überladen?

    Tschau Gartenzwerg



  • Erstmal jetzt schon vielen Dank für Deine Hilfe!

    Ja, m_pTrackTable ist Unfug, heisst auch m_pTable. Sorry, ich habe versucht, den Code von allem Unnötigen zu befreien, war schlampig...

    Ich versuche mal etwas mehr Code:

    m_pTable = new QTable( centralWidget(), "m_pTable" );
    m_pTable->setGeometry( QRect( 10, 10, 1040, 341 ) );
    m_pTable->setResizePolicy( QTable::Default );
    m_pTable->setNumRows( 3 );
    m_pTable->setNumCols( 3 );
    m_pTable->setSelectionMode( QTable::Single );
    m_pTable->setFocusStyle( QTable::FollowStyle );
    
    m_pTable->setNumRows (0);
    
    m_pTable->setNumCols(3);
    int i=0;
    m_pTable->horizontalHeader()->setLabel(i++, "erste Spalte");
    m_pTable->horizontalHeader()->setLabel(i++, "zweite Spalte");
    m_pTable->horizontalHeader()->setLabel(i++, "dritte Spalte");
    m_pTable->setColumnReadOnly(1,true);
    
    // erste Spalte
    m_pTable->setText( i, 0, QString("erste Spalte") );
    
    // State
    QStringList Content;
    Content.append("ON");
    Content.append("OFF");
    Content.append("WAIT");
    QComboTableItem *pCombo = new QComboTableItem(m_pTable, Content);
    pCombo->setCurrentItem(0);
    m_pTable->setItem(i, 1, pCombo);
    
    // irgendeine Checkbox
    QCheckTableItem *pCheckBox = new QCheckTableItem(m_pTable, "");
    pCheckBox->setChecked(false);
    m_pTable->setItem(i, 2, pCheckBox);
    

    Die Checkboxen sind i.O., nur die ComboBoxen sieht man nicht, es sei denn, sie sind angeklickt...

    Der Code ist damit übrigens vollständig! Mehr ist wirklich nicht da 😉

    Gruß,
    Tobi



  • hi,
    zu deinem Code, bei mir zeichnet er erstmal gar nichts. Die Ursache liegt am m_pTable->setNumRows(0) und dann zeichnest du die Checkbox und die Combobox außerhalb der Tabelle. Hier ein paar Änderungen:

    m_pTable = new QTable( centralWidget(), "m_pTable" );
    m_pTable->setGeometry( QRect( 10, 10, 1040, 341 ) );
    m_pTable->setResizePolicy( QTable::Default );
    m_pTable->setNumRows( 4 );  // setz hier mal auf vier Reihen
    m_pTable->setNumCols( 3 );
    m_pTable->setSelectionMode( QTable::Single );
    m_pTable->setFocusStyle( QTable::FollowStyle );
    
    //m_pTable->setNumRows (0); // warum das? lass es mal weg
    //m_pTable->setNumCols(3); // beides doppelt
    
    int i=0;
    m_pTable->horizontalHeader()->setLabel(i++, "erste Spalte"); // setzt Spalte null auf "erste Spalte", danach Erhöhung von i
    m_pTable->horizontalHeader()->setLabel(i++, "zweite Spalte"); // i jetzt 1
    m_pTable->horizontalHeader()->setLabel(i++, "dritte Spalte"); // i jetzt 2
    // i ist hier gleich 3!
    m_pTable->setColumnReadOnly(1,true);
    
    // erste Spalte
    m_pTable->setText( i, 0, QString("erste Spalte") );
    // i==3, d.h. du willst in Reihe 4 schreiben, die gab es bei dir aber nicht!
    // die erste Zelle in QTable hat die Koordinaten 0,0! O. Reihe und 0. Spalte!
    
    // State
    QStringList Content;
    Content.append("ON");
    Content.append("OFF");
    Content.append("WAIT");
    QComboTableItem *pCombo = new QComboTableItem(m_pTable, Content);
    pCombo->setCurrentItem(0);
    m_pTable->setItem(i, 1, pCombo);
    // Du willst wieder in Reihe 4 schreiben, die gab es bei dir aber nicht!
    
    // irgendeine Checkbox
    QCheckTableItem *pCheckBox = new QCheckTableItem(m_pTable, "");
    pCheckBox->setChecked(false);
    m_pTable->setItem(i, 2, pCheckBox);
    // Du willst wieder in Reihe 4 schreiben, die gab es bei dir aber nicht!
    

    Hat zwar alles nichts mit deinem gestellten Problem zu tun, aber so bearbeitet, funktioniert der Code bei mir einwandfrei.
    Wie sieht es bei dir aus?

    Tschau Gartenzwerg



  • Welche QT-Version hast Du, kann es damit zusammenhängen?

    Ich werde mal die Probe aufs Exempel machen, und Deine bearbeitete Version mal laufen lassen.

    Leider war ich wieder schlampig... das Problem ist, dass das Code-Beispiel, dass ich Dir gegeben habe, bei mir in verschiedene Funktionen gekapselt ist... beim Zusammenkopieren sind ein paar Ungereimtheiten aufgetreten, sorry...

    Gruß,
    Tobi



  • hi,
    theoretisch könnte es auch mit der Qt-Version zusammenhängen. Ich habe die Qt 3.2.1 (Free Edition) für Linux. Und du? Wenn du willst, kannst du mir mal den kompletten Code per mail schicken: gartenzwerg87@users.sourceforge.net

    Tschau Gartenzwerg


Anmelden zum Antworten