QTableWidget用法,qt表格使用

目录

一、前言

二、函数API说明

三、代码区域

四、槽函数连接


一、前言

QTableWidget 是 Qt 提供的⼀种表格控件,类似于我们经常使⽤的 Excel 表格,可以将数据以表格的⽅式展⽰给⽤户

二、函数API说明

自动调整行高和列宽

QTableWidget 有几个函数自动调整表格的行高和列宽,分别如下:

resizeColumnsToContents():自动调整所有列的宽度,以适应其内容。
resizeColumnToContents(int column):自动调整列号为 co/www 的列的宽度。
resizeRowsToContents():自动调整所有行的高度,以适应其内容。
resizeRowToContents(int row):自动调整行号为 raw 的行的高度。

设置表格内容是否可编辑

setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);//双击或获取焦点后单击,进入编辑状态
setEditTriggers(QAbstractItemView::NoEditTriggers); //不允许编辑

设置行表头、列表头是否显示

horizontalHeader()->setVisible(checked);//是否显示水平表头
verticalHeader()->setVisible(checked);//是否显示垂直表头

选择模式

setSelectionBehavior(QAbstractltemView::Selectltems); 单元格选择
setSelectionBehavior(QAbstractltemView::SelectRows); 行选择

三、代码区域

//显示窗口    
m_configWidget = new QWidget();
//表格申请内存
    m_table = new QTableWidget(m_configWidget);

    m_configWidget->setMinimumSize(400, 600);
    QVBoxLayout* tableLayout = new QVBoxLayout(m_configWidget);
    tableLayout->addLayout(addrConfigLayout);
    tableLayout->addWidget(m_table);
    tableLayout->addWidget(m_tableError);

    QStringList channelList = {1,2,3,4,5,6};
    QStringList nameList={“test1”,“test2”,“test3”,“test4”,“test5”,“test6”};
    QStringList rangeList={“2,5”,“8,13”,“1,46”,“89,456”,“,7,315”,“0,9”};
    int size = channelList.size();

    m_table->setRowCount(size);    //设置行数
    m_table->setColumnCount(3); // 设置列数
    m_table->setHorizontalHeaderLabels(QStringList() << tr("通道(唯一)") << tr("名称(唯一)") << tr("范围(最小值,最大值)"));

    for (int i = 0; i < size; i++)
    {
        m_table->blockSignals(true);
        QTableWidgetItem * item = new QTableWidgetItem(channelList[i]);
        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_table->setItem(i, 0, item);

        item = new QTableWidgetItem(nameList[i]);
        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_table->setItem(i, 1, item);

        item = new QTableWidgetItem(rangeList[i]);
        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_table->setItem(i, 2, item);
        m_table->setColumnWidth(i, 100);    //设置列宽
        m_table->blockSignals(false);
    }

    // 初始化配置表格
    m_table->setStyle(new MyProxyStyle);//去除选中虚框
    m_table->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;color: black;}");//表头设置天空蓝背景色
    m_table->setSelectionBehavior(QAbstractItemView::SelectRows); //设置表格选择方式
    m_table->setSelectionMode(QAbstractItemView::ExtendedSelection); //多个选中的设置
    m_table->setAlternatingRowColors(true); //设置行背景色(颜色) 交替
    m_table->verticalHeader()->setVisible(false); //设置垂直头不可见
    m_table->horizontalHeader()->setStretchLastSection(true); //最后一个单元格扩展
    m_table->verticalHeader()->setDefaultSectionSize(24);
    m_table->setContextMenuPolicy(Qt::CustomContextMenu);   //右键菜单

    
    //channel右键菜单
    m_tableMenu = new QMenu(m_table);
    QAction* actionadd = new QAction(tr("添加列"), m_tableMenu);
    QAction* actiondel = new QAction(tr("删除选中列"), m_tableMenu);
    m_tableMenu->addAction(actionadd);
    m_tableMenu->addAction(actiondel);
    //添加一行
    connect(actionadd, &QAction::triggered, m_table, [=] {
        m_table->blockSignals(true);
        int row = m_table->rowCount();
        m_table->setRowCount(m_table->rowCount() + 1);
        QTableWidgetItem * item = new QTableWidgetItem(QString::number(row));
        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_table->setItem(row, 0, item);

        item = new QTableWidgetItem("channel");
        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_table->setItem(row, 1, item);

        item = new QTableWidgetItem("0,0,0");
        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_table->setItem(row, 2, item);
        m_table->blockSignals(false);
    });
    //删除列
    connect(actiondel, &QAction::triggered, m_table, [=] {
        m_table->blockSignals(true);
        //选择的行
        QModelIndexList indexList = m_table->selectionModel()->selectedRows();
        QMap<int, int> rowMap;
        foreach(QModelIndex index, indexList)
        {
            rowMap.insert(index.row(), 0);
        }
        int row;
        QMapIterator<int, int> rowMapIterator(rowMap);
        rowMapIterator.toBack();
        while (rowMapIterator.hasPrevious())//倒序删除
        {
            rowMapIterator.previous();
            row = rowMapIterator.key();
     
            //释放内存
            delete m_table->item(row, 0);
            delete m_table->item(row, 1);
            delete m_table->item(row, 2);
            //删除tableWidget的行
            m_table->removeRow(row);
            
        }   
        m_table->blockSignals(false);
     
    });

   

四、槽函数连接

    connect(m_table, &QTableWidget::customContextMenuRequested, this, [=] {
        m_tableMenu->popup(QCursor::pos());
        
    });

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值