lwei24 |
2022-04-28 14:59 |
QTabView代理文本的疑问
如题,写了一个测试的demo,具体代码如下:
- #if _MSC_VER >= 1600
#pragma execution_character_set("utf-8") #endif
#include "frmmain.h" #include "itemdelegate.h"
FrmMain::FrmMain(QWidget *parent) : QMainWindow(parent) { this->initUI(); }
void FrmMain::initUI() { this->resize(850, 400); m_tableView = new QTableView(this); QStandardItemModel* model = new QStandardItemModel();
/* 设置表格标题行(输入数据为QStringList类型) */ model->setHorizontalHeaderLabels({"ID", "文本"}); /* 自适应所有列,让它布满空间 */ m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ItemDelegate* delegate1 = new ItemDelegate; m_tableView->setItemDelegateForColumn(1, delegate1); for (int i = 0; i < 10; i++) { model->setItem(i, 0, new QStandardItem(QString("%1").arg(i))); /* 加载第一列(ID)数据 */ model->setItem(i, 1, new QStandardItem(QString("User%1").arg(i))); /* 加载第二列(User Name)数据 */ }
/* 设置表格视图数据 */ m_tableView->setModel(model); this->setCentralWidget(m_tableView); } #include "itemdelegate.h"
ItemDelegate::ItemDelegate(QObject *parent) : QStyledItemDelegate(parent) {
}
void ItemDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index) const {
if(index.isValid()) { painter->save(); int nColumn = index.column(); QVariant vItemData = index.data(nColumn + (Qt::UserRole + 1)); QStyleOptionViewItem viewOpt(option); if(1 == nColumn) { QString strID = vItemData.toString(); painter->drawText(viewOpt.rect, Qt::AlignCenter, strID); } painter->restore(); } QStyleOptionViewItem itemOption(option); if(itemOption.state&QStyle::State_HasFocus) { itemOption.state=itemOption.state^QStyle::State_HasFocus; } QStyledItemDelegate::paint(painter,itemOption,index); }
#include <QApplication>
#include "frmmain.h"
int main(int argc, char *argv[]) { QApplication app(argc, argv);
FrmMain w; w.show();
return app.exec(); }
为啥在代理已经对文本居中显示了,可是运行的结果显示并不是居中的?各位大佬,请问为啥这样做代理好像没有作用?有什么办法可以让代理起作用吗?
|
|