QTableWidget实现多行灯的控制

为了很好的理解QTableWidget组件,结合了QLabel,实现灯的控制。效果如下:

单元格的选中由QTableWidget提供的setSelectionMode方法和setSelectionBehavior方法控制,前者设置选中的项目的模式,后者设置选中的粒度。具体逻辑如下:

/// README.md
### QTableWidget::setSelectionMode与QTableWidget::setSelectionBehavior配套使用规则
#### 其中QTableWidget::setSelectionMode可以取如下值
##### QAbstractItemView::NoSelection            ///< 无法选中
##### QAbstractItemView::SingleSelection        ///< 只能选中一个项目(单元格/行/列)
##### QAbstractItemView::MultiSelection         ///< 可以选中多个项目(单元格/行/列)(不用按ctrl键)
##### QAbstractItemView::ExtendedSelection      ///< 配合ctrl可以选中多个项目(单元格/行/列)
##### QAbstractItemView::ContiguousSelection    ///< 配合ctrl实现区域选择

#### 其中QTableWidget::setSelectionBehavior可以取如下值
##### QAbstractItemView::SelectItems    ///< 设置最小粒度可以按单元格选中
##### QAbstractItemView::SelectRows     ///< 设置最小粒度只能按行选中
##### QAbstractItemView::SelectColumns  ///< 设置最小粒度只能按列选中
##### **需注意,当setSelectionMode取值SingleSelection时,这里不代表最小粒度,而是只能按照setSelectionBehavior设置的固定模式选中**

#### 1 当setSelectionMode取NoSelection时,任何单元格无法选中

#### 2 当setSelectionMode取SingleSelection时
##### 2.1 若setSelectionBehavior取SelectItems,只能选中某一个单元格,按住ctrl点击选中的单元格则取消选中
##### 2.2 若setSelectionBehavior取SelectRows,只能选中某一行单元格,按住ctrl点击选中的行则取消选中
##### 2.3 若setSelectionBehavior取SelectColumns,只能选中某一列单元格,按住ctrl点击选中的列则取消选中

#### 3 当setSelectionMode取MultiSelection时(选中多个项目无需按ctrl键,再次点击选中项目则取消选中)
##### 3.1 若setSelectionBehavior取SelectItems,表示最小粒度可以选择到某一个单元格,当然点击表头可以选中某行某列
##### 3.2 若setSelectionBehavior取SelectRows,表示最小粒度只能按照行来选中
##### 3.3 若setSelectionBehavior取SelectColumns,表示最小粒度只能按照列来选中

#### 4 当setSelectionMode取ExtendedSelection时(选中多个项目需按ctrl键,松开ctrl键再点击某一项,则之前选中的项目自动取消选中)

#### 5 当setSelectionMode取ContiguousSelection时(配合ctrl键可以实现区域选择)

ui设计如下:

其中,按钮<转换选中>是需要在最小选中粒度设置为按行选中时,生效。

.h文件

#ifndef SHEETTEST_H
#define SHEETTEST_H

#include <QWidget>
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHBoxLayout>
#include <QHeaderView>
#include <QPushButton>
#include <QComboBox>
#include <iostream>

QT_BEGIN_NAMESPACE
namespace Ui { class SheetTest; }
QT_END_NAMESPACE

class SheetTest : public QWidget
{
    Q_OBJECT

public:
    SheetTest(QWidget *parent = nullptr);
    ~SheetTest();

private:
    void initUi();
    void initData();
    void initSlots();

private slots:
    void getSelectd();                  ///< 槽函数 获取当前选中的 行列号 或行列范围 或坐标
    void dealLeds(QSet<int>, int);      ///< 槽函数 处理当前选中的行的灯
    void setModel(int);                 ///< 槽函数 处理单元格选中模式
    void setGrainSize(int);             ///< 槽函数 处理单元格选中粒度

private:
    Ui::SheetTest *ui;
    QTableWidget* qtw;
    QPushButton* selectOnOff, *allOnOff;
    QComboBox* cbModel, *cbGrainSize;
    QVector<QString> color;             ///< 存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值