Looked a bit into the layout issues. I&#39;ve found that the following script gives a fairly desirable result. Forget about the stretch factor stuff for now, because unless a maximum or fixed size is set for a row/column, there is no guarantee that the row/column will not expand.<br>
<br>library(qtpaint)<br><br>fill_painter &lt;- function(color) {<br>  function(item, painter) qdrawRect(painter, 0, 0, 1, 1, fill = color)<br>}<br><br>layout_layer &lt;- function(Color, ...) {<br>  qlayer(figLayer, fill_painter(Color), limits = qrect(0, 0, 1, 1), ...)<br>
}<br><br>scene &lt;- qscene()<br>figLayer &lt;- qlayer(scene)<br>layout &lt;- figLayer$gridLayout()<br><br>titleLayer &lt;- layout_layer(&quot;red&quot;, colSpan = 2)<br>yaxisLayer &lt;- layout_layer(&quot;blue&quot;, row = 1)<br>
plotLayer &lt;- layout_layer(&quot;green&quot;, row = 1, col = 1)<br>xaxisLayer &lt;- layout_layer(&quot;yellow&quot;, row = 2, col = 1)<br><br>## Set the maximum widths/heights:<br><br>layout$setRowMaximumHeight(0, 50)<br>
layout$setColumnMaximumWidth(0, 50)<br>layout$setRowMaximumHeight(2, 50)<br><br>## Could use Preferred here, with stretch factor set to zero, but this<br>## breaks when a layer spans multiple cells. It is hard to say if this<br>
## is a bug in Qt, since QGraphicsGridLayout is largely<br>## undocumented. QGridLayout says a stretch-zero row/column can grow<br>## when no other row/column can grow. Setting a fixed or minimum<br>## width/height probably sets undue restrictions on the layout. The<br>
## user should be able to shrink the window down, even if it is not<br>## longer possible to draw the data effectively. Thus, it&#39;s probably<br>## best to set the maximum.<br><br>## It is probably cleaner to set the dimensions directly on the layer:<br>
## titleLayer$setMaximumHeight(50)<br>## xaxisLayer$setMaximumHeight(50)<br>## yaxisLayer$setMaximumWidth(50)<br>## But this currently crashes due to a (reported) bug in Smoke.<br><br>qplotView(scene)<br><br><br>