我只是一个初学者,我想知道是否可以在Mac上像iTunes中的信息对话框一样创建表单小部件。
我尝试使用:
QGroupBox:我找不到摆脱框架的方法。
创建我自己的窗口小部件:我找不到使用QVBoxLayout来固定标签和QLineEdit小部件之间的间距的方法(实际上,我不确定我是否很好地理解了边距/间距之间的差异)。
QFormLayout:使用setrowWrapPolicy :: WrapAllRows之后,我找不到缩小QLabel大小的方法
另外,我对QtDesigner还不太满意,所以我想使用它(暂时)
提前致谢
编辑:程序上的一些精度。我在Mac OS X Mountain Lion上使用QtCreator 2.6.1和Qt 4.8.1和5.0。
编辑2:这是代码。
QWidget的子类:
MCLineEdit::MCLineEdit(const QString &header)
{
m_lineEdit = new QLineEdit;
m_lineTitle = new QLabel(header);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(m_lineTitle);
layout->addWidget(m_lineEdit);
layout->setSpacing(0);
setLayout(layout);
}
显示小部件
myView::myView(QWidget *parent) :
QWidget(parent)
{
setFixedSize(600, 500);
MCLineEdit *lineEdit1 = new MCLineEdit("Test 1");
MCLineEdit *lineEdit2 = new MCLineEdit("Test 2");
MCLineEdit *lineEdit3 = new MCLineEdit("Test 3");
MCLineEdit *lineEdit4 = new MCLineEdit("Test 4");
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(lineEdit1);
mainLayout->addWidget(lineEdit2);
mainLayout->addWidget(lineEdit3);
mainLayout->addWidget(lineEdit4);
mainLayout->setSpacing(0);
setLayout(mainLayout);
}
最佳答案
我可以肯定,这可以通过很多方式来完成。 Qt为您提供了实现此目标所需的所有可能的布局。您可以使用QGridLayout
进行操作,并添加具有不同“单元格”跨度的窗口小部件,并控制行和列的大小以适应需要。或者,您也可以使用一堆嵌套的垂直/水平布局来实现。
例如,您可以通过adding the widgets with a left alignment在QVBoxLayout
中将标签和字段分组在一起,然后将项目之间的间距设置为0:
layout->setSpacing(0);
layout->addWidget(aLabel, Qt::AlignLeft);
layout->addWidget(aLineEdit, Qt::AlignLeft);
mainVerticalLayout->addLayout(layout);
对于轨道号之类的东西,它只是嵌套的布局:
vLayout->addWidget(aLabel);
hLayout->addWidget(aCheckbox);
hLayout->addWidget(aLabel);
hLayout->addWidget(aCheckbox);
vLayout.addLayout(hLayout);
关于您的要点:
QGroupBox允许您使用
setFlat(bool)
删除框架对于布局,边距是所包含的小部件外部周围的填充。您想要的是
setSpacing(int)
来控制布局中项目之间的空间量。QFormLayout
可能不是您此处的最佳选择。这通常是因为一侧有标签,另一侧有小部件。基本上是2列布局。 QGridLayout会更合适。为了减小QLabel
的大小,可以给它一个最大值或一个固定大小。例如在标签上使用setFixedWidth()
或setMaximumWidth()
。