【Qt编程之Widgets模块】-003:tablewidget表格之setCellWidget在单元格中放置控件

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_())


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个完整的示例代码,其包括了将树控件内容分行写入表格控件第一列的功能以及树控件的基本功能: ``` #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建树控件并添加节点 QTreeWidget *treeWidget = new QTreeWidget(); treeWidget->setColumnCount(1); treeWidget->setHeaderLabel("Tree View"); QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget, QStringList("Root")); for (int i = 0; i < 5; ++i) { QTreeWidgetItem *childItem = new QTreeWidgetItem(rootItem, QStringList(QString("Child %1").arg(i))); childItem->addChild(new QTreeWidgetItem(childItem, QStringList("Subchild 1\nSubchild 2"))); } treeWidget->expandAll(); // 创建表格控件 QTableWidget *tableWidget = new QTableWidget(); tableWidget->setColumnCount(1); tableWidget->setRowCount(treeWidget->topLevelItemCount()); tableWidget->setHorizontalHeaderLabels(QStringList("Table View")); // 将树控件内容分行写入表格控件第一列 for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) { QTreeWidgetItem *item = treeWidget->topLevelItem(i); QString text = item->text(0); QStringList lines = text.split("\n"); for (int j = 0; j < lines.size(); ++j) { QTableWidgetItem *tableItem = new QTableWidgetItem(lines[j]); tableWidget->setItem(i + j, 0, tableItem); } } // 创建主窗口并添加树控件表格控件 QMainWindow mainWindow; mainWindow.setCentralWidget(new QWidget()); QVBoxLayout *layout = new QVBoxLayout(mainWindow.centralWidget()); layout->addWidget(treeWidget); layout->addWidget(tableWidget); // 显示窗口 mainWindow.show(); // 进入事件循环 return app.exec(); } ``` 在这个示例代码,我们首先创建了一个树控件`treeWidget`,并添加了一个根节点以及若干子节点。然后,我们创建了一个表格控件`tableWidget`,并将其行数设置为树控件的顶层节点数量。接着,我们使用`for`循环遍历树控件的每个节点,将节点文本内容按行分割,并将其写入表格控件第一列对应的单元格。最后,我们将树控件表格控件添加到主窗口,并显示窗口。 这个示例代码还包括了树控件的基本功能,例如设置列数和表头标签、添加节点以及展开所有节点等。您可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值