1

我有一个使用 QTDesigner 完成的 panel.ui 文件。这是一个 QFrame 类,矩形形状,上面很少有标签。我有一个 QListWidget 类,我在其中插入了 panel.ui 的 3 个实例。我创建了一个QListWidgetItem然后使用List->SetItemWidget(..)来填充我的列表。
结果是一个包含三个面板的列表。我还能够使用 dragDropMode internalMove 在列表中移动面板。

我还测试了当我点击面板时将面板向右移动的能力,这很有效:

in procedure List::mousePressEvent(QMouseEvent *event)    
Panel *child = static_cast<Panel*>(childAt(event->pos()))  
...   
int y= child->pos().y();   
int x = child->pos().x();   
child->move (x +10, y);   `

问题:当我运行应用程序并显示列表时,我希望所有面板都显示为向右偏移 10 个。this->setItemWidget(myPanelItem, myPanel);因此,在我尝试使用上述方法后,在 List 构造函数和循环内部myPanel->move(),但它似乎不起作用。

我运行该应用程序,面板显示时没有我的偏移量(不知道为什么?)但是当我单击一个时,它会发生变化。

4

2 回答 2

0

move()由于小部件在布局中,因此无法可靠地工作。(嗯,不是 a 中的布局QLayout,但效果是可比较的:当应用程序中的任何指标发生变化时,例如您调整列表大小或滚动列表,小部件将由列表小部件重新定位。)

您可以做的是将您的实际小部件包装在具有布局边距的容器小部件中:

QWidget* wrapIntoContainerForOffset(QWidget* widget, int offset /*in pixels*/) {
    QWidget* container = new QWidget;
    QHBoxLayout* layout = new QLayout(container);
    layout->setContentsMargins(/*left=*/ offset, /*others=*/ 0, 0, 0);
    layout->addWidget(widget);
    return container;
}

然后将这些容器添加到列表小部件中。

于 2013-01-18T21:34:22.153 回答
0

你试过样式表吗?QListWidget 支持 Box 模型(http://doc.qt.digia.com/qt/stylesheet-customizing.html#box-model)。因此,您可能想尝试在样式表中使用边距。

样式表参考:http ://doc.qt.digia.com/qt/stylesheet-reference.html

于 2013-01-19T00:39:54.630 回答