setCellWidget:在单元格中放置控件
setItem:将文本放到单元格中
setStyleSheet:设置控件的样式
CHardWareUserDialog::CHardWareUserDialog(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.m_pBtnAdd, SIGNAL(clicked()), this, SLOT(onAdd()));
connect(ui.m_pBtnDelete, SIGNAL(clicked()), this, SLOT(onDelete()));
// 用户表格
ui.tableWidget->verticalHeader()->hide();
ui.tableWidget->setColumnCount(7);
ui.tableWidget->setRowCount(0);
ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui.tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);
ui.tableWidget->setFocusPolicy(Qt::NoFocus);
ui.tableWidget->setShowGrid(false);
QStringList header;
header << tr("") << tr("User ID")<< tr("User Name")<<tr("User Role")<< tr("Enable State") << tr("Other Info") << tr("Operation");
ui.tableWidget->setHorizontalHeaderLabels(header);
ui.tableWidget->setColumnWidth(0, 70);
ui.tableWidget->setColumnWidth(1, 200);
ui.tableWidget->setColumnWidth(2, 150);
ui.tableWidget->setColumnWidth(3, 150);
ui.tableWidget->setColumnWidth(4, 150);
ui.tableWidget->setColumnWidth(5, 150);
ui.tableWidget->setColumnWidth(6, 150);
ui.tableWidget->horizontalHeader()->setMinimumHeight(32);
for (int i = 0; i < ui.tableWidget->horizontalHeader()->count(); i++)
{
ui.tableWidget->horizontalHeaderItem(i)->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
}
ui.tableWidget->horizontalHeaderItem(ui.tableWidget->horizontalHeader()->count() - 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
ui.tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QCheckBox* selectAll = new QCheckBox(ui.tableWidget->horizontalHeader());
connect(selectAll, SIGNAL(stateChanged(int)), this, SLOT(onSelectAll(int)));
selectAll->setGeometry(4, 6, 20, 20);
initial();
}
void CHardWareUserDialog::initial()
{
std::vector<HardWareUser>vecAlluser = CHardWareUserManger::instance()->getAllUser();
for (auto it: vecAlluser)
{
int nCol = 0;
int nRow = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(nRow);
ui.tableWidget->setRowHeight(nRow, 54);
CTableWidgetItem* pItemCheck = new CTableWidgetItem("");
ui.tableWidget->setCellWidget(nRow, nCol++, pItemCheck);
if (nRow == 0)
{
pItemCheck->setEnableChecked(false);
}
// 用户ID
QTableWidgetItem* pItem = new QTableWidgetItem();
pItem->setText(QString::fromStdString(it.strUserNumber));
pItem->setData(Qt::UserRole, QString::fromStdString(it.strPwd));
pItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui.tableWidget->setItem(nRow, nCol++, pItem);
// 用户名
pItem = new QTableWidgetItem();
pItem->setText(it.strUserName.c_str());
pItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui.tableWidget->setItem(nRow, nCol++, pItem);
// 用户类型
pItem = new QTableWidgetItem();
QString strRole;
switch (it.userRole)
{
case Admin:
strRole = tr("admin");
break;
case Engineer:
strRole = tr("Engineer");
break;
case User:
strRole = tr("User");
break;
default:
break;
}
pItem->setText(strRole);
pItem->setData(Qt::UserRole, it.userRole);
pItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui.tableWidget->setItem(nRow, nCol++, pItem);
// 启用
pItem = new QTableWidgetItem();
QString strEnable = it.bEnable ? tr("Enable") : tr("Disable");
pItem->setText(strEnable);
pItem->setData(Qt::UserRole, it.bEnable);
pItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui.tableWidget->setItem(nRow, nCol++, pItem);
// 备注
pItem = new QTableWidgetItem();
pItem->setText(it.strInfo.c_str());
pItem->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui.tableWidget->setItem(nRow, nCol++, pItem);
// 在tablewidget表单中放置编辑按钮控件
QPushButton *pBtnOperat = new QPushButton;
pBtnOperat->setText(tr("Modify"));
ui.tableWidget->setCellWidget(nRow, nCol++, pBtnOperat);
connect(pBtnOperat, SIGNAL(clicked()), this, SLOT(onModify()));
}
}
- python示例
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import QStringListModel
import sys
class PlaceControlinCell(QWidget):
"""
setCellWidget:在单元格中放置控件
setItem:将文本放到单元格中
setStyleSheet:设置控件的样式
"""
def __init__(self):
super(PlaceControlinCell, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('在单元格中放置控件')
self.resize(430, 300)
layout = QHBoxLayout()
tableWidget = QTableWidget()
tableWidget.setRowCount(4)
tableWidget.setColumnCount(3)
tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '体重(kg)'])
textItem = QTableWidgetItem('小明')
tableWidget.setItem(0, 0, textItem)
combox = QComboBox()
combox.addItem('男')
combox.addItem('女')
# QSS Qt StyleSheet
combox.setStyleSheet('QComboBox{margin:3px};') # 以后会学,设置边距
tableWidget.setCellWidget(0, 1, combox)
modifyButton = QPushButton('修改')
modifyButton.setDown(True)
modifyButton.setStyleSheet('QPushButton{margin:3px};')
tableWidget.setCellWidget(0, 2, modifyButton)
layout.addWidget(tableWidget)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = PlaceControlinCell()
print(main.__doc__)
main.show()
sys.exit(app.exec_())