• 1227阅读
  • 0回复

[讨论]QTabView代理文本的疑问 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2022-04-28


如题,写了一个测试的demo,具体代码如下:

  1. #if _MSC_VER >= 1600
  2. #pragma execution_character_set("utf-8")
  3. #endif
  4. #include "frmmain.h"
  5. #include "itemdelegate.h"
  6. FrmMain::FrmMain(QWidget *parent) :
  7.     QMainWindow(parent)
  8. {
  9.     this->initUI();
  10. }
  11. void FrmMain::initUI()
  12. {
  13.     this->resize(850, 400);
  14.     m_tableView = new QTableView(this);
  15.     QStandardItemModel* model = new QStandardItemModel();
  16.     /* 设置表格标题行(输入数据为QStringList类型) */
  17.     model->setHorizontalHeaderLabels({"ID", "文本"});
  18.     /* 自适应所有列,让它布满空间 */
  19.     m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  20.     ItemDelegate* delegate1 = new ItemDelegate;
  21.     m_tableView->setItemDelegateForColumn(1, delegate1);
  22.     for (int i = 0; i < 10; i++)
  23.     {
  24.         model->setItem(i, 0, new QStandardItem(QString("%1").arg(i)));              /* 加载第一列(ID)数据 */
  25.         model->setItem(i, 1, new QStandardItem(QString("User%1").arg(i)));         /* 加载第二列(User Name)数据 */
  26.     }
  27.     /* 设置表格视图数据 */
  28.     m_tableView->setModel(model);
  29.     this->setCentralWidget(m_tableView);
  30. }
  31. #include "itemdelegate.h"
  32. ItemDelegate::ItemDelegate(QObject *parent)
  33.     : QStyledItemDelegate(parent)
  34. {
  35. }
  36. void ItemDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index) const
  37. {
  38.     if(index.isValid())
  39.     {
  40.         painter->save();
  41.         int nColumn = index.column();
  42.         QVariant    vItemData = index.data(nColumn + (Qt::UserRole + 1));
  43.         QStyleOptionViewItem viewOpt(option);
  44.         if(1 == nColumn)
  45.         {
  46.             QString strID = vItemData.toString();
  47.             painter->drawText(viewOpt.rect, Qt::AlignCenter, strID);
  48.         }
  49.         painter->restore();
  50.     }
  51.     QStyleOptionViewItem itemOption(option);
  52.     if(itemOption.state&QStyle::State_HasFocus)
  53.     {
  54.         itemOption.state=itemOption.state^QStyle::State_HasFocus;
  55.     }
  56.     QStyledItemDelegate::paint(painter,itemOption,index);
  57. }
  58. #include <QApplication>
  59. #include "frmmain.h"
  60. int main(int argc, char *argv[])
  61. {
  62.     QApplication app(argc, argv);
  63.     FrmMain w;
  64.     w.show();
  65.     return app.exec();
  66. }

为啥在代理已经对文本居中显示了,可是运行的结果显示并不是居中的?各位大佬,请问为啥这样做代理好像没有作用?有什么办法可以让代理起作用吗?

快速回复
限100 字节
 
上一个 下一个