2013-07-22 1 views
1

Je suis suivre cet exemple pour créer une mise en page de flux:Comment ajouter un élément à l'index spécifique dans la mise en page

http://doc.qt.io/qt-4.8/qt-layouts-flowlayout-example.html

Cela n'a pas addToIndex(int _index) fonction, donc je voudrais mettre en oeuvre cette . Puisque cette disposition utilise QLayoutItems, je voudrais créer une fonction qui peut insérer un élément après l'index spécifique.

Comment puis-je obtenir l'index d'un élément en entier et l'insérer dans la mise en page?

MISE À JOUR:

flowlayout.cpp

FlowLayout *flowLayout = new FlowLayout; 
void FlowLayout::insertItem(int index, QLayoutItem *item) 
{ 
    if(itemList.size() < index) 
    { 
    itemList.append(item); 
    } 
    else 
    { 
    itemList.insert(index,item); 
    QRect tmp = this->geometry(); 
    } 
    update(); 
} 

flowwindow.cpp

void FlowWindow::addLineBreak() 
{ 

    flowbreak = new FlowLayoutButton(NULL); 

    QLayoutItem *item = new QWidgetItem(flowbreak); 
    flowlayout->insertItem(index, item); 
    //flowlayout->addWidget(flowbreak); 

} 

constructeur flowlayoutbutton.cpp

FlowLayoutButton::FlowLayoutButton(QWidget *_parent):QWidget(_parent) 
{ 
    QBoxLayout *layout = new QHBoxLayout; 


    flowbreak = new QPushButton(tr("-------Label-------")); 
    flowbreak->setGeometry(0, 0, 200,20); 
    layout->addWidget(flowBreak); 

    setLayout(layout); 
} 

Répondre

1

ajouter la méthode suivante:

flowlayout.h:

class FlowLayout : public QLayout 
{ 
public: 
    void insertWidget(int index, QWidget *w); 
    // rest of the class from the example 
}; 

flowlayout.cpp:

// new method 
void FlowLayout::insertWidget(int index, QWidget *w) { 
    addWidget(w); 
    itemList.move(indexOf(w), index); 
} 

maintenant, vous pouvez l'utiliser en appelant simplement (en supposant que vous avez un pointeur vers la mise en page nommée flowLayout):

flowLayout->insertWidget(2,new QPushButton("Button")); 
+0

Merci :). Mais comment peux-tu aussi me dire comment je peux convertir mon widget en 'QLayoutItem'? –

+0

en supposant que vous avez un widget, par exemple 'QLineEdit * widget = nouveau QLineEdit();' simplement utiliser 'QLayoutItem * item = nouveau QWidgetItem (widget);' – WoJo

+0

Oui, cette erreur de compilateur résolu, mais maintenant, il ne met pas à jour le mise en page avec le nouvel élément. Est-ce que cela nécessite une autre fonction 'insertWidget()'? –

Questions connexes