zoukankan      html  css  js  c++  java
  • QTableView中使用Delegate方式来实现对特定列的文本进行换行

    问题:由于表格的一个列中,有个别文本过长,默认情况下,QTableView不支持对某列的文本换行,所以需要通过Delegate方式来实现这样的效果

    头文件的Delegate

     1 #pragma once
     2 
     3 #include <QStyledItemDelegate>
     4 #include <QPainter>
     5 
     6 class WrapTextDelegate : public QStyledItemDelegate
     7 {
     8     Q_OBJECT
     9 
    10 public:
    11     explicit WrapTextDelegate(QObject *parent = Q_NULLPTR);
    12     ~WrapTextDelegate();
    13 
    14 public:
    15     void paint(QPainter *painter, const QStyleOptionViewItem &option,
    16         const QModelIndex &index) const override;
    17 };

    Delegate实现文件:

     1 #include "WrapTextDelegate.h"
     2 
     3 WrapTextDelegate::WrapTextDelegate(QObject *parent)
     4     : QStyledItemDelegate(parent)
     5 {
     6 }
     7 
     8 WrapTextDelegate::~WrapTextDelegate()
     9 {
    10 }
    11 
    12 void WrapTextDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    13 {
    14     (void)(index);
    15     
    16     QString text = index.model()->data(index, Qt::DisplayRole).toString();
    17     //绘制文本  
    18     painter->drawText(option.rect, Qt::TextWordWrap | Qt::AlignVCenter | Qt::AlignLeft, text);
    19     //如果当前有焦点,就绘制一个焦点矩形,否则什么都不做  
    20    // drawFocus(painter, option, option.rect);
    21 
    22 
    23 }

    最后在初始化QTableView的代码中写下:

    1 auto delegate = new WrapTextDelegate();
    2 
    3 ui->table->setItemDelegateForColumn(column, delegate);

    这样就完成了。如果你想用setTextElideMode(Qt::TextElideMode mode)来达到Wrap文本的效果,也可以,不过我觉得这么做不太美观。

    references:
    http://www.cppblog.com/biao/archive/2009/08/07/92577.html
    http://blog.csdn.net/xbnlkdbxl/article/details/51396336
    http://bbs.csdn.net/topics/390834107

  • 相关阅读:
    EF6的多线程与分库架构设计实现
    Windows环境下安装Ionic
    Win7 下安装RabbitMQ
    在VS Nuget命令行下进行EF数据库迁移
    WebSocket与Tcp连接
    常用浏览器内核
    异步代码
    TCP与UDP的区别
    二分查找(折半查找)
    顺序查找
  • 原文地址:https://www.cnblogs.com/foohack/p/8328837.html
Copyright © 2011-2022 走看看