繁体   English   中英

如何为小部件创建自定义布局

[英]How to create custom layout for widget

我正在尝试在QT中创建一个自定义窗口小部件,如下所示: 在此处输入图片说明

红色方块将显示图像/图标。 如何通过编码小部件来实现此布局? 我将需要创建许多具有相同布局但标签中的值不同的小部件。 理想情况下,我将这些小部件显示为列表,并在主窗口中带有滚动条。 但是现在,我正在努力通过代码为这些小部件创建布局。 任何帮助深表感谢。

您需要将设计拆分为单独的细分。 每个段可以是单独的子布局或小部件。 在您的示例中,我看到以下部分:

  • 大红色图标,
  • 两个标签:TextLabel和2014年11月6日...
  • 两个标签构成垂直框布局,
  • 垂直框布局和大红色图标构成水平框布局,
  • 小红色矩形构成单独的布局,
  • 所有布局构成主布局。

现在让我们编写此组合的代码:

QLabel *largeRed = new QLabel(this); // Should set an image for this label
QLabel *lbl1 = new QLabel("06-November-2014...", this);
QLabel *lbl2 = new QLabel("TextLabel", this);

QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(lbl1);
vLayout->addWidget(lbl2);
vLayout->addStretch();

QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(largeRed);
hLayout->addLayout(vLayout);

QLabel *smallRed = new QLabel(this); // Should set an image for this label
QHBoxLayout *hLayout2 = new QHBoxLayout;
hLayout2->addWidget(smallRed, 0, Qt::AlignRight);

QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addLayout(hLayout);
mainLayout->addLayout(hLayout2);
[..]

用这个。

QPixmap big(75,65);
big.fill(Qt::red);
QPixmap small(25,15);

QVBoxLayout *box = new QVBoxLayout;

QWidget *window = new QWidget;
QLabel *bigLab = new QLabel;
QLabel *smallLab = new QLabel;
QLabel *textLab = new QLabel("Two");
bigLab->setPixmap(big);
smallLab->setPixmap(small);

QHBoxLayout *hLay = new QHBoxLayout;
hLay->addWidget(bigLab);
hLay->addWidget(textLab);

QHBoxLayout *vLay = new QHBoxLayout;
vLay->addWidget(smallLab,0,Qt::AlignRight);

box->addLayout(hLay);
box->addLayout(vLay);

window->setLayout(box);
window->show();

结果:

在此处输入图片说明

我通常要做的是:

  1. 使用Qt Designer / Creator使用丰富的版面设计功能来设计版面。
  2. 将其实例(从代码)设置为列表或表窗口小部件的项目窗口小部件。

请注意,如果列表中的项目计数太大,则其执行速度会非常慢。

PS:如果您真的需要对布局进行编码,只需使用Qt设计器生成的代码即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM