QTableWidget的使用案例

本文详细介绍了如何在Qt中创建并使用QTableWidget,包括设置样式、添加数据、奇偶行颜色差异、选择与点击事件处理以及表头排序指示器的自定义。
摘要由CSDN通过智能技术生成

QTableWidget的使用案例

案例一

请添加图片描述

案例二

在这里插入图片描述

创建QTableWidget

	m_table_widget = new QTableWidget(this);
    m_table_widget->setObjectName("TableWidget");
    m_table_widget->setShowGrid(false);
    m_table_widget->setSortingEnabled(true);
    m_table_widget->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
    m_table_widget->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu);
    m_table_widget->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
    m_table_widget->setColumnCount(5);
    m_table_widget->setHorizontalHeaderLabels({TU(""), TU("文件名称"), TU("日期"), TU("类型"), TU("大小")});
    m_table_widget->verticalHeader()->setVisible(false);
    m_table_widget->horizontalHeader()->resizeSection(0, 50);
    m_table_widget->horizontalHeader()->resizeSection(2, 140);
    m_table_widget->horizontalHeader()->resizeSection(3, 100);
    m_table_widget->horizontalHeader()->resizeSection(4, 100);
    m_table_widget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::Fixed);
    m_table_widget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeMode::Stretch);
    m_table_widget->verticalScrollBar()->setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);
    m_table_widget->horizontalScrollBar()->setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);

    connect(m_table_widget, &QTableWidget::itemSelectionChanged, this, &Widget::itemSelectionChanged);
    connect(m_table_widget, &QTableWidget::itemClicked, this, &Widget::itemClicked);

	# 实现案例二中的奇偶行不同颜色,需要设置如下两行代码
	m_table_widget->setAlternatingRowColors(true);
    setStyleSheet("#TableWidget::item:alternate{"
		                  	"     background-color: rgb(233, 233, 233);"
		                  	"} "
		    				"#TableWidget::item:!alternate{"
		                  	"     background-color: rgb(255, 255, 255);"
		  					"}"
		                  	"#TableWidget::item:selected{"
		                 	"     background-color: rgb(30,154,214);"
		                  	"}");

添加数据

    for(int row = 0; row < 10; ++row)
    {
        m_table_widget->insertRow(m_table_widget->rowCount());

        auto item = new QTableWidgetItem();
        item->setIcon(QIcon("D:\\wsl.ico"));
        item->setCheckState(Qt::CheckState::Unchecked);
        m_table_widget->setItem(row, 0, item);
        m_table_widget->setItem(row, 1, new QTableWidgetItem(QString("filename_xxxxx_%1").arg(row)));
        m_table_widget->setItem(row, 2, new QTableWidgetItem("2024/01/01 10:00:00"));
        m_table_widget->setItem(row, 3, new QTableWidgetItem("xxxxx.txt"));
        m_table_widget->setItem(row, 4, new QTableWidgetItem("124000KB"));
    }

清空数据

    while(m_table_widget->rowCount() > 0)
    {
        m_table_widget->removeRow(m_table_widget->rowCount() - 1);
    }

处理选择

在选择了行时,设置复选框的选中状态。

void Widget::itemSelectionChanged()
{
    for(int row = 0; row < m_table_widget->rowCount(); ++row)
    {
        auto item = m_table_widget->item(row, 0);
        if (item->isSelected())
        {
            item->setCheckState(Qt::CheckState::Checked);
        }
        else
        {
            item->setCheckState(Qt::CheckState::Unchecked);
        }
    }
}

处理单击

点击复选框后,设置行的选中状态。

    if (0 == item->column())
    {
        if (Qt::CheckState::Checked == item->checkState())
        {
            m_table_widget->selectRow(item->row());
        }
        else if (Qt::CheckState::Unchecked == item->checkState())
        {
            for(int col = 0; col < m_table_widget->columnCount(); ++col)
            {
                m_table_widget->item(item->row(), col)->setSelected(false);
            }
        }
    }

表头排序箭头QSS设置

QHeaderView::section
{
    font: 14px "Microsoft YaHei";
    color: rgb(51,51,51);
    
    border: 0px solid white;
    background-color: rgb(233, 233, 233);
}

QHeaderView::down-arrow
{
	subcontrol-position: center right;
	image: url(:/res/image/arrow_down.png);
	padding-right: 10px;
}

QHeaderView::up-arrow
{
	subcontrol-position: center right;
	image: url(:/res/image/arrow_down.png);
	padding-right: 10px;
}
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值