我试图在Qt布局中使小部件部分重叠。我当前的布局如下所示,它使用一个包含四个 QVBoxLayout 子 QHBoxLayout 的 QHBoxLayout 实现:
为了实现这样的目标(请注意,存在横向和纵向重叠),我正在尝试重新组合同一套西装的卡片:
不幸的是,我读过的所有Qt文档和所有Stack溢出帖子都试图避免小部件的重叠,而不是去寻找它。也许有一种方法可以在小部件之间设置负间距,或者强制布局具有最大宽度(例如,根据一套卡的数量(在这种情况下))?还是必须创建自定义布局?也许我根本不应该使用布局?
如果有任何帮助,我将使用如下代码将这些小部件添加到布局中:
hLayout[card.getSuit()-1]->addWidget(cardWidget, 0, align);
上云精选
2核2G云服务器 每月9.33元起,个人开发者专属3年机 低至2.3折
您将需要实现QLayout的子类。QT文档中有一个解决问题的详细示例: 布局管理
基本上,您需要定义以下内容:
在大多数情况下,您还将实现minimumSize()。
为了您的方便,下面我复制了示例中最重要的代码部分:
class CardLayout : public QLayout public: CardLayout(QWidget *parent, int dist): QLayout(parent, 0, dist) {} CardLayout(QLayout *parent, int dist): QLayout(parent, dist) {} CardLayout(int dist): QLayout(dist) {} ~CardLayout(); void addItem(QLayoutItem *item); QSize sizeHint() const; QSize minimumSize() const; int count() const; QLayoutItem *itemAt(int) const; QLayoutItem *takeAt(int); void setGeometry(const QRect &rect); private: QList<QLayoutItem*> list; void CardLayout::setGeometry(const QRect &r) QLayout::setGeometry(r); if (list.size() == 0) return; int w = r.width() - (list.count() - 1) * spacing(); int h = r.height() - (list.count() - 1) * spacing(); int i = 0; while (i < list.size()) {