Qt QTableWidget详解

1.常用API设置

    //设置列数
    ui->tableWidget->setColumnCount(4);

    //设置行数
    ui->tableWidget->setRowCount(5);

    //去除选中虚线框
    ui->tableWidget->setFocusPolicy(Qt::NoFocus);

    //表头标题用QStringList来表示
    QStringList headerText;
    headerText<<"姓 名"<<"性 别"<<"出生日期"<<"国 籍";
    ui->tableWidget->setHorizontalHeaderLabels(headerText);

    //设置列宽
    ui->tableWidget->setColumnWidth(0,200);
    ui->tableWidget->setColumnWidth(1,200);
    ui->tableWidget->setColumnWidth(2,200);
    ui->tableWidget->setColumnWidth(3,200);

    //需要打开右键菜单属性,则必须设置
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);

    //设置最后一栏自适应长度
    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

    //设置列内容自适应宽度
    //ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

    //设置为可以选中多个目标,按ctrl键
    ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

    //开启交替行背景色,在设置style为交替颜色时必须开启
    ui->tableWidget->setAlternatingRowColors(true);

    //清除表格数据区的所有内容,但是不清除表头。
//    ui->tableWidget->clearContents();

    //清除表格数据区的所有内容,包括表头。
//    //ui->tableWidget->clear();

自动调整行高和列宽

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

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

设置表格内容是否可编辑

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

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

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

选择模式

  • ui->tableInfo->setSelectionBehavior(QAbstractltemView::Selectltems); 单元格选择
  • ui->tableInfo->setSelectionBehavior(QAbstractltemView::SelectRows); 行选择

 2.添加子项

这里添加三个string,和一个自定义的combobox

    QComboBox *combox1 = new QComboBox(ui->tableWidget);
    combox1->addItem("man");
    combox1->addItem("woman");

    QComboBox *combox2 = new QComboBox(ui->tableWidget);
    combox2->addItem("man");
    combox2->addItem("woman");

    QComboBox *combox3 = new QComboBox(ui->tableWidget);
    combox3->addItem("man");
    combox3->addItem("woman");

    QComboBox *combox4 = new QComboBox(ui->tableWidget);
    combox4->addItem("man");
    combox4->addItem("woman");

    QComboBox *combox5 = new QComboBox(ui->tableWidget);
    combox5->addItem("man");
    combox5->addItem("woman");

    //添加
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("Tom"));
    //ui->tableWidget->setItem(0,1,new QTableWidgetItem("man"));
    ui->tableWidget->setItem(0,2,new QTableWidgetItem("1999.11.11"));
    ui->tableWidget->setItem(0,3,new QTableWidgetItem("England"));

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("Jery"));
    //ui->tableWidget->setItem(1,1,new QTableWidgetItem("man"));
    ui->tableWidget->setItem(1,2,new QTableWidgetItem("1997.08.12"));
    ui->tableWidget->setItem(1,3,new QTableWidgetItem("England"));

    ui->tableWidget->setItem(2,0,new QTableWidgetItem("Mary"));
    //ui->tableWidget->setItem(2,1,new QTableWidgetItem("woman"));
    ui->tableWidget->setItem(2,2,new QTableWidgetItem("1998.03.12"));
    ui->tableWidget->setItem(2,3,new QTableWidgetItem("England"));

    ui->tableWidget->setItem(3,0,new QTableWidgetItem("Jessy"));
    //ui->tableWidget->setItem(3,1,new QTableWidgetItem("woman"));
    ui->tableWidget->setItem(3,2,new QTableWidgetItem("2000.04.17"));
    ui->tableWidget->setItem(3,3,new QTableWidgetItem("England"));

    ui->tableWidget->setItem(4,0,new QTableWidgetItem("Jim"));
    //ui->tableWidget->setItem(4,1,new QTableWidgetItem("man"));
    ui->tableWidget->setItem(4,2,new QTableWidgetItem("1997.09.28"));
    ui->tableWidget->setItem(4,3,new QTableWidgetItem("England"));

    ui->tableWidget->setCellWidget(0,1,combox1);
    ui->tableWidget->setCellWidget(1,1,combox2);
    ui->tableWidget->setCellWidget(2,1,combox3);
    ui->tableWidget->setCellWidget(3,1,combox4);
    ui->tableWidget->setCellWidget(4,1,combox5);

 //设置单个item属性

    //对单个item进行设置
    QTableWidgetItem *item = new QTableWidgetItem("item");
    //获取原有字体设置
    QFont font = item->font();
    //设置为粗体
    font.setBold(true);
    //字体大小
    font.setPointSize(12);
    //字体颜色
    item->setTextColor(Qt::red);
    //设置字体
    item->setFont(font);
    //文本对齐格式
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

