我试图在QT中创建一个看起来像这样的自定义小部件:
红色方块将显示图像/图标。 如何通过编写小部件来实现此布局?我需要创建许多具有相同布局但在标签中具有不同值的小部件。理想情况下,我会在主窗口中将这些小部件显示为带有滚动条的列表。但是现在我正在努力通过代码为这些小部件创建布局。非常感谢任何帮助。
答案 0 :(得分:3)
您需要将设计拆分为单独的细分。每个段可以是单独的子布局或小部件。在您的示例中,我看到以下段:
现在让我们编写这个组合代码:
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);
[..]
答案 1 :(得分:1)
使用此功能。
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();
结果:
答案 2 :(得分:0)
我通常做的是:
注意,如果列表的项目数太大,它的执行速度会非常慢。
P.S。如果您确实需要编码布局,只需使用Qt设计器生成的代码。