QTableWidget学习笔记
1.填充InitUi.cpp
void TableWidget::initTable()
{
//消除空白行
int RC = tablewidget->rowCount();
for (int i = 0; i < RC; i++)
{
tablewidget->removeRow(0);
}
//设置列数
tablewidget->setColumnCount(9);
//设置列宽自定义比例
QVector<float> colbili;
colbili<<0.15<<0.3<<0.1<<0.1<<0.05<<0.05<<0.075<<0.075<<0.1;
tablewidget->setBili(colbili);
//自适应所有列,布满整个空间
tablewidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//表格只读不可编辑
tablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
//奇数偶数行颜色交替
tableWidget->setAlternatingRowColors(true);
//存放表头
QStringList columnTitles;
columnTitles<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9";
//设置表头
tablewidget->setHorizontalHeaderLabels(columnTitles);
//设置第一列隐藏
tablewidget->setColumnHidden(0, true);
//设置可以捕捉鼠标位置
tablewidget->setMouseTracking(true);
//故障模式主界面显示数据库
QString sql = "SELECT [], [], [], [], [], [], [] FROM []";
QSqlQuery sqlQuery(db);
if (sqlQuery.exec(sql))
{
int i = 0;
while (sqlQuery.next())
{
int rowIndex = tablewidget->rowCount();
tablewidget->insertRow(rowIndex);
int ID = sqlQuery.value(0).toInt();
tablewidget->setItem(i, 0, new QTableWidgetItem(QString("%1").arg(sqlQuery.value(1).toString())));
tablewidget->setItem(i, 1, new QTableWidgetItem(QString("%1").arg(sqlQuery.value(2).toString())));
tablewidget->setItem(i, 2, new QTableWidgetItem(QString("%1").arg(sqlQuery.value(3).toString())));
tablewidget->setItem(i, 3, new QTableWidgetItem(QString("%1").arg(sqlQuery.value(4).toString())));
tablewidget->setItem(i, 4, new QTableWidgetItem(QString("%1").arg(sqlQuery.value(5).toBool() ? "启用" : "未启用")));
tablewidget->setItem(i, 5, new QTableWidgetItem(QString("%1").arg(sqlQuery.value(6).toBool() ? "手动" : "自动")));
tablewidget->setItem(i, 6, new QTableWidgetItem(QString("%1").arg(getCumulativeAlarmTimes(ID))));
tablewidget->setItem(i, 7, new QTableWidgetItem(QString("%1").arg(getLastAlarmTime(ID))));
QPushButton *bj = new QPushButton("编辑");
bj->setObjectName(QString("BJ_%1_%2").arg(i).arg(ID));
bj->setStyleSheet("border-radius:2px;border-bottom:1px solid #3598db;");
connect(bj, SIGNAL(clicked()), this, SLOT(bj_pushButton_clicked()));
QPushButton *lsgj = new QPushButton("历史告警");
lsgj->setObjectName(QString("LSGJ_%1_%2").arg(i).arg(ID));
lsgj->setStyleSheet("border-radius:2px;border-bottom:1px solid #3598db;");
connect(lsgj, SIGNAL(clicked()), this, SLOT(lsgj_pushButton_clicked()));
QPushButton *sx = new QPushButton(sqlQuery.value(5).toBool() ? "未启用" : "启用");
sx->setObjectName(QString("SX_%1_%2").arg(i).arg(ID));
sx->setStyleSheet("border-radius:2px;border-bottom:1px solid #3598db;");
connect(sx, SIGNAL(clicked()), this, SLOT(sx_pushButton_clicked()));
QPushButton *sc = new QPushButton("删除");
sc->setObjectName(QString("SC_%1_%2").arg(i).arg(ID));
sc->setStyleSheet("border-radius:2px;border-bottom:1px solid #3598db;");
connect(sc, SIGNAL(clicked()), this, SLOT(sc_pushButton_clicked()));
QWidget *tmpWidget = new QWidget();
QHBoxLayout *tmpHLayout = new QHBoxLayout(tmpWidget);
tmpHLayout->addWidget(bj);
tmpHLayout->addWidget(lsgj);
tmpHLayout->addWidget(sx);
tmpHLayout->addWidget(sc);
tmpHLayout->setMargin(0);
//tablewidget操作栏插入组件
tablewidget->setCellWidget(i, 8, tmpWidget);
//tablewidget内容全部都居中显示
for (int j = 0; j < 8; j++)
{
tablewidget->item(i, j)->setTextAlignment(Qt::AlignCenter);
}
i++;
}
}
return;
}
2.改变某一单元格颜色
row = ui->tableWidget->rowCount();
for (int i = 0; i < 7; i++)
{
if (ret.toInt32())
{
ui->tableWidget_01->item(row, i)->setForeground(QBrush(QColor(255, 0, 0)));//单元格元素字体颜色设置
ui->tableWidget_01->item(row, i)->setBackgroundColor((QColor(255, 255, 127)));//单元格元素字体背景颜色设置
}
}
ui->tableWidget_01->setSpan(row + 1 - count, 0, count, 1);//合并单元格
ui->tableWidget_01->setSpan(row + 1 - count, 1, count, 1);//合并单元格
ui->tableWidget_01->setSpan(row + 1 - count, 2, count, 1);//合并单元格
count = 0;
3.气泡显示文本内容
connect(tablewidget, SIGNAL(cellEntered(int, int)), this, SLOT(slotCellEnter(int, int)));
void TableWidget::slotCellEnter(int r, int c)
{
QTableWidgetItem *Item = gzmstableview->item(r,c);
if(Item==nullptr)
{
return;
}
QFontMetrics fontWidth(gzmstableview->font());
int font_size = fontWidth.width(Item->text());
int ncellcol = gzmstableview->columnWidth(1);//判断第二列
if(font_size>ncellcol)
{
QToolTip::showText(QCursor::pos(),Item->text());
QPalette pt = QToolTip::palette();
pt.setColor(QPalette::ToolTipBase,QColor(0,0,127));
pt.setColor(QPalette::ToolTipText,QColor(0,0,0));
QToolTip::setPalette(pt);
}
}
4.表格内容保留两位小数
tablewidget->setItem(i,0,new QTableWidgetItem(QString::number(sqlquery.value(0).toReal(),'f',2)));
float value = query.value(3).toFloat();
tableWidget->setItem(i, 1, new QTableWidgetItem(QString("%1 %2 %3").arg(query.value(1).toString()).arg(query.value(2).toString()).arg(value)));
5.自定义列宽比例
.h
#ifndef MYTABLEWIDGET_H
#define MYTABLEWIDGET_H
#include <QWidget>
#include <QTableWidget>
class resizeColTable : public QTableWidget
{
Q_OBJECT
public:
explicit resizeColTable(QWidget *parent = 0);
void setBili(QVector<float> biliinfo);
void resizeEvent(QResizeEvent *event);
signals:
private:
QVector<float> databili;
public slots:
};
#endif // MYTABLEWIDGET_H
.cpp
#include "mytablewidget.h"
#include <QDebug>
#include <QResizeEvent>
resizeColTable::resizeColTable(QWidget *parent):QTableWidget(parent)
{
}
void resizeColTable::setBili(QVector<float> biliinfo)
{
databili= biliinfo;
}
void resizeColTable::resizeEvent(QResizeEvent *event)
{
QSize curSize = event->size();
int width = curSize.width();
for(int i=0;i<databili.size();i++)
{
setColumnWidth(i,width*datadictionarycolsize[i]);
}
}