Seite 1 von 1

layout neu schreiben ... aber wie?

Verfasst: 20. April 2011 17:30
von ..k1..
Alloah ich bastle grad am QTkboard herum um mir ein Umschaltbares KeyBoard zu bauen ...

die button konfiguration lade ich aus den jeweiligen xml datein

jedoch bekomme ich es nicht hin das er die Button_widgets neu schreibt ...

hier meine funktionen zum löschen anzeigen

Code: Alles auswählen

void mainForm::clearLayout(QLayout *l) {
        int z = 0;
        QLayoutItem *item;

        while((item = l->itemAt(z)) != 0) {

                /*if (item->layout()) {
                        clearLayout((QLayout *)item->layout());
                }*/

                delete item->widget();

                z++;
        }
}

void mainForm::displayboard()
{
    int buttonHeight = 20;
    int buttonwidth = 20;
    //int bigButtonWidth = 65;
    int specialButtonWidth = 30;


    layKeyb = new QVBoxLayout();
    layKeyb->setSpacing(1);


    int i ;
    QMyButton *bt;

    layFirstRow = new QHBoxLayout();
    layFirstRow->setSpacing(1);

    layRow2 = new QHBoxLayout();
    layRow2->setSpacing(1);

    layRow3 = new QHBoxLayout();
    layRow3->setSpacing(1);

    layRow4 = new QHBoxLayout();
    layRow4->setSpacing(1);

    layRow5 = new QHBoxLayout();
    layRow5->setSpacing(1);

    layKeyb->addLayout(layFirstRow);
    layKeyb->addLayout(layRow2);
    layKeyb->addLayout(layRow3);
    layKeyb->addLayout(layRow4);
    layKeyb->addLayout(layRow5);

 if( switchboard == 0 ) {

     clearLayout(layFirstRow);
     clearLayout(layRow2);
     clearLayout(layRow3);
     clearLayout(layRow4);

    for(i = 0; i < 11; i++) {
        bt  =  new QMyButton(this);
        bt->setMinimumSize(QSize( specialButtonWidth, buttonHeight));
    //  bt->setMaximumSize(QSize( specialButtonWidth, buttonHeight));

        layFirstRow->addWidget(bt);
        buttons.append(bt);
        bt->setObjectName(QString::number(i));
    }


    for(; i < 21; i++) {
        bt =  new QMyButton(this);
        bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
        bt->setObjectName(QString::number(i));
        layRow2->addWidget(bt);
        buttons.append(bt);
    }

    for(; i < 31; i++) {
        bt =  new QMyButton(this);
        bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
        bt->setObjectName(QString::number(i));
        layRow3->addWidget(bt);
        buttons.append(bt);

    }


    for(; i < 38; i++) {
            bt =  new QMyButton(this);
            bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
            bt->setObjectName(QString::number(i));
            layRow4->addWidget(bt);
            buttons.append(bt);
        }
    i++;



    kbName = shareDir + "/11.xml";

}

 if (switchboard == 1) {

     clearLayout(layFirstRow);
     clearLayout(layRow2);
     clearLayout(layRow3);
     clearLayout(layRow4);


     for(i = 0; i < 10; i++) {
         bt  =  new QMyButton(this);
         bt->setMinimumSize(QSize( specialButtonWidth, buttonHeight));
     //  bt->setMaximumSize(QSize( specialButtonWidth, buttonHeight));
         layFirstRow->addWidget(bt);
         buttons.append(bt);
         bt->setObjectName(QString::number(i));
     }


     for(; i < 20; i++) {
         bt =  new QMyButton(this);
         bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
         bt->setObjectName(QString::number(i));
         layRow2->addWidget(bt);
         buttons.append(bt);
     }

     for(; i < 27; i++) {
         bt =  new QMyButton(this);
         bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
         bt->setObjectName(QString::number(i));
         layRow3->addWidget(bt);
         buttons.append(bt);

     }

     for(; i < 34; i++) {
             bt =  new QMyButton(this);
             bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
             bt->setObjectName(QString::number(i));
             layRow4->addWidget(bt);
             buttons.append(bt);
         }
        i++;


        layKeyb->update();

     kbName = shareDir + "/12.xml";
 }

 if (switchboard == 2) {


     clearLayout(layFirstRow);
     clearLayout(layRow2);
     clearLayout(layRow3);
     clearLayout(layRow4);

     for(i = 0; i < 7; i++) {
         bt  =  new QMyButton(this);
         bt->setMinimumSize(QSize( specialButtonWidth, buttonHeight));
     //  bt->setMaximumSize(QSize( specialButtonWidth, buttonHeight));
         layFirstRow->addWidget(bt);
         buttons.append(bt);
         bt->setObjectName(QString::number(i));
     }


     for(; i < 14; i++) {
         bt =  new QMyButton(this);
         bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
         bt->setObjectName(QString::number(i));
         layRow2->addWidget(bt);
         buttons.append(bt);
     }

     for(; i < 18; i++) {
         bt =  new QMyButton(this);
         bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
         bt->setObjectName(QString::number(i));
         layRow3->addWidget(bt);
         buttons.append(bt);

     }

     for(; i < 26; i++) {
             bt =  new QMyButton(this);
             bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
             bt->setObjectName(QString::number(i));
             layRow4->addWidget(bt);
             buttons.append(bt);
         }
        i++;

     kbName = shareDir + "/13.xml";
 }

 if (switchboard == 3) {

     clearLayout(layFirstRow);
     clearLayout(layRow2);
     clearLayout(layRow3);
     clearLayout(layRow4);

     for(i = 0; i < 5; i++) {
         bt  =  new QMyButton(this);
         bt->setMinimumSize(QSize( specialButtonWidth, buttonHeight));
     //  bt->setMaximumSize(QSize( specialButtonWidth, buttonHeight));
         layFirstRow->addWidget(bt);
         buttons.append(bt);
         bt->setObjectName(QString::number(i));
     }


     for(; i < 10; i++) {
         bt =  new QMyButton(this);
         bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
         bt->setObjectName(QString::number(i));
         layRow2->addWidget(bt);
         buttons.append(bt);
     }

     for(; i < 15; i++) {
         bt =  new QMyButton(this);
         bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
         bt->setObjectName(QString::number(i));
         layRow3->addWidget(bt);
         buttons.append(bt);

     }

     for(; i < 20; i++) {
             bt =  new QMyButton(this);
             bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
             bt->setObjectName(QString::number(i));
             layRow4->addWidget(bt);
             buttons.append(bt);
         }
        i++;

     kbName = shareDir + "/14.xml";
 }


        bt =  new QMyButton(this); //switch the board
        bt->setMinimumSize(QSize( buttonwidth, buttonHeight));
        bt->setObjectName(QString::number(i));
        bt->setText("Switch the Board");
        layRow5->addWidget(bt);
        buttons.append(bt);






        //update mainForm
    if(mainFormLayout->isEmpty()){
           mainFormLayout->addLayout(layKeyb);
           mainFormLayout->setSpacing(1);}
    else  {
      mainFormLayout->update();
    }
hat jemand einen tip?

Verfasst: 20. April 2011 19:08
von padreigh
das sieht ... lang ... aus. Warum löscht du Zeug aus nem Layout?
Pack alle deine Tasten in ein Widget und lösch das wenn du was neu erzeugen willst. Wenn du nur Beschriftungen änderst (die Anzahl der Tasten bleibt wohl gleich?) Warum löscht du dann überhaupt was - editier doch einfach die Beschriftung. Wenn du schnell umschalten willst bau dir doch alle Keybords und pack die in ein QStackedWidget ... dann schaltest du einfach nur noch die angezeigte Seite um ... und warum nennst du deine Klasse QIrgendwas ?

anzahl bleibt nicht gleich

Verfasst: 20. April 2011 19:44
von ..k1..
danke für die schnelle Antwort :)

die klasse heist qtirgendwas weil das Keyboard ursprünglich nicht von mir ist sondern ein Beispiel aus dem qtirgendwass ^^... ich versuche mir das nur zurecht zu biegen für die eigene Verwendung.

leider soll sich die Anzahl der Tasten Ändern deshalb versuche ich die layer zu löschen und nicht einfach die buttons neu zu beschriften.

das mit dem QStackWidget hab ich heute auch schon ein paar mal gelesen werde mein glück mal damit versuchen.