3.右键弹出菜单

这里添加一个右键菜单,有两个action,一个删除 一个添加

    m_menu = new QMenu(this);
    m_actionAdd = new QAction("添加",m_menu);
    connect(m_actionAdd,&QAction::triggered,this,&Form::slotAdd);
    m_actionDel = new QAction("删除",m_menu);
    connect(m_actionDel,&QAction::triggered,this,&Form::slotDel);
    m_menu->addAction(m_actionAdd);
    m_menu->addAction(m_actionDel);

    connect(ui->tableWidget,&QTableWidget::customContextMenuRequested,this,&Form::slotPopMenu);

    void Form::slotAdd()
    {
        int row = ui->tableWidget->currentRow();
        ui->tableWidget->insertRow(row);
    }

    void Form::slotDel()
    {
        int row = ui->tableWidget->currentRow();
        ui->tableWidget->removeRow(row);
    }

    void Form::slotPopMenu(const QPoint &pos)
    {
        qDebug()<<pos.x()<<" "<<pos.y();
        QPoint p;
        p.setX(pos.x());
        p.setY(pos.y() + m_menu->height() / 2 );
        m_menu->exec(ui->tableWidget->mapToGlobal(p));
    }

4.设置风格

这里简单的设置了一下颜色,头部样式,仅供参考。

const QString styles = "QTableView\
{\
    selection-background-color: qlineargradient(x1: 0, y1: 0, x2: 0.5, y2: 0.5,\
                                    stop: 0 #616161, stop: 1 505050);\
    /*alternate-background-color:blue;*/\
}";

const QString headerStyle = "QHeaderView::section\
{\
    background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,\
                                          stop:0 #616161, stop: 0.5 #505050,\
                                          stop: 0.6 #434343, stop:1 #656565);\
    color: white;\
    padding-left: 4px;\
    border: 1px solid #6c6c6c;\
}\
/*QHeaderView::section:checked\
{\
    background-color: red;\
}*/";

    ui->tableWidget->setStyleSheet(styles);
    ui->tableWidget->horizontalHeader()->setStyleSheet(headerStyle);

5.清空

clear() 和 removeRow方法都会delete项数据,不必担心内存泄露。

    //清除表格数据区的所有内容,但是不清除表头。
    ui->tableWidget->clearContents();
    //ui->tableWidget->clear();
    int nCount = ui->tableWidget->rowCount();
    for(int i=0;i<nCount;i++)
    {
        ui->tableWidget->removeRow(0);
    }

6.运行截图

扫描二维码关注公众号,回复: 14990316 查看本文章

7.源码

QTableWidget详解_qtablewidget-C/C++文档类资源-CSDN下载

8.相关推荐 

QTreeView详解icon-default.png?t=M276https://blog.csdn.net/wzz953200463/article/details/123643823?spm=1001.2014.3001.5502QTreeWidget详解icon-default.png?t=M276https://blog.csdn.net/wzz953200463/article/details/109996501

QTableView详解icon-default.png?t=M276https://blog.csdn.net/wzz953200463/article/details/123645541?spm=1001.2014.3001.5502

QListWidget详解icon-default.png?t=M276https://blog.csdn.net/wzz953200463/article/details/109648247

QListView详解icon-default.png?t=M276https://blog.csdn.net/wzz953200463/article/details/123646413?spm=1001.2014.3001.5502

 

猜你喜欢

转载自blog.csdn.net/wzz953200463/article/details/110004261