QTableWidget用法记录

自动平均宽和列的宽度

Qt4的方法

ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);  //平均分配列宽
ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);//平均分配行宽

Qt5的方法

ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);  //平均分配列宽
ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);//平均分配行宽

自动调整行高和列宽详细说明

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); 行选择

相关使用方法

//ui->tableWidget->setShowGrid(true); //设置显示格子线
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止编辑
ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //行头自适应表格


//点击表时不对表头行光亮(获取焦点)
ui->tableWidget->horizontalHeader()->setHighlightSections(false);

//设置表头字体族和大小
ui->tableWidget->horizontalHeader()->setFont(QFont("song", 12));
 
//设置表头字体加粗
QFont font =  ui->tableWidget->horizontalHeader()->font();
font.setBold(true);
ui->tableWidget->horizontalHeader()->setFont(font);

//所有单元格的字体  设置成一样
ui->tableWidget->setFont(QFont("song", 12)); 
 
ui->tableWidget->setRowCount(1); //设置行数
ui->tableWidget->setColumnCount(8); //设置列数
ui->tableWidget->setWindowTitle("TABLE演示"); //设置标题

//代码设置表头
QStringList header;
header<<"序号"<<"名称"<<"设备ID"<<"设备IP"<<"设备端口"<<"型号"<<"厂家"<<"备注";
ui->tableWidget->setHorizontalHeaderLabels(header);
 
//去掉默认行号 可以用horizontalHeader() ->setVisible(false)隐藏横向表头
QHeaderView *header1 =   ui->tableWidget->verticalHeader();
header1->setHidden(true);

//设置单元格大小
ui->tableWidget->horizontalHeader()->setDefaultSectionSize(50);  //设置默认宽度
ui->tableWidget->verticalHeader()->setDefaultSectionSize(30);   //设置一行默认高度
ui->tableWidget->setColumnWidth(1,110);
ui->tableWidget->setColumnWidth(2,110);
ui->tableWidget->setColumnWidth(4,180);
ui->tableWidget->setColumnWidth(5,110);
ui->tableWidget->setColumnWidth(6,80);
ui->tableWidget->setColumnWidth(7,80);

ui->tableWidget->setSortingEnabled(true);  //启动排序

//单元格单独设置字体方法:
QTableWidgetItem *item = new QTableWidgetItem;
item->setText(strDev);
item->setFont(QFont("song", 14));
ui->tableWidget->setItem(crowCount,j,item);

插入数据实例

for (int crowCount = 0; crowCount < 20; ++crowCount)
{
    //插入数据
    QTableWidgetItem *check=new QTableWidgetItem(QString::number(crowCount)); 
    check->setCheckState(Qt::Unchecked);  //是否设置选中框
    ui->tableWidget->insertRow(crowCount);
    check->setText(QString::number(crowCount));  //显示序号
    ui->tableWidget->setItem(crowCount,0,check); //插入复选框
    for(int j=1; j<8; j++ )
    {
        ui->tableWidget->setItem(crowCount,j,new QTableWidgetItem(QString::number(j)));
    }
}

添加子项

这里添加三个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);

右键弹出菜单

这里添加一个右键菜单,有两个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));
    }

清空

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

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

运行截图
在这里插入图片描述

qss美化

先看效果图
在这里插入图片描述
代码如下:

/*
tabelwidget*/
/***************注意**************
ui->tableWidget->setAlternatingRowColors(true);		//允许绘制背景色交替 必须写这句否则交替背景色没有效果
*****************************************/
QTableWidget{
color:#DCDCDC;
background:#444444;
border:1px solid #242424;
alternate-background-color:#525252;/*交错颜色*/
gridline-color:#242424;
}

/*选中item*/
QTableWidget::item:selected{
color:#DCDCDC;
background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #484848,stop:1 #383838);
}

/*
悬浮item*/
QTableWidget::item:hover{
background:#5B5B5B;
}
/*表头*/
QHeaderView::section{
text-align:center;
background:#5E5E5E;
padding:3px;
margin:0px;
color:#DCDCDC;
border:1px solid #242424;
border-left-width:0;
}

/*表右侧的滑条*/
QScrollBar:vertical{
background:#484848;
padding:0px;
border-radius:6px;
max-width:12px;
}

/*滑块*/
QScrollBar::handle:vertical{
background:#CCCCCC;
}
/*
滑块悬浮,按下*/
QScrollBar::handle:hover:vertical,QScrollBar::handle:pressed:vertical{
background:#A7A7A7;
}
/*
滑块已经划过的区域*/
QScrollBar::sub-page:vertical{
background:444444;
}

/*
滑块还没有划过的区域*/
QScrollBar::add-page:vertical{
background:5B5B5B;
}

/*页面下移的按钮*/
QScrollBar::add-line:vertical{
background:none;
}
/*页面上移的按钮*/
QScrollBar::sub-line:vertical{
background:none;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值