【嵌入式——QT】QTableWidget
- 互联网
- 2025-08-02 22:06:01

表格小部件为应用程序提供标准的表格显示功能。QTableWidget中的项由QTableWidgetItem提供。 如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。
常用函数
cellWidget(int row, int column) const:返回显示在给定行和列的单元格中的小部件;closePersistentEditor(QTableWidgetItem *item):关闭item的持久编辑器;column(const QTableWidgetItem *item) const:返回该项的列;columnCount() const:返回列数;currentColumn() const:返回当前项的列;currentItem() const:返回当前项;currentRow() const:返回当前行;editItem(QTableWidgetItem *item):如果项目是可编辑的,则开始编辑它;item(int row, int column) const:如果给定的行和列已经设置,则返回对应的项;否则返回nullptr;itemAt(const QPoint &point) const:返回指向给定点上的项的指针,如果point没有被表部件中的项覆盖,则返回nullptr;removeCellWidget(int row, int column):删除行和列指示的单元格上设置的小部件;row(const QTableWidgetItem *item) const:返回该项的行;rowCount() const:返回行数;setColumnCount(int columns):设置列数;setCurrentCell(int row, int column):将当前单元格设置为位置(行、列)处的单元格;setCurrentItem(QTableWidgetItem *item):将当前项设置为项;setHorizontalHeaderItem(int column, QTableWidgetItem *item):将“列”的水平标题项设置为“项”。如果有必要,列数会增加以适应项目。删除前一个首部项(如果有的话);setHorizontalHeaderLabels(const QStringList &labels):使用labels设置水平标题标签;setItem(int row, int column, QTableWidgetItem *item):将给定行和列的项设置为项;setRowCount(int rows):将这个表的模型中的行数设置为rows;setVerticalHeaderItem(int row, QTableWidgetItem *item):将行的垂直标题项设置为项;setVerticalHeaderLabels(const QStringList &labels):使用labels设置垂直标题标签;takeItem(int row, int column):从表中删除行和列的项,但不删除它;信号
cellActivated(int row, int column):当按行和列指定的单元被激活时,发出此信号;cellChanged(int row, int column):当由行和列指定的单元格中的项的数据发生更改时,就会发出此信号;cellClicked(int row, int column):每当单击表格中的一个单元格时,就会发出这个信号。指定的行和列是单击的单元格;cellDoubleClicked(int row, int column):每当双击表格中的一个单元格时,就会发出这个信号。指定的行和列是单击的单元格;cellEntered(int row, int column):当鼠标光标进入一个单元格时,就会发出这个信号。单元格由行和列指定;cellPressed(int row, int column):每当按下表格中的一个单元格时,就会发出这个信号。指定的行和列是按下的单元格;void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn):每当当前单元格发生变化时,该信号就会发出。previousRow和previousColumn指定的单元格是之前获得焦点的单元格,currentRow和currentColumn指定的单元格是新的当前单元格;currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous):每当当前元素发生变化时,就会发出这个信号。previous item是之前拥有焦点的项,current是新的当前项;itemActivated(QTableWidgetItem *item):当指定的元素被激活时,就会发出这个信号;itemChanged(QTableWidgetItem *item):每当item的数据发生变化时,就会发出这个信号;itemClicked(QTableWidgetItem *item):每当单击表中的某个元素时,就会发出这个信号。指定的项目是被单击的项目;itemDoubleClicked(QTableWidgetItem *item):每当双击表中的一个元素时,就会发出这个信号。指定的项是被双击的项;itemEntered(QTableWidgetItem *item):当鼠标光标进入某个元素时,就会发出这个信号。项目就是输入的项目;itemPressed(QTableWidgetItem *item):每当按下表中的一个元素时,就会发出这个信号。指定的项目是按下的项目;itemSelectionChanged():每当选择发生变化时,就会发出这个信号;槽函数
clear():删除视图中的所有项。这也将删除所有的选择和标题;clearContents():从视图中删除所有不在标题中的项。这也将删除所有的选择。表的维度保持不变;insertColumn(int column):在列处向表中插入一个空列;insertRow(int row):在表的row处插入一个空行;removeColumn(int column):从表中删除列及其所有项;removeRow(int row):从表中删除行及其所有项;scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible:如果需要,滚动视图以确保项目可见;QTableWidgetItem 表项用于保存表小部件的信息片段。项目通常包含文本、图标或复选框 QTableWidgetItem类是一个方便类,它取代了Qt 3中的QTableItem类。它提供了一个与QTableWidget类一起使用的项。
QTableWidgetItem常用函数
background() const:返回用于渲染项目背景的画笔;checkState() const:返回表项的已检状态;column() const:返回表中项的列。如果某项不在表中,这个函数将返回-1;data(int role) const:返回指定角色的项数据;flags() const:返回用于描述项的标志。它们决定是否可以检查、编辑和选择项目;font() const:返回用于渲染项目文本的字体;isSelected() const:如果选中项,则返回true,否则返回false;read(QDataStream &in):从流中读取项目;write(QDataStream &out) const:将项写入流输出;row() const:返回表中项目的行。如果某项不在表中,这个函数将返回-1;setCheckState(Qt::CheckState state):将表项的检查状态设置为state;setData(int role, const QVariant &value):为给定角色设置项的数据为指定的值;setFlags(Qt::ItemFlags flags):将项的标志设置为给定的标志。它们决定了是否可以选择或修改项;setText(const QString &text):将项的文本设置为指定的文本;setTextAlignment(int alignment):将项目文本的文本对齐方式设置为指定的对齐方式;图示
代码示例 QTableWidgetDialog.h
#ifndef QTABLEWIDGETDIALOG_H #define QTABLEWIDGETDIALOG_H #include <QDialog> #include <QLabel> namespace Ui { class QTableWidgetDialog; } enum CellType {ctName = 1000, ctSex, ctBirth, ctNation, ctPartyM, ctScore}; enum FieldColNum {colName=0, colSex, colBirth, colNation, colScore, colPartyM}; class QTableWidgetDialog : public QDialog { Q_OBJECT public: explicit QTableWidgetDialog(QWidget* parent = nullptr); ~QTableWidgetDialog(); void init(); void createItemARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score); private slots: void on_pbSetHeader_clicked(); void on_pbInit_clicked(); void on_pbSetCountRow_clicked(); void on_pbGetData_clicked(); void on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); void on_pbInsertRow_clicked(); void on_pbAddRow_clicked(); void on_pbRemoveCurRow_clicked(); void on_pbAutoRowh_clicked(); void on_pbAutoColw_clicked(); void on_checkBoxEdit_clicked(bool checked); void on_checkBoxRowHeader_clicked(bool checked); void on_checkBoxColHeader_clicked(bool checked); void on_checkBoxColor_clicked(bool checked); void on_radioButtonRow_clicked(); void on_radioButtonItem_clicked(); private: Ui::QTableWidgetDialog* ui; QLabel* labCellIndex; QLabel* labCellType; QLabel* labStudID; }; #endif // QTABLEWIDGETDIALOG_HQTableWidgetDialog.cpp
#include "QTableWidgetDialog.h" #include "ui_QTableWidgetDialog.h" #include <QDate> #include <QIcon> #include <QDebug> QTableWidgetDialog::QTableWidgetDialog(QWidget* parent) : QDialog(parent) , ui(new Ui::QTableWidgetDialog) { ui->setupUi(this); init(); } QTableWidgetDialog::~QTableWidgetDialog() { delete ui; } void QTableWidgetDialog::init() { ui->spinBoxCount->setMaximum(10000); } void QTableWidgetDialog::on_pbSetHeader_clicked() { QTableWidgetItem* headerItem; QStringList headerText; headerText<<"姓名"<<"性别"<<"出生日期"<<"民族"<<"分数"<<"是否党员"; ui->tableWidget->setColumnCount(headerText.count()); ui->tableWidget->horizontalHeader()->setMinimumHeight(50); for(int i=0; i<ui->tableWidget->columnCount(); i++) { headerItem = new QTableWidgetItem(headerText.at(i)); QFont font = headerItem->font(); font.setBold(true); font.setPointSize(12); headerItem->setTextColor(Qt::red); //设置单元格显示字体 headerItem->setFont(font); ui->tableWidget->setHorizontalHeaderItem(i, headerItem); } } void QTableWidgetDialog::on_pbInit_clicked() { QString strName, strSex; bool isParty = false; QDate birth; birth.setDate(1995, 1, 1); //清除表格数据区数据 但是不清除表头 ui->tableWidget->clearContents(); //返回数据区行数 int rows = ui->tableWidget->rowCount(); for(int i=0; i<rows; i++) { strName = QString::asprintf("学生%d", i); if((i % 2)==0) { strSex = "man"; } else { strSex = "woman"; } createItemARow(i, strName, strSex, birth, "汉族", isParty, 70); birth=birth.addDays(20); isParty = !isParty; } } void QTableWidgetDialog::createItemARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score) { QTableWidgetItem* item; QString str; uint studID = 201605000; item = new QTableWidgetItem(name, ctName); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //设置单元格前景色 // item->setForeground(Qt::darkGray); //设置一个图标 // item->setIcon(); //设置属性标记 // item->setFlags(Qt::ItemIsSelectable); studID+=rowNo; item->setData(Qt::UserRole, QVariant(studID)); ui->tableWidget->setItem(rowNo, colName, item); item = new QTableWidgetItem(sex, ctSex); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(rowNo, colSex, item); str = birth.toString("yyyy-MM-dd"); item = new QTableWidgetItem(str, ctBirth); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(rowNo, colBirth, item); item = new QTableWidgetItem(nation, ctNation); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(rowNo, colNation, item); str.setNum(score); item = new QTableWidgetItem(str, ctScore); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(rowNo, colScore, item); item = new QTableWidgetItem("党员", ctPartyM); if(isPm) { //设置单元格勾选状态 item->setCheckState(Qt::Checked); } else { item->setCheckState(Qt::Unchecked); } // //设置单元格背景颜色 item->setBackground(Qt::yellow); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget->setItem(rowNo, colPartyM, item); } void QTableWidgetDialog::on_pbSetCountRow_clicked() { ui->tableWidget->setRowCount(ui->spinBoxCount->text().toInt()); } void QTableWidgetDialog::on_pbGetData_clicked() { QString str; QTableWidgetItem* cellItem; ui->textEdit->clear(); for(int i=0; i<ui->tableWidget->rowCount(); i++) { str = QString::asprintf("%d ", i+1); for(int j=0; j<ui->tableWidget->columnCount()-1; j++) { cellItem = ui->tableWidget->item(i, j); str = str+cellItem->text() + " "; } cellItem = ui->tableWidget->item(i, colPartyM); if(cellItem->checkState()==Qt::Checked) { str = str+tr("partyM"); } else { str = str+tr("general"); } ui->textEdit->append(str); } } //单元格切换 触发该信号 void QTableWidgetDialog::on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { QTableWidgetItem* curItem =ui->tableWidget->item(currentRow, currentColumn); if(curItem == NULL) { return; } QString curstr = QString::asprintf("currentRow currentColumn :%d ,%d", currentRow, currentColumn); QString prestr = QString::asprintf("previousRow previousColumn :%d,%d", previousRow, previousColumn); qDebug()<<"curstr"<<curstr<<"prestr"<<prestr; } //插入 void QTableWidgetDialog::on_pbInsertRow_clicked() { int curRow = ui->tableWidget->currentRow(); ui->tableWidget->insertRow(curRow); createItemARow(curRow, "stu2", "man", QDate::fromString("1996-1-1", "yyyy-M-d"), "满族", false, 66); } void QTableWidgetDialog::on_pbAddRow_clicked() { int rowCounts = ui->tableWidget->rowCount(); ui->tableWidget->insertRow(rowCounts); createItemARow(rowCounts, "stu1", "man", QDate::fromString("1996-1-1", "yyyy-M-d"), "满族", false, 55); } void QTableWidgetDialog::on_pbRemoveCurRow_clicked() { int curRow = ui->tableWidget->currentRow(); ui->tableWidget->removeRow(curRow); } void QTableWidgetDialog::on_pbAutoRowh_clicked() { ui->tableWidget->resizeRowsToContents(); } void QTableWidgetDialog::on_pbAutoColw_clicked() { ui->tableWidget->resizeColumnsToContents(); } void QTableWidgetDialog::on_checkBoxEdit_clicked(bool checked) { if(checked) { //双击或者获取焦点后单击进入编辑状态 ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked); } else { ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); } } void QTableWidgetDialog::on_checkBoxRowHeader_clicked(bool checked) { ui->tableWidget->horizontalHeader()->setVisible(checked); } void QTableWidgetDialog::on_checkBoxColHeader_clicked(bool checked) { ui->tableWidget->verticalHeader()->setVisible(checked); } void QTableWidgetDialog::on_checkBoxColor_clicked(bool checked) { ui->tableWidget->setAlternatingRowColors(checked); } void QTableWidgetDialog::on_radioButtonRow_clicked() { ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); } void QTableWidgetDialog::on_radioButtonItem_clicked() { ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems); }【嵌入式——QT】QTableWidget由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【嵌入式——QT】QTableWidget”