【发布时间】:2014-04-26 11:40:15
【问题描述】:
我无法弄清楚 Qt 有什么问题。我正在尝试创建一个简单的布局,如下所示:
+-------+-----------+
| | Label1 |
| Thumb |-----------+
| | Label2 |
| |(multiline)|
+-------+-----------+
这是执行此操作的代码:
labelInfoName = new QLabel("Sample name", this);
labelInfoDetails = new QLabel("Sample details...", this);
labelInfoDetails->setAlignment(static_cast<Qt::Alignment>(Qt::AlignTop | Qt::AlignLeft));
QVBoxLayout* textInfoLayout = new QVBoxLayout(this);
textInfoLayout->addWidget(labelInfoName);
textInfoLayout->addWidget(labelInfoDetails, 1);
// Create info pane
imgInfoThumbnail = new QLabel(this);
imgInfoThumbnail->setFixedSize(64, 64);
imgInfoThumbnail->setStyleSheet("background: black;");
QHBoxLayout* infoLayout = new QHBoxLayout(this);
infoLayout->addWidget(imgInfoThumbnail);
infoLayout->addLayout(textInfoLayout, 1)
this->setLayout(infoLayout);
而this 是QWidget。这是在派生自QWidget 的类中设置布局的代码。然后我想将它显示为一个可停靠的小部件,我在 QMainWindow 类中这样做:
widget = new Widget(this); // Widget that was set up above
QDockWidget* dockWidget = new QDockWidget("Project", this);
dockWidget->setWidget(widget);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
但这是我得到的:
我需要小部件成为可以放置在任何地方的自定义控件。以前,它被定义为QDockWidget,而不是调用this->setLayout(),我创建了一个QWidget 对象,这按预期工作:
QWidget* widget = new QWidget(this);
widget->setLayout(infoLayout);
this->setWidget(widget);
但我现在的做法是让它们相互叠加。我做错了什么?
【问题讨论】: