查看完整版本: [-- QTabView代理文本的疑问 --]

QTCN开发网 -> Qt基础编程 -> QTabView代理文本的疑问 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lwei24 2022-04-28 14:59

QTabView代理文本的疑问



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

  1. #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();
    }

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



查看完整版本: [-- QTabView代理文本的疑问 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled