QDockWidget设置初始大小的一个解决方案

本文介绍了一种自定义QDockWidget初始大小的方法,通过创建一个名为SizeDockWidget的类来实现,该类允许在QtDesigner中通过提升的方式使用,并能有效解决QDockWidget初始大小不可调整的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QDockWidget仅仅作为其子控件的一个包装,因此对其使用resize()或者setGeometry()均不管用,这造成QDockWidget的初始大小常常不尽如人意。
网上有前辈提出通过调用QDockWidget的setMaximumSize()和setFixedSize()来实现初始大小的定制,但却限制了QDockWidget的最大尺寸,无法通过鼠标拖动来改变大小,因而显得较为麻烦和局限。
kenby在他的博文设置QDockWidget的初始大小中给出了一个解决方案,受他的文章启发,可设计一个QWidget的继承类,在QtDesigner中通过提升来使用。
继承类SizeDockWidget:

<code class="language-cpp hljs  has-numbering"><span class="hljs-keyword">class</span> SizeDockWidget : <span class="hljs-keyword">public</span> QWidget
{
   Q_OBJECT
<span class="hljs-keyword">public</span>:
   <span class="hljs-keyword">explicit</span> SizeDockWidget(QWidget * parent = <span class="hljs-number">0</span>, Qt::WindowFlags f = <span class="hljs-number">0</span>)
      : QWidget(parent,f) {
      m_szHint = geometry().size();
   }

   <span class="hljs-keyword">void</span> updateSizeHint(QSize & szHint2Set) {
      m_szHint = szHint2Set;
      updateGeometry();
   }

   <span class="hljs-keyword">virtual</span> QSize sizeHint() <span class="hljs-keyword">const</span> {
      <span class="hljs-keyword">return</span> m_szHint;
   }
<span class="hljs-keyword">protected</span>:
   QSize m_szHint;
};</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li></ul>

上面的类可以通过调用updateSizeHint来改变控件sizeHint函数的返回值。
使用方法:在QtDesigner中,将SizeDockWidget添加入提升的类中,然后在UI设计器中选中QDockWidget控件的子控件(在右边的对象浏览器中可见该子控件的类型是QWidget),点鼠标右键,选择“提升”为SizeDockWidget类,然后便可以在代码中随意设置对应QDockWidget的初始大小了。



FROM:  http://blog.youkuaiyun.com/johnyork/article/details/49561839



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值