本人在Qt开发应用程序时用到QTableWidget控件,总结一些常用技巧。
1.表格显示设置
ui->IOtable->setRowCount(20); //设置表格行数
ui->IOtable->setColumnCount(7); //设置表格列数
QHeaderView* headerView = ui->IOtable->verticalHeader();
headerView->setHidden(true); //隐藏最前面的序号行
QStringList labels;
labels <<IOTABLE_TYPE_ZH<<IOTABLE_NAME_ZH<<IOTABLE_VALUE_ZH<<IOTABLE_BUS_ZH<<IOTABLE_UNIT_ZH<<IOTABLE_UNITMAP_ZH<<IOTABLE_BSIM_ZH; //设置每一列小标题
QFont font = ui->IOtable->horizontalHeader()->font();
font.setBold(false);
ui->IOtable->horizontalHeader()->setFont(font); //设置表头字体
ui->IOtable->setHorizontalHeaderLabels(labels);
ui->IOtable->horizontalHeader()->setSectionResizeMode(TYPE_COLUMN, QHeaderView::Stretch);
ui->IOtable->horizontalHeader()->setSectionResizeMode(NAME_COLUMN, QHeaderView::ResizeToContents); //用户不可更改列宽
ui->IOtable->horizontalHeader()->setSectionResizeMode(VALUE_COLUMN, QHeaderView::Stretch);
ui->IOtable->horizontalHeader()->setSectionResizeMode(BUSTYPE_COLUMN, QHeaderView::ResizeToContents);
ui->IOtable->horizontalHeader()->setSectionResizeMode(UNIT_COLUMN, QHeaderView::Stretch);
ui->IOtable->horizontalHeader()->setSectionResizeMode(UNITMAP_COLUMN, QHeaderView::ResizeToContents); //根据空间自动改变列宽
ui->IOtable->horizontalHeader()->setSectionResizeMode(SIM_COLUMN, QHeaderView::Stretch);
connect(ui->IOtable->horizontalHeader(),SIGNAL(sectionClicked(int)),\
this, SLOT( sortByColumn(int))); //自定义槽函数,点击表头排序
ui->IOtable->setColumnWidth(TYPE_COLUMN, WinSize::lx2px(120));
ui->IOtable->setColumnWidth(NAME_COLUMN, WinSize::lx2px(120));
ui->IOtable->setColumnWidth(VALUE_COLUMN, WinSize::lx2px(120));
ui->IOtable->setColumnWidth(BUSTYPE_COLUMN, WinSize::lx2px(150));
ui->IOtable->setColumnWidth(UNIT_COLUMN, WinSize::lx2px(120));
ui->IOtable->setColumnWidth(UNITMAP_COLUMN, WinSize::lx2px(120));
ui->IOtable->setColumnWidth(SIM_COLUMN, WinSize::lx2px(120));
ui->IOtable->setSelectionBehavior(QAbstractItemView::SelectRows); //设置表格为整行选中
/*设置选中目标个数*/
ui->IOtable->setSelectionMode(QAbstractItemView::SingleSelection); //选中单个目标
// ui->IOtable->setSelectionMode(QAbstractItemView::ExtendedSelection);
// ui->IOtable->setSelectionMode(QAbstractItemView::MultiSelection); //选中多个目标
ui->IOtable->setEditTriggers (QAbstractItemView::NoEditTriggers); //将表格变为禁止编辑
// ui->IOtable->setAlternatingRowColors(true); //设置隔行变色,一灰一白
ui->IOtable->verticalHeader()->setFixedWidth(120);
ui->IOtable->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->IOtable->setSelectionMode(QAbstractItemView::SingleSelection);
ui->IOtable->setEditTriggers(QAbstractItemView::NoEditTriggers);
2.表格添加元素
QTableWidgetItem *dateTime = new QTableWidgetItem(logTmp->logTime);
ui->eventLogTable->setItem(0, DATE_COLUMN, dateTime);
dateTime->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //每个单元格文字居中显示
QTableWidgetItem *logType = new QTableWidgetItem(logTmp->typeText);
ui->eventLogTable->setItem(0, TYPE_COLUMN, logType);
logType->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QString domain;
domain = QString("%1").arg(logTmp->domainNumber,4,16,QLatin1Char('0'));
QString error;
error = "0x"+domain+QString("%1").arg(logTmp->errorCodeNo, 4,16,QLatin1Char('0'));
QTableWidgetItem *errorCode = new QTableWidgetItem(error);
ui->eventLogTable->setItem(0, CODE_COLUMN, errorCode);
errorCode->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QTableWidgetItem *titleItem = new QTableWidgetItem(logTmp->titleText);
ui->eventLogTable->setItem(0, TITLE_COLUMN, titleItem);
titleItem->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
分别设计好一行中每个表格元素(列总数),按行插入到表格中。
3.QTableWidget 美化设计技巧
基本外观设置
FriendTable->setFrameShape(QFrame::NoFrame); //设置边框
FriendTable->setHorizontalHeaderLabels(HeadList); 设置表头
FriendTable->setSelectionMode(QAbstractItemView::SingleSelection); 设置选择的模式为单选择
FriendTable->setSelectionBehavior(QAbstractItemView::SelectRows); 设置选择行为时每次选择一行
FriendTable->setShowGrid(false); 设置不显示格子线
FriendTable->setFont(font); 设置字体
,用void hideColumn ( int column )这个就可以隐藏某一列
用这个void showColumn ( int column )显示某一列
设置表单背景或透明
QPalette pal = musicTable->palette();
pal.setBrush(this->backgroundRole(),QBrush(QPixmap("images/background.png")) );
musicTable->setPalette( pal );
设置它的背景图片,也可以将QBrush初始化为QColor来设置背景颜色
QPalette pll = musicTable->palette();
pll.setBrush(QPalette::Base,QBrush(QColor(255,255,255,0)));
musicTable->setPalette(pll); //和QTextEdit一样,都可以使用样式表QPalette来修改它的背景颜色和背景图片,这里我们把刷子设置为全透明的,就可以是透明的
在QTableWidget列表中添加图片的方法
QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes"));
cubesHeaderItem->setIcon(QIcon(QPixmap("1.png")));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);
musicTable->setItem(1,1,cubesHeaderItem); //在第一行第一列中显示图片
*******************表头的属性修改****************
musicTable->horizontalHeader()->resizeSection(0,150); //修改表头第一列的宽度为150
musicTable->horizontalHeader()->setFixedHeight(25)