Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么定制的QWidget,而不是内置的QWidget,具有非零的边距?_Qt_Qt5 - Fatal编程技术网

Qt 为什么定制的QWidget,而不是内置的QWidget,具有非零的边距?

Qt 为什么定制的QWidget,而不是内置的QWidget,具有非零的边距?,qt,qt5,Qt,Qt5,这是一个包含一系列小部件的QFormLayout的屏幕截图。请注意,顶部和底部输入小部件没有水平对齐到中间两行。还请注意,左侧的标签未垂直对齐中间两行 区别在于,顶部和底部的小部件是普通的QLineEdit和QTextEdit小部件,第二行是QWidget,其中QHBoxLayout包含QSpinBox和QDateTimeEdit,第三行是QStackedLayout,其中包含QWidget,每个QWidget内都有QHBoxLayout和API提供的小部件 看起来中间这两个有额外的利润。我可

这是一个包含一系列小部件的QFormLayout的屏幕截图。请注意,顶部和底部输入小部件没有水平对齐到中间两行。还请注意,左侧的标签未垂直对齐中间两行

区别在于,顶部和底部的小部件是普通的QLineEdit和QTextEdit小部件,第二行是QWidget,其中QHBoxLayout包含QSpinBox和QDateTimeEdit,第三行是QStackedLayout,其中包含QWidget,每个QWidget内都有QHBoxLayout和API提供的小部件

看起来中间这两个有额外的利润。我可以(部分)通过在普通QWidgets的布局上调用QLayout::setContentsMargins来改善这种情况。事实上,在上面的图片中,我已经看到了,没有这些,情况会更糟

我没有干预应用程序中的样式,这都是系统默认设置。这似乎影响了Ubuntu15.04上的Qt5,我不认为我在它是Qt4应用程序时看到过这一点

我在顶级小部件中尝试了
setStyleSheet(“QWidget{margin:0;}”)
,这带来了各种各样的问题。我还尝试了变体
setStyleSheet(“.QWidget{margin:0;}”)
,但没有效果。setspace也没有效果,在样式表中设置
padding:0
也不能解决这个问题

我尝试过的任何东西似乎都无法使这些定制布局QWidget的间距与API提供的Widget保持一致


我错过了什么?谢谢。

您观察到的是多平台用户界面的挣扎,以及一些小部件非常糟糕的简单事实。由于时间有限,任务繁重,开发团队不会公平地对待这组特性。强大的小部件和布局,如标准小部件,
QGridLayout
,将日夜维护,以确保无缺陷,而传统的小部件,如
QStackedWidget
,将被推到维护队列的底部

我试图单独使用designer复制您的问题,下面是我得到的(Qt 4.8):

您可以看到:

  • 带有小部件容器的第二行有很大的边距
  • 第三行甚至没有显示组合框(我发誓它在那里!!)
我的两分钱:

  • 第二排的行为有所不同。因为我使用了
    Qt4
    而您使用了
    Qt5
    ,并且我们都将
    QHBoxLayout
    边距设置为零,这意味着在Qt5或linux实现中存在潜在的回归这证实了您的怀疑
  • QStackedWidget
    非常可怕。它是一个提供快速基本功能的常用小部件,而不是实现真正的交易。这里它将是一个带有
    QStackedLayout
    的小部件。就像我说的,我怀疑当需要大的开发努力时,这些小部件会受到较少的喜爱
  • 在这些情况下,使用
    QGridLayout
    而不是具有widget布局的widget的
    QStackedLayout
    。它将解决标签不对齐的问题。一开始很难设置,但结果通常很好
  • 顺便说一下,我切换到一个具有stackedlayout的小部件,结果如下:

    您是否尝试过
    setContentsMargins()
    ?正如我上面所说,是的。它部分起作用。我也想知道为什么需要它。对不起,打字错误,这一直是一个QSTACKED布局。在任何情况下,我都会在不使用堆叠布局的地方遇到类似的问题,只不过是盒子里的盒子。