c++ - 使用 Qt 在 Mac 上设置表单行,如 iTunes 信息对话框

标签 c++ qt

我只是一个初学者,我想知道是否可以在 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);

关于你的要点:

  1. QGroupBox 允许您使用setFlat(bool) 删除框架
  2. 对于布局,边距是所包含小部件外部周围的填充。你要的是setSpacing(int)控制布局中项目之间的空间量。
  3. QFormLayout 可能不是您的最佳选择。这通常是为了在一侧有标签而在另一侧有小部件。基本上它是一个 2 列布局。 QGridLayout 会更合适。要减小 QLabel 的大小,您可以为其指定最大或固定大小。比如使用setFixedWidth()setMaximumWidth()在标签上。

关于c++ - 使用 Qt 在 Mac 上设置表单行,如 iTunes 信息对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149644/

相关文章:

对象与对象引用的 C++ 类型错误

c++ - 什么会阻止 GetPixel 工作?

c++ - gluLookAt 不断旋转相机

c++ - Qt moc 失败且没有错误消息

python - pyQt - 如何基于 QGroupBox 选择小部件

macos - 执行macdeployqt时报错no file at "/usr/lib/<libs>"

c++ - 从 Qt 源代码树中编译 Qt 工具

c++ - `mpl::plus< mpl::int_<1>, mpl::int_<2>>::type` 与 `mpl::int_<3>` 不是同一类型?

C++ STL 问题 : allocators

c++ - 如何配置Qt Creator来编译qupzilla?