qt listview 列表文字显示不全,如何用悬浮显示?

在Qt中,如果你想要在ListView中让长文本悬浮显示,你可以通过设置item的setTextAlignment方法来实现文本的左对齐,并且通过重写delegate来实现悬浮显示的效果。

下面是一个简单的例子,展示如何使用delegate来实现左悬浮的文本显示:

#include <QApplication>
#include <QListView>
#include <QStringListModel>
#include <QWidget>
#include <QVBoxLayout>
#include <QAbstractItemDelegate>
#include <QPainter>

class LeftAlignedDelegate : public QStyledItemDelegate {
public:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
        QStyleOptionViewItem viewOption(option);
        initStyleOption(&viewOption, index);

        // 设置文本左对齐
        QTextOption textOption(Qt::AlignLeft);
        viewOption.textAlignment = Qt::AlignLeft;
        viewOption.textElideMode = Qt::ElideNone; // 禁用省略模式

        // 绘制文本
        painter->save();
        painter->translate(option.rect.left(), option.rect.top());
        painter->setRenderHint(QPainter::TextAntialiasing);
        painter->drawText(option.rect.adjust(0, 0, -2, 0), viewOption.text, textOption);
        painter->restore();
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout layout(&window);

    QListView listView;
    layout.addWidget(&listView);

    QStringListModel model;
    model.setStringList(QStringList() << "这是一段很长的文本,将会左悬浮显示" << "另一段长文本,也会左悬浮显示");
    listView.setModel(&model);

    // 设置自定义delegate
    LeftAlignedDelegate delegate;
    listView.setItemDelegate(&delegate);

    window.show();
    return app.exec();
}

在这个例子中,我们创建了一个LeftAlignedDelegate类,它继承自QStyledItemDelegate。在paint方法中,我们将文本对齐设置为左对齐,并且关闭了文本的省略模式。这样,当文本长度超出item的宽度时,它会按照原始长度显示,并不会自动截断。

然后,我们在主函数中创建了一个QListView,并且为它设置了一个自定义的delegate。运行程序后,你会看到长文本以左对齐的形式悬浮显示在ListView中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在QtListView显示QList<int>数据,需要使用QAbstractListModel作为数据模型并重写rowCount、data和roleNames函数。 以下是一个简单的例子: ```cpp class IntListModel : public QAbstractListModel { Q_OBJECT public: IntListModel(QObject *parent = nullptr) : QAbstractListModel(parent) {} int rowCount(const QModelIndex &parent = QModelIndex()) const override { return m_data.count(); } QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override { if (!index.isValid() || index.row() >= m_data.count()) return QVariant(); if (role == Qt::DisplayRole || role == Qt::EditRole) return m_data.at(index.row()); return QVariant(); } QHash<int, QByteArray> roleNames() const override { QHash<int, QByteArray> roles; roles[Qt::DisplayRole] = "data"; roles[Qt::EditRole] = "data"; return roles; } void setData(const QList<int> &data) { beginResetModel(); m_data = data; endResetModel(); } private: QList<int> m_data; }; ``` 在这个例子中,我们定义了一个IntListModel,继承自QAbstractListModel。rowCount函数返回数据列表中的元素数量,data函数返回指定索引的元素值,roleNames函数定义了数据模型中的角色名。setData函数用于设置数据列表。 在界面代码中,我们可以将IntListModel设置为ListView的model,并将数据列表通过setData函数传递给IntListModel: ```cpp QList<int> data = {1, 2, 3, 4, 5}; IntListModel *model = new IntListModel(this); model->setData(data); ListView { model: model delegate: Text { text: model.data } } ``` 在这个例子中,我们创建了一个QList<int>类型的数据列表,实例化了IntListModel,并通过setData函数将数据传递给IntListModel。然后将IntListModel设置为ListView的model,并将每个元素用Text组件显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值