效果如下
1. Table 初始化属性
1.隐藏表头 列号
2.默认行高
3.自适应列宽
4.隐藏表格框线
5.滚动条样式定义
void createLogged::createTabelView()
{
/*表格属性设置*/
m_pTableWidget = new QTableWidget(this);
m_pTableWidget->resize(414,418);
m_pTableWidget->move(21,43);
m_pTableWidget->setFrameShape(QFrame::NoFrame);
m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_pTableWidget->setSelectionMode(QAbstractItemView::NoSelection);
m_pTableWidget->setFocusPolicy(Qt::NoFocus);
m_pTableWidget->verticalHeader()->setDefaultSectionSize(24); //设置默认行高
m_pTableWidget->setShowGrid(false);
m_pTableWidget->verticalHeader()->hide(); //隐藏默认显示的行头
m_pTableWidget->horizontalHeader()->hide(); //隐藏默认显示的列头
m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格属性只读,不能编辑
//m_pTableWidget->verticalHeader()->setSectionResizeMode(row, QHeaderView::ResizeToContents); //自适应行高
m_pTableWidget->setColumnCount(3);
m_pTableWidget->setColumnWidth(0,40); //设定表格第0列宽度
m_pTableWidget->setColumnWidth(1,320);
m_pTableWidget->setColumnWidth(2,24);
m_pTableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //自适应列宽
m_pTableWidget->setStyleSheet("QTableWidget{"
"background:transparent;"
"color:#ffffff;}"
"QScrollBar::vertical {"
"width:10px;"
"background-color:rgb(13,17,47);"
"border:none;"
"border-radius:5px;"
"}"
"QScrollBar::handle:vertical {"
"background-color: rgb(74,96,160);"
"min-height:20px;"
"border-radius:5px;"
"width:10px;"
"}"
"QScrollBar::add-line:vertical {height: 0px;}"
"QScrollBar::sub-line:vertical {height: 0px;}"
"QScrollBar::add-page:vertical {background: none;}"
"QScrollBar::sub-page:vertical {background: none;}"
);
m_pTableWidget->show();
}
2.按钮删除行
以下代码有删减
void createLogged::slotBtnDel()
{
/*1.获取按钮在表格中的行列位置*/
QPushButton *sigBtn = qobject_cast<QPushButton*>(sender());
QModelIndex modelIndex = m_pTableWidget->indexAt(sigBtn->pos());
int row = modelIndex.row();
/*2.找到Map中按钮所对应的的日志Id*/
QMap<QPushButton *,QString>::const_iterator mapBtnAndId = m_mapLog.find(sigBtn); //找到所删除按钮对应的记录 Id
QString strLogId = mapBtnAndId.value();
/*3.计算记录行数*/
StPushLog st = m_pTableLog->queryRow(strLogId);
int nItem = st.vecRecvNodes.count(); //获取记录子项数
/*4.删除*行记录*/
for(int i = 0; i < nItem+2; i++){ //删除子项加1 行内容
m_pTableWidget->removeRow(row);
}
/*5. 删除Map中的记录*/
m_mapLog.remove(sigBtn);
/*6.刷新序号列编号*/
int nNum = 1;
for(int i = 0; i < m_pTableWidget->rowCount();i++)
{
QPushButton *pBtna = qobject_cast<QPushButton *>(m_pTableWidget->cellWidget(i,2));
if(m_mapLog.contains(pBtna))
{
QTableWidgetItem *itemNo = new QTableWidgetItem(QString::number(nNum) + ".");
m_pTableWidget->setItem(i,0,itemNo);
nNum++;
}
}
}
3.表中添加控件
以下代码有删减
/*1.添加空行*/
int row = m_pTableWidget->rowCount();//获取总行数
m_pTableWidget->setRowCount(row+vecLog.count()+2); //添加空行 用于添加数据
/*2.添加序号*/
QTableWidgetItem *itemNo = new QTableWidgetItem(QString::number(m_mapLog.count()+1) + ".");
m_pTableWidget->setItem(row,0,itemNo);
/*3.添加信源送往*/
QTableWidgetItem *item = new QTableWidgetItem("国际会议室大厅-信号源-送往:");
item->setFont(QFont("SimHei",14));
m_pTableWidget->setItem(row,1,item);
//m_pTableWidget->verticalHeader()->setSectionResizeMode(row, QHeaderView::ResizeToContents); //自适应行高
/*4.添加撤销记录按钮*/
QPushButton *pBtnDel = new QPushButton;
QString strTmp = "border-image:url(" + m_strImagePath + "SignPushPage/btn_delete.png);";
pBtnDel->setStyleSheet(strTmp);
pBtnDel->setFixedSize(24,24);
connect(pBtnDel,SIGNAL(clicked()),this,SLOT(slotBtnDel()));
m_pTableWidget->setCellWidget(row,2,pBtnDel);
QStringList listl;
listl<<"你家"<<"我家"<<"他家";
/*5.添加推送子区域*/
for(int i = 0;i < vecLog.count();i++){
QTableWidgetItem *tmpItem = new QTableWidgetItem(listl.at(i%3));
tmpItem->setFont(QFont("SimHei",12));
m_pTableWidget->setItem(row+i+1,1,tmpItem);
}
m_pTableWidget->setRowHeight(row+vecLog.count()+1,10); //设置空白行行高
m_pTableWidget->scrollToBottom(); //滚动显示底部