写自己的网格布局,像这样:
头
#ifndef MY_GRID_LAYOUT_H
#define MY_GRID_LAYOUT_H
#include <QGridLayout>
class my_grid_layout : public QGridLayout
{
public:
my_grid_layout(QWidget *parent, int max_column_count);
~my_grid_layout();
void add_widget(QWidget* p_widget);
private:
int m_max_column_count;
};
#endif // MY_GRID_LAYOUT_H
来源
#include "my_grid_layout.h"
my_grid_layout::my_grid_layout(QWidget *parent, int max_column_count)
: QGridLayout(parent)
{
m_max_column_count = max_column_count;
}
my_grid_layout::~my_grid_layout()
{
}
void my_grid_layout::add_widget(QWidget* p_widget)
{
int current_row = 0;
int current_column = 0;
while(itemAtPosition(current_row, current_column) != 0)
{
if(current_column == (m_max_column_count-1))
{
current_column = 0;
++current_row;
}
else
{
++current_column;
}
}
QGridLayout::addWidget(p_widget, current_row, current_column);
}
测试在主窗口
#include "test_1.h"
Test_1::Test_1(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
m_grid_layout = new my_grid_layout(this,4);
m_grid_layout->add_widget(new QPushButton("Widget 0", this));
m_grid_layout->add_widget(new QPushButton("Widget 1", this));
m_grid_layout->add_widget(new QPushButton("Widget 2", this));
m_grid_layout->add_widget(new QPushButton("Widget 3", this));
m_grid_layout->add_widget(new QPushButton("Widget 4", this));
m_grid_layout->add_widget(new QPushButton("Widget 5", this));
m_grid_layout->add_widget(new QPushButton("Widget 6", this));
m_grid_layout->add_widget(new QPushButton("Widget 7", this));
m_grid_layout->add_widget(new QPushButton("Widget 8", this));
m_grid_layout->add_widget(new QPushButton("Widget 9", this));
m_grid_layout->add_widget(new QPushButton("Widget 10", this));
m_grid_layout->add_widget(new QPushButton("Widget 11", this));
m_grid_layout->add_widget(new QPushButton("Widget 12", this));
m_grid_layout->add_widget(new QPushButton("Widget 13", this));
QWidget* central_widget = new QWidget(this);
central_widget->setLayout(m_grid_layout);
setCentralWidget(central_widget);
}
Test_1::~Test_1()
{
}
结果
虽然已经有在特定位置处的项目,切换到在网格布局中的下一个位置,这在我的示例为4的最大列计数。我只是切换到下一列,直到我到达第四列。然后我将列重置为0并切换到下一行。只要已经有一个项目,我会这样做。只要那个地方没有物品,我就把我的小部件放在那里。
这只是一个简单的例子,但也许它足以让您使用。
你应该通过错误处理来加强它,小心无尽的循环等......
来源
2012-03-12 00:56:34
Exa