QT中表格控件使用

发布于:2024-04-21 ⋅ 阅读:(177) ⋅ 点赞:(0)

一、QTableView表头设置样式

//控件样式
QString setcolor="QHeaderView{"
                 "border:0px solid #ffffff;"
                 "outline:0px;"
                 "background:#000000;"
                 "}"
                 "QHeaderView::section:horizontal:first{"
                 "border:1px solid #ffffff;"
                 "background:#000000;"
                 "margin:0px;"
                 "}"
                 "QHeaderView::section:horizontal:middle{"
                 "border:1px solid #ffffff;"
                 "background:#000000;"
                 "margin:0px;"
                 "}"
                 "QHeaderView::section:horizontal:last{"
                 "border:1px solid #ffffff;"
                 "background:#000000;"
                 "margin:0px;"
                 "}";
ui->tableView->horizontalHeader()->setStyleSheet(setcolor);

设置表格内容居中对齐,重写QStyledItemDelegate类

class CenterAlignedDelegate : public QStyledItemDelegate
{
public:
    CenterAlignedDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}

    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        QStyleOptionViewItem opt = option;
        initStyleOption(&opt, index);

        opt.displayAlignment = Qt::AlignCenter; // 设置对齐方式为居中

        QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter);
    }
};
调用重写的类
    // 设置内容居中显示
    CenterAlignedDelegate *delegate = new CenterAlignedDelegate(this);
    ui->tableView->setItemDelegate(delegate);

二、使用QTableWidget控件,先清除在重新创建控件,设置内容水平垂直对齐,内容不可编辑,合并单元格。

//先将ui->stackedWidget_openFile中的内容清空
    while(ui->stackedWidget_4->count() > 0)
    {
        QWidget *lastPage = ui->stackedWidget_4->widget(ui->stackedWidget_4->count() - 1);
        ui->stackedWidget_4->removeWidget(lastPage);
        lastPage->deleteLater(); // 释放内存
    }

    QTableWidget *tableWidget=new QTableWidget();
    ui->stackedWidget_4->addWidget(tableWidget);

    // 隐藏行表头
    tableWidget->verticalHeader()->setVisible(false);
    // 隐藏列表头
    tableWidget->horizontalHeader()->setVisible(false);
    tableWidget->setRowCount(9);
    tableWidget->setColumnCount(7);
    tableWidget->setSpan(0, 0, 1, 3); // 第一行的第一列跨越三列
    tableWidget->setSpan(0, 1, 1, 2); // 第一行的第二列和第三列合并为一列
    tableWidget->setSpan(0, 3, 1, 2); // 第一行的第四列和第五列为一列
    tableWidget->setSpan(0, 5, 1, 2); // 第一行的第四列和第五列为一列
    // 设置样式
    QString styleSheet = "QTableWidget {"
                         "    background-color: black;"
                         "    color: white;"
                         "    gridline-color: white;"
                         "    font-size: 13pt;"  // 设置字体大小为 13 磅
            "    font-family: 黑体;"  // 设置字体为宋体
            "}";
    tableWidget->setStyleSheet(styleSheet);
    tableWidget->setItem(0, 0, new QTableWidgetItem("参数")); // 设置第一行第二列的内容
    tableWidget->setItem(0, 3, new QTableWidgetItem("信息")); // 设置第一行第四列的内容
    tableWidget->setItem(0, 5, new QTableWidgetItem("数量")); // 设置第一行第六列的内容

    // 将第一行第一列的内容居中对齐
    tableWidget->item(0, 0)->setTextAlignment(Qt::AlignCenter);

    // 将第一行第四列的内容居中对齐
    tableWidget->item(0, 3)->setTextAlignment(Qt::AlignCenter);

    // 将第一行第六列的内容居中对齐
    tableWidget->item(0, 5)->setTextAlignment(Qt::AlignCenter);

    tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);


网站公告

今日签到

点亮在社区的每一天
去签到