Qt中的 tableView 设置 二进制 十六进制 序号表头

二 进制序号

在这里插入图片描述

因为QTableView的垂直表头并不支持使用委托来自定义。
相反,可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。

代码:

#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QScrollArea>
#include <QTableView>
#include <QStandardItemModel>
#include <QHeaderView>
#include <QLabel>
#include <QPainter>

class BinaryHeaderView : public QHeaderView {
public:
    BinaryHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr) 
        : QHeaderView(orientation, parent) {}

protected:
    void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override {
        if (orientation() == Qt::Vertical) {
            QString binary = QString::number(logicalIndex, 2).rightJustified(4, '0');
            painter->save();
            painter->drawText(rect, Qt::AlignCenter, binary);
            painter->restore();
        } else {
            QHeaderView::paintSection(painter, rect, logicalIndex);
        }
    }
};

//------------------------------------------------------------------------以上复制到自己代码

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QMainWindow mainWindow;

    // 创建表格
    QTableView tableView;

    // 创建模型和数据
    QStandardItemModel model(10, 10);

    for (int row = 0; row < 10; ++row) {
        for (int column = 0; column < 10; ++column) {
            QModelIndex index = model.index(row, column, QModelIndex());
            model.setData(index, QVariant(row * 10 + column + 1));
        }
    }

    tableView.setModel(&model);

    // 设置水平表头
    tableView.horizontalHeader()->hide();

//------------------------------------------------------------------------以下复制到自己代码
    // 创建垂直表头
    BinaryHeaderView *verticalHeader = new BinaryHeaderView(Qt::Vertical, &tableView);
    tableView.setVerticalHeader(verticalHeader);
//------------------------------------------------------------------------end

    // 将表格添加到主窗口
    mainWindow.setCentralWidget(&tableView);

    mainWindow.resize(600, 400);
    mainWindow.show();

    return app.exec();
}

在这个示例中,自定义了BinaryHeaderView类,继承自QHeaderView,
重写了paintSection方法来绘制二进制序列。然后,将这个自定义的垂直表头应用到了QTableView中。

十六 进制序号

在这里插入图片描述

#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QScrollArea>
#include <QTableView>
#include <QStandardItemModel>
#include <QHeaderView>
#include <QPainter>

class HexHeaderView : public QHeaderView {
public:
    HexHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr) 
        : QHeaderView(orientation, parent) {}

protected:
    void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override {
        if (orientation() == Qt::Vertical) {
            QString hex = QString("%1").arg(logicalIndex * 16, 4, 16, QChar('0'));
            painter->save();
            painter->drawText(rect, Qt::AlignCenter, hex);
            painter->restore();
        } else {
            QHeaderView::paintSection(painter, rect, logicalIndex);
        }
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QMainWindow mainWindow;

    // 创建表格
    QTableView tableView;

    // 创建模型和数据
    QStandardItemModel model(10, 10);

    for (int row = 0; row < 10; ++row) {
        for (int column = 0; column < 10; ++column) {
            QModelIndex index = model.index(row, column, QModelIndex());
            model.setData(index, QVariant(row * 10 + column + 1));
        }
    }

    tableView.setModel(&model);

    // 设置水平表头
    tableView.horizontalHeader()->hide();

    // 创建垂直表头
    HexHeaderView *verticalHeader = new HexHeaderView(Qt::Vertical, &tableView);
    tableView.setVerticalHeader(verticalHeader);

    // 将表格添加到主窗口
    mainWindow.setCentralWidget(&tableView);

    mainWindow.resize(600, 400);
    mainWindow.show();

    return app.exec();
}

相关推荐

  1. SwiftTableView原理

    2024-04-27 18:42:04       28 阅读
  2. SwiftTableView使用

    2024-04-27 18:42:04       35 阅读
  3. Qt、串口助手字符串和十六进制字符串转换

    2024-04-27 18:42:04       44 阅读
  4. SwiftTableView编辑模式

    2024-04-27 18:42:04       31 阅读
  5. 二进制to十六进制

    2024-04-27 18:42:04       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 18:42:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 18:42:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 18:42:04       82 阅读
  4. Python语言-面向对象

    2024-04-27 18:42:04       91 阅读

热门阅读

  1. 推荐算法顶会论文合集

    2024-04-27 18:42:04       26 阅读
  2. 【C++例】虚函数—代码实例

    2024-04-27 18:42:04       30 阅读
  3. jQuery

    jQuery

    2024-04-27 18:42:04      27 阅读
  4. c++ 计算引物退火温度

    2024-04-27 18:42:04       30 阅读