我只是一个初学者,我想知道是否可以像在iTunes中的信息对话框一样在Mac上创建表单小部件。
我尝试使用:
此外,我对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);
}
答案 0 :(得分:2)
我可以通过很多方式来实现。 Qt为您提供了实现此目的所需的所有可能布局。您可以使用QGridLayout
执行此操作,并添加具有不同“单元格”跨度的小部件,并控制行和列大小以适应。或者你可以用一堆嵌套的垂直/水平布局来做到这一点。
例如,您可以在QVBoxLayout
中按adding the widgets with a left alignment将标签和字段组合在一起,然后在项目之间将间距设置为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);
关于你的要点:
setFlat(bool)
setSpacing(int)
来控制布局中项目之间的空间量。QFormLayout
可能不是你最好的选择。这通常是为了在一侧有标签而在另一侧有小部件。基本上它是2列布局。 QGridLayout更合适。要减小QLabel
的大小,可以给它一个最大值或修复大小。例如在标签上使用setFixedWidth()
或setMaximumWidth()
。答案 1 :(得分:1)
所以我在用QtCreator玩了一下之后终于得到了预期的结果。
以下是可能感兴趣的代码:
myLineEdit:myLineEdit(const QString &header)
{
m_lineEdit = new QLineEdit;
m_groupBox = new QGroupBox;
QFont groupFont;
groupFont.setPixelSize(10);
groupFont.setBold(true);
m_groupBox->setTitle(header);
m_groupBox->setFlat(true);
m_groupBox->setFont(groupFont);
m_groupBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
QFont lineFont;
lineFont.setPixelSize(13);
lineFont.setBold(false);
m_lineEdit->setFont(lineFont);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(m_lineEdit);
layout->setContentsMargins(0, 10, 0, 0);
layout->setSpacing(10);
layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
m_groupBox->setLayout(layout);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(m_groupBox);
setLayout(mainLayout);
}
但有一条评论:只能在Qt 5上使用,因为在4.8上,setFlat()方法将在标题和QLineEdit之间显示一条分隔线。
感谢jdi的帮助!