0
   statusBar()->addWidget(locationLabel);
   statusBar()->addWidget(formulaLabel, 1);

上面的代码来自一个 Qt 程序。下面的描述来自我按下 F1 时的 Qt 帮助addWidget。如您所见,addWidget应接受 2 个参数。我的问题是为什么上面第一句话可以正常执行?

void QStatusBar::addWidget ( QWidget * widget, int stretch = 0 ) 将给定的小部件添加到此状态栏,如果它还不是此 QStatusBar 对象的子级,则重新设置小部件的父级。当状态栏增长和缩小时,stretch 参数用于计算给定小部件的合适大小。默认拉伸因子为 0,即为小部件提供最小空间。

小部件位于第一个永久小部件的最左侧(请参阅 addPermanentWidget()),并且可能会被临时消息遮挡。

4

1 回答 1

5

这是因为 C++ 有default arguments 的概念,这意味着一个函数声明为

void f(int i, int j=1);

可以调用

f(42);

f(42,43);

在第一种情况下,函数调用等价于

f(42,1);

在你的情况下,

addWidget(label);

相当于

addWidget(label,0);
于 2013-03-18T14:56:58.407 回答