2

我按照这个例子来创建一个流布局:

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

这没有addToIndex(int _index)功能,所以我想实现它。由于此布局使用 QLayoutItems,我想创建一个可以在特定索引之后插入项目的函数。

如何将 Item 的索引作为整数获取并插入到布局中?

更新:

流布局.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();
}

流窗口.cpp

void FlowWindow::addLineBreak()
{

  flowbreak = new FlowLayoutButton(NULL);

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

}

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);
}
4

1 回答 1

1

添加以下方法:

流布局.h:

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

流布局.cpp:

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

现在您可以通过调用来使用它(假设您有一个指向名为 的布局的指针flowLayout):

flowLayout->insertWidget(2,new QPushButton("Button"));
于 2013-07-22T11:10:18.660 回答