layout neu schreiben ... aber wie?

Alles rund um die Programmierung mit Qt
Antworten
..k1..
Beiträge: 2
Registriert: 31. März 2011 16:28

layout neu schreiben ... aber wie?

Beitrag 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?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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 ?
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
..k1..
Beiträge: 2
Registriert: 31. März 2011 16:28

anzahl bleibt nicht gleich

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