【发布时间】:2014-02-03 22:12:10
【问题描述】:
经过几个月的研究并在这里询问,我找到了将边距重置为 0 并将填充设置为 0 的解决方案,对小部件进行样式化,并使用 qt 中的样式表从头开始设计。 小部件必须是其他东西的容器。
101 使用 qt4 中的样式表设置小部件边距/填充样式的指南
- 创建任何类型的 BoxModel 样式小部件(不是
QWidget,而是使用QFrame!)。 Check documentation - 为其分配正常布局。
- 如果您不想要默认的边距,它们像 apox 一样大。 8px 或多或少,您必须将布局(不是小部件,您可以,但不起作用)内容边距设置为 0:
setContentsMargins(0,0,0,0)。 - (我不知道是哪种情况)可选(我不知道是哪种情况),将所有内容都设置为极端重置(没有边框,什么都没有),也将间距设置为 0。
setSpacing(0) - 将小部件对象名称设置为自定义名称:
setObjectName("name")。 - 通过您的小部件设置您的样式更改 QFrame:
QFrame#name { things... }
如果您想对自定义小部件进行样式化,并且您有一个自定义类名,并且您打算使用类的名称而不是使用setObjectName,请添加这个小技巧重新实现您的绘制方法,包含在 Qt 样式表文档示例中。
如果你从 QWidget 继承,你需要为 您的自定义 QWidget 如下:
void CustomWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }如果没有设置样式表,上面的代码是无操作的。
警告:确保为您的自定义定义 Q_OBJECT 宏 小部件。
然后您可以使用类名创建样式。 ClassName {}
现在,我与其他人分享了一个严重的问题,但我没有解决方案。 填充根本不起作用。只有边距有效。
所以
ClassName
{ padding: 200px; margin: 5px; }
做同样的事情
ClassName
{ margin: 5px; }
当您必须创建带有边距的子容器 来添加填充时,这会带来麻烦的情况。这给我们带来了无限的等级制度……这根本不合意。
有人知道如何完成我的 101 指南吗?
【问题讨论】:
-
这个
ClassName你的班级。它是QFrame的子类吗? -
不。这是一个 QFrame#name
-
有什么问题吗?可能是答案吗?
-
文档对填充这样说:此属性受
QAbstractItemView子类、QAbstractSpinBox子类、QCheckBox、QComboBox、QFrame、QGroupBox、QLabel支持,QLineEdit、QMenu、QMenuBar、QPushButton、QRadioButton、QSplitter、QTextEdit和QToolTip。所以我认为你不能将它用于自定义QWidget子类。 -
我知道但没有意识到我的小部件是 QWidget 子类,而不是 QFrame,这就是我在帖子中所说的。 :-D 我在 10 分钟前找到了它!不过谢谢!
标签: c++ qt qt4 stylesheet qtstylesheets