在我的应用程序中,我有表格小部件,我想为表格中的所有单元格设置文本对齐中心。为此我试过,
QTableWidgetItem * protoitem = new QTableWidgetItem();
protoitem->setTextAlignment(Qt::AlignRight);
tableWidget->setItemPrototype(protoitem);
但它不能正常工作,指导我,
答案 0 :(得分:1)
您需要使用委托来完成此任务。使用以下内容覆盖委托paint
事件:
#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
类中(或您创建或使用视图的任何位置),委托可以按如下方式使用:
#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
以获取要与其对齐的数据。