QGridLayout的addWidget阻止了我的项目

时间:2012-09-04 10:19:07

标签: c++ qt qgridlayout

问题似乎很简单,但我没有在2小时内解决。我有这个布局:

QGridLayout* view = new QGridLayout(this);
view->setSpacing(15);
view->addWidget(x0,2,1);
view->addWidget(x1,1,1);
view->addWidget(keyboard,2,0);
view->addWidget(x2,1,0);
view->addWidget(draw,0,0,0,1);
resize ( 650,650);
this->setLayout(view);

我需要“绘制”(项目的图形部分),占据项目的顶端(第0行,第0列到第1列)。

问题在于我在构造函数中放置的任何值:

void QGridLayout :: addWidget (QWidget * widget, int fromRow, fromColumn int, int rowSpan, columnSpan int, Qt :: Alignment alignment = 0) 

所有其他小部件都被阻止,我的程序运行时无法进行交互。

使用经典构造函数

void QGridLayout :: addWidget (QWidget * widget, int row, int column, Qt :: Alignment alignment = 0) 

没问题,但Widget“draw”不是我想要的(只有1列而不是2列)。

任何人都知道我做错了吗?

PS:窗口小部件没有布局设置(除了数字键盘以固定键的最小高度)。

1 个答案:

答案 0 :(得分:0)

行跨度是文字,而不是索引变量。如果要放置2列/行跨度,则必须将值2放在span params中。因此,您需要将此view->addWidget(draw,0,0,0,1);修改为view->addWidget(draw,0,0,1,2);。行/列跨度为1将仅包括“来自行/列”而不是“来自行/列+ 1”