如何在QT中对齐表格小部件的文本

时间:2015-09-28 11:59:23

标签: c++ qt

  

在我的应用程序中,我有表格小部件,我想为表格中的所有单元格设置文本对齐中心。为此我试过,

 QTableWidgetItem * protoitem = new QTableWidgetItem();
 protoitem->setTextAlignment(Qt::AlignRight);
 tableWidget->setItemPrototype(protoitem);
  

但它不能正常工作,指导我,

1 个答案:

答案 0 :(得分:1)

您需要使用委托来完成此任务。使用以下内容覆盖委托paint事件:

QAlignmentDelegate.h

#include <QStyledItemDelegate>

class QAlignmentDelegate : public QStyledItemDelegate
{
public:

    explicit QAlignmentDelegate(Qt::Alignment alignment, QObject* parent = 0)
    : QStyledItemDelegate(parent),
    m_alignment(alignment)
    {

    }

    virtual void QAlignmentDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        QStyleOptionViewItem alignedOption(option);
        alignedOption.displayAlignment = m_alignment;
        QStyledItemDelegate::paint(painter, alignedOption, index);
    }

private:

    Qt::Alignment   m_alignment;                                                                    ///< Stores the alignment to use

};

然后只需将委托分配给视图。在您mainWindow类中(或您创建或使用视图的任何位置),委托可以按如下方式使用:

MainWindow代码

#include "QAlignmentDelegate.h"
...


QAlignmentDelegate* myDelegate = new QAlignmentDelegate(Qt::AlignmentCenter);
QTableView* myTableView = new QTableView(this);
myTableView->setItemDelegate(myDelegate);
myTableView->setModel(...); // start using the view

您可以在创建委托时指定任何Qt :: Alignment(或使用OR的组合)。

或者,如果您编写/控制模型代码,则可以实现Qt::AlignmentRole并返回&#39; Qt::AlignHCenter以获取要与其对齐的数据。