c++ Qt 设置QListWidget只有一行列表
时间: 2024-12-31 17:42:00 浏览: 14
在Qt中,如果你想限制`QListWidget`显示每一项仅一行,你可以设置其`itemDelegate`为自定义的`QStyledItemDelegate`,并调整样式以适应单行显示。以下是一个简单的示例:
```cpp
// 创建QListWidget实例
QListWidget *listWidget = new QListWidget(parent);
// 设置自定义的单行QStyledItemDelegate
listWidget->setItemDelegate(new SingleLineItemDelegate(listWidget));
// 自定义SingleLineItemDelegate类
class SingleLineItemDelegate : public QStyledItemDelegate {
public:
explicit SingleLineItemDelegate(QObject *parent = nullptr)
: QStyledItemDelegate(parent) {}
protected:
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override {
// 获取item的内容,这里假设item.text()返回所需的一行文本
QString text = index.model()->data(index, Qt::DisplayRole).toString();
// 设置字体和宽度,以适应单行显示
painter->setFont(option.font);
QRect rect = option.rect;
rect.setWidth(painter->fontMetrics().boundingRect(text).width());
// 使用QTextOption控制文本对齐和换行
QTextOption opt(Qt::AlignLeft | Qt::AlignVCenter);
painter->drawText(rect, opt, text);
}
};
```
通过这种方式,`QListWidget`将展示每个列表项目的文本在一个单独的行内。
阅读全文