我只是一个初学者,我想知道是否可以在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 alignmentQVBoxLayout中将标签和字段分组在一起,然后将项目之间的间距设置为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()

07-28 01:32
查看更多