-
2021-02-26 16:52:59
添加功能
1、设置单元格文本居中
2、添加自定义按钮
3、设置指定行、列不可编辑代码展示
from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import pyqtSignal, Qt from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QItemDelegate from switchbtn import SwitchBtn class MyTableWidget(QTableWidget): switch_sig = pyqtSignal(list) def __init__(self, parent=None): super().__init__(parent) # 单元格文本居中(行,列,内容) def con_center(self, row, col, item_str): newItem = QTableWidgetItem(item_str) newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.setItem(row, col, newItem) # 添加状态按钮 def add_switchbtn(self, row, col): check_btn = SwitchBtn() check_btn.checkedChanged.connect(self.checkChanged) self.setCellWidget(row, col, check_btn) # 发送状态按钮信号 def checkChanged(self): check_box = self.sender() ix = self.indexAt(check_box.pos()) row, col, is_checked = ix.row(), ix.column(), check_box.checked self.switch_sig.emit([row, col, is_checked]) # 设置列不可编辑 def col_enabled(self, col): self.setItemDelegateForColumn(col, EmptyDelegate(self)) # 设置行不可编辑 def row_enabled(self, row): self.setItemDelegateForRow(row, EmptyDelegate(self)) class EmptyDelegate(QItemDelegate): def __init__(self, parent): super().__init__(parent) def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex): return None
switchbtn.py
链接:switchbtn.py
from switchbtn import SwitchBtn # 点击跳转链接查看switchbtn.py
更多相关内容 -
QT自定义QTableWidget
2020-06-23 12:05:08目录QT自定义QTableWidget1.实现效果2.具体实现:(1)表格QTabelWidget(2)表头QHeaderView QT自定义QTableWidget 1.实现效果 2.具体实现: (1)表格QTabelWidget QTabelWidget *table=new QTableWidget(11,6); //...QT自定义QTableWidget
1.实现效果
2.具体实现:
(1)表格QTabelWidget
QTabelWidget *table=new QTableWidget(11,6); //设置行列个数 table->setShowGrid(false); //是否显示内部网格线条 table->setFixedSize(1782,698); //设置表格固定大小 table->setAlternatingRowColors(1); //是否显示交替颜色 table->setEditTriggers(QAbstractItemView::NoEditTriggers); //是否可编辑 table->setSelectionMode(QAbstractItemView::NoSelection); //是否可选中 table->setProperty("table_31",true); //设置分类 for(int i=0; i<11; i++ ){ //设置行高,列宽 table->setRowHeight(i,58); } for(int i=0; i<6; i++ ){ table->setColumnWidth(i,200); }
- qss样式表
QTableWidget[table_31="true"]{ border: 1px solid #8B8B8B; /*表格外边框*/ padding: 0px; /*内边距*/ margin: 0px; /*外边距*/ color: #575757; /*表格文本的颜色*/ background: white; /*表格背景色*/ alternate-background-color: lightgray; /*表格交替色*/ gridline-color: #8B8B8B; /*网格边框*/ font-size: 24px; /*表格文本大小*/ border-radius: 20px; /*表格边框弧度*/ font-family: "Microsoft YaHei"; /*表格文本字体*/ } QTableWidget::item[table_31="true"]{ border-radius: 0px; /*item 弧度*/ background: transparent; /*item 背景色*/ border-style: none; /*去除边框*/ border-bottom: 1px solid #8B8B8B; /*底 边框*/ border-right: 1px solid red; /*右 边框*/ border-left: 1px solid red; /*左 边框*/ border-top: 1px solid #8B8B8B; /*顶 边框*/ } /*item 选中时*/ QTableWidget::item:selected[table_31="true"]{ background: transparent; color: black; } /*item 悬停*/ QTableWidget::item:hover[table_31="true"]{ background: transparent; color: black; } /*垂直表头和水平表头相交的单元格*/ QTableWidget[table_31="true"] QTableCornerButton::section{ background: white; border: 1px solid #8B8B8B; }
(2)表头QHeaderView
//水平表头 table->horizontalHeader()->setVisible(true); //设置表头是否可见 table->horizontalHeader()->setStretchLastSection(true); //自动调整对齐右边边界 table->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //表头文本对齐方式 table->horizontalHeader()->setObjectName("hHeader"); //表头对象名 //垂直表头 table->verticalHeader()->setVisible(false); table->verticalHeader()->setStretchLastSection(true); //自动调整对齐底部边界 table->verticalHeader()->setDefaultAlignment(Qt::AlignHCenter | Qt::AlignVCenter); table->verticalHeader()->setObjectName("vHeader"); //设置表头文本 QStringList header; header<<"A"<<"B"<<"C"<<"D"<<"E"<<"F"; table->setHorizontalHeaderLabels(header); header.clear(); header<<"A"<<"B"<<"C"<<"D"<<"E"<<"F"<<"G"<<"H"<<"I"<<"J"<<"K"; table->setVerticalHeaderLabels(header);
- qss样式表
/*水平表头*/ QHeaderView#hHeader{ min-height: 50px; /*表头最小高度*/ background-color: transparent; border-top-left-radius: 10px; border-top-right-radius: 10px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } /*表头section*/ QHeaderView::section#hHeader{ background-color: transparent; border: 1px solid #8B8B8B; border-radius: 0px; font-size: 24px; color: #1B1B1B; /*border-style:none;*/ border-bottom: 1px solid #8B8B8B; border-right: 1px solid blue; border-left: 1px solid blue; border-top: 1px solid blue; } /*垂直表头*/ QHeaderView#vHeader{ min-width: 50px; background: white; } QHeaderView::section#vHeader{ background-color: white; border: 1px solid #8B8B8B; border-radius: 0px; border-left-color: white; font-size: 24px; font-family: "Microsoft YaHei"; }
(3)插入数据
for(int i=0; i<11; i++){ for(int j=0; j<6; j++){ QTableWidgetItem *tab_item=new QTableWidgetItem("Jan"); tab_item->setTextAlignment(Qt::AlignCenter); table->setItem(i,j,tab_item); //文本 //table->setItem(0,1,new QTableWidgetItem(QIcon(":/Image/IED.png"), "Jan's month")); //图片 //table->setCellWidget(0,0,new QLabel("Love")); //label } }
-
自定义QTableWidget实现分页
2020-09-21 17:48:03然后用代码定义一个PageTable类,将分页组件与QTableWidget封装进去 使用封装好的PageTable 核心代码如下: 自定义Page组件 类 #include "PageWidget.h" #include "ui_PageWidget.h" #include <QtGlobal>...QT自带没有分页组件,加载表格大数据的时候有些不方便,因此打算全部用源码自定义一个表格+分页,这样方便以后移植。
具体思路如下:
- 先实现一个分页组件
- 然后用代码定义一个PageTable类,将分页组件与QTableWidget封装进去
- 使用封装好的PageTable
核心代码如下:
- 自定义Page组件 类
#include "PageWidget.h" #include "ui_PageWidget.h" #include <QtGlobal> #include <QHBoxLayout> #include <QMouseEvent> #include <QKeyEvent> #include <QDebug> PageWidget::PageWidget(int blockSize, QWidget *parent) : QWidget(parent), ui(new Ui::PageWidget) { ui->setupUi(this); setBlockSize(blockSize); initialize(); maxPage = 0; setMaxPage(1); } PageWidget::~PageWidget() { delete ui; delete pageLabels; } bool PageWidget::eventFilter(QObject *watched, QEvent *e) { if (e->type() == QEvent::MouseButtonRelease) { int page = -1; if (watched == ui->previousPageLabel) { page = getCurrentPage() - 1; } if (watched == ui->nextPageLabel) { page = getCurrentPage() + 1; } for (int i = 0; i < pageLabels->count(); ++i) { if (watched == pageLabels->at(i)) { page = pageLabels->at(i)->text().toInt(); break; } } if (-1 != page) { setCurrentPage(page, true); return true; } } if (watched == ui->pageLineEdit && e->type() == QEvent::KeyRelease) { QKeyEvent *ke = static_cast<QKeyEvent *>(e); if (ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return) { setCurrentPage(ui->pageLineEdit->text().toInt(), true); //setMaxPage(ui->pageLineEdit->text().toInt()); // 测试生成多个页码 return true; } } return QWidget::eventFilter(watched, e); } int PageWidget::getBlockSize() const { return blockSize; } int PageWidget::getMaxPage() const { return maxPage; } int PageWidget::getCurrentPage() const { return currentPage; } void PageWidget::setMaxPage(int page) { page = qMax(page, 1); if (maxPage != page) { this->maxPage = page; this->currentPage = 1; updatePageLabels(); } } void PageWidget::setCurrentPage(int page, bool signalEmitted) { page = qMax(page, 1); page = qMin(page, maxPage); if (page != this->currentPage) { this->currentPage = page; updatePageLabels(); if (signalEmitted) { emit currentPageChanged(page); } } } void PageWidget::setBlockSize(int blockSize) { // 为了便于计算, block size 必须是奇数, 且最小为3 blockSize = qMax(blockSize, 3); if (blockSize % 2 == 0) { ++blockSize; } this->blockSize = blockSize; } // 初始化页码的labels // 分成三个部分, 左...中...右 void PageWidget::initialize() { ui->pageLineEdit->installEventFilter(this); ui->pageLineEdit->setValidator(new QIntValidator(1, 10000000, this)); ui->nextPageLabel->setProperty("page", "true"); ui->previousPageLabel->setProperty("page", "true"); ui->nextPageLabel->installEventFilter(this); ui->previousPageLabel->installEventFilter(this); pageLabels = new QList<QLabel *>(); QHBoxLayout *leftLayout = new QHBoxLayout(); QHBoxLayout *centerLayout = new QHBoxLayout(); QHBoxLayout *rightLayout = new QHBoxLayout(); leftLayout->setContentsMargins(0, 0, 0, 0); leftLayout->setSpacing(0); centerLayout->setContentsMargins(0, 0, 0, 0); centerLayout->setSpacing(0); rightLayout->setContentsMargins(0, 0, 0, 0); rightLayout->setSpacing(0); for (int i = 0; i < blockSize * 3; ++i) { QLabel *label = new QLabel(QString::number(i + 1)); label->setProperty("page", "true"); label->installEventFilter(this); pageLabels->append(label); if (i < blockSize) { leftLayout->addWidget(label); } else if (i < blockSize * 2) { centerLayout->addWidget(label); } else { rightLayout->addWidget(label); } } ui->leftPagesWidget->setLayout(leftLayout); ui->centerPagesWidget->setLayout(centerLayout); ui->rightPagesWidget->setLayout(rightLayout); } void PageWidget::updatePageLabels() { ui->leftSeparateLabel->hide(); ui->rightSeparateLabel->hide(); if (maxPage <= blockSize * 3) { for (int i = 0; i < pageLabels->count(); i += 1) { QLabel *label = pageLabels->at(i); if (i < maxPage) { label->setText(QString::number(i + 1)); label->show(); } else { label->hide(); } if (currentPage - 1 == i) { label->setProperty("currentPage", "true"); } else { label->setProperty("currentPage", "false"); } label->setStyleSheet("/**/"); } return; } // 以下情况为maxPageNumber大于blockSize * 3, 所有的页码label都要显示 // c 为 currentPage // n 为 block size // m 为 maxPage // 1. c ∈ [1, n + n/2 + 1]: 显示前 n * 2 个, 后 n 个: 只显示右边的分隔符 // 2. c ∈ [m - n - n/2, m]: 显示前 n 个, 后 n * 2 个: 只显示左边的分隔符 // 3. 显示[1, n], [c - n/2, c + n/2], [m - 2*n + 1, m]: 两个分隔符都显示 int c = currentPage; int n = blockSize; int m = maxPage; int centerStartPage = 0; if (c >= 1 && c <= n + n / 2 + 1) { // 1. c ∈ [1, n + n/2 + 1]: 显示前 n * 2 个, 后 n 个: 只显示右边的分隔符 centerStartPage = n + 1; ui->rightSeparateLabel->show(); } else if (c >= m - n - n / 2 && c <= m) { // 2. c ∈ [m - n - n/2, m]: 显示前 n 个, 后 n * 2 个: 只显示左边的分隔符 centerStartPage = m - n - n + 1; ui->leftSeparateLabel->show(); } else { // 3. 显示[1, n], [c - n/2, c + n/2], [m - n + 1, m]: 两个分隔符都显示 centerStartPage = c - n / 2; ui->rightSeparateLabel->show(); ui->leftSeparateLabel->show(); } for (int i = 0; i < n; ++i) { pageLabels->at(i)->setText(QString::number(i + 1)); // 前面 n 个 pageLabels->at(n + i)->setText(QString::number(centerStartPage + i)); // 中间 n 个 pageLabels->at(3 * n - i - 1)->setText(QString::number(m - i)); // 后面 n 个 } for (int i = 0; i < pageLabels->count(); ++i) { QLabel *label = pageLabels->at(i); int page = label->text().toInt(); if (page == currentPage) { label->setProperty("currentPage", "true"); } else { label->setProperty("currentPage", "false"); } label->setStyleSheet("/**/"); label->show(); } }
- 封装后的PageTable类
#include "PageTable.h" #include <QTableWidget> #include <QDebug> #include <QHeaderView> PageTable::PageTable(QStringList &header,int rowCount) { qDebug()<<" PageTable init ,rowCount:"<<rowCount << ",header size:"<<header.size(); tableWidget = new QTableWidget(rowCount,header.size());//构造一个10行5列的表格 tableWidget->setWindowTitle("Title"); tableWidget->setHorizontalHeaderLabels(header); tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);//设置表格为单行选择 tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//设置只能选中行,不能单个选择单元格 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置单元格不可编辑 tableWidget->verticalHeader()->setHidden(true);// 隐藏行号 (不显示前面行号) tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//让表格挤满占个父容器 // for(int i = 1;i<header.size();i++) // tableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Interactive); //然后设置要根据内容使用宽度的列(其他没设置的列自动缩放) // for(int i = 0;i<rowCount;i++){ // tableWidget->setItem(i,0, new QTableWidgetItem("context")); // tableWidget->item(i,0)->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter); // tableWidget->setRowHeight(i,25); // } //设置表头样式 tableWidget->setStyleSheet("QHeaderView::section {" "color: black;font:bold 14px \"微软雅黑\";" "text-align:center;" "height:25px;" "background-color: #d1dff0;" " border:1px solid #8faac9;" "border-left:none;" "}"); QHBoxLayout *hLayout = new QHBoxLayout();//让PageWidget水平居中 pageWidget = new PageWidget(); //pageWidget->setMaxPage(20); hLayout->addWidget(pageWidget); // 分页组件的css,这个内容应该放到普通文件中然后加载 QString qss = QString(".QLabel[page=\"true\"] { padding: 1px; }") + QString(".QLabel[currentPage=\"true\"] { color: rgb(190, 0, 0);}") + QString(".QLabel[page=\"true\"]:hover { color: white; border-radius: 4px; background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(53, 121, 238, 255), stop:1 rgba(0, 202, 237, 255));}"); pageWidget->setStyleSheet(qss); this->addWidget(tableWidget); this->addLayout(hLayout); tableWidget->horizontalHeader()->size();//列 } void PageTable::SetData(QList<QList<QString>> &DataList) { for(int i = 0;i<DataList.size();i++){ QList<QString> Item = DataList[i]; for(int j = 0;j<Item.size();j++){ this->tableWidget->setItem(i,j, new QTableWidgetItem(Item[j])); } } } PageTable::~PageTable() { qDebug() << "~PageTable() invoke..." ; }
- 使用
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QVBoxLayout> #include <QHBoxLayout> #include <QTableWidget> #include <QDebug> #include "pageWidget/PageTable.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); qDebug() << "[Debug] MyObject::test "; QStringList header; header<<"T1"<<"T2"<<"T3"<<"T4"<<"T5"<<"T6"<<"T7"; pageTable = new PageTable(header,5); ui->testLayout->addLayout(pageTable); connect(pageTable->pageWidget, SIGNAL(currentPageChanged(int)), this, SLOT(PageChange(int))); } QList<QList<QString>> DataList;//数据 int RowIndex = 0; void MainWindow::LoadPage(int pageIndex){ DataList.clear();//先清空,只缓存一页。如果有100万条,缓存到List不合适 for(int i = 0;i< 10;i++){//10行 QList<QString> Row; RowIndex += 1; Row.append(QString("Data_1_%1_%2").arg(RowIndex).arg(pageIndex)); Row.append(QString("Data_2_%1_%2").arg(RowIndex).arg(pageIndex)); Row.append(QString("Data_3_%1_%2").arg(RowIndex).arg(pageIndex)); Row.append(QString("Data_4_%1_%2").arg(RowIndex).arg(pageIndex)); Row.append(QString("Data_5_%1_%2").arg(RowIndex).arg(pageIndex)); Row.append(QString("Data_6_%1_%2").arg(RowIndex).arg(pageIndex)); Row.append(QString("Data_7_%1_%2").arg(RowIndex).arg(pageIndex)); DataList.append(Row); } pageTable->SetData(DataList); } void MainWindow::BtnLoadDataClick(){ qDebug() << "click ...."<<RowIndex; pageTable->pageWidget->setMaxPage(10);//假如有10页数据 pageTable->pageWidget->setCurrentPage(1); RowIndex = 0; LoadPage(1);//加载第一页 } void MainWindow::PageChange(int currentPage){ qDebug()<<"pageChagne"<<currentPage; this->LoadPage(currentPage); } MainWindow::~MainWindow() { delete ui; }
效果如下:
-
QTableWidget自定义提升类管理多个表格显示
2020-05-12 00:03:33QTableWidget> #include "widget.h" #include <QTableWidgetItem> class MyTable : public QTableWidget { public: MyTable(QWidget *parent = nullptr); ~MyTable(); void SetType(PageId提升类要管理多种表格的数据,也可以考虑QList中存储数据对象的基类指针,用法QList存储多种数据类型,省去了每一种表格都要新加一个QList对象保存
mytable.h#ifndef MYTABLE_H #define MYTABLE_H #include <QTableWidget> #include "widget.h" #include <QTableWidgetItem> class MyTable : public QTableWidget { public: MyTable(QWidget *parent = nullptr); ~MyTable(); void SetType(PageId::Type type); void initTable(); void SetTablePage1(); void SetTablePage2(); void SetTablePage3(); void SetTableInfo1(QString str); void SetTableInfo2(QString str); void SetTableInfo3(QString str); void ShowTableInfo1(); void ShowTableInfo2(); void ShowTableInfo3(); void ClearTableInfo(); private: void OnItemChange(QTableWidgetItem *item); private: PageId::Type m_type; QList<tableInfo> m_table1; QList<tableInfo> m_table2; QMap<PageId::Type,QList<tableInfo>> m_tableMap; }; #endif // MYTABLE_H
mytable.cpp
#include "mytable.h" #include <QDebug> #include <QHeaderView> #include <iostream> using namespace std; MyTable::MyTable(QWidget *parent):QTableWidget(parent),m_type(PageId::En_Type1) { initTable(); connect(this,&MyTable::itemChanged,this,&MyTable::OnItemChange); tableInfo info; for(int i=0; i<5; i++){ m_table1.push_back(info); m_table2.push_back(info); } } MyTable::~MyTable() { } void MyTable::SetType(PageId::Type type) { m_type = type; } void MyTable::initTable() { switch (m_type) { case PageId::En_Type1: ClearTableInfo(); SetTablePage1(); ShowTableInfo1(); break; case PageId::En_Type2: ClearTableInfo(); SetTablePage2(); ShowTableInfo2(); break; case PageId::En_Type3: break; default:{} } } void MyTable::SetTablePage1() { QStringList strs; strs << "one" << "two" << "three" << "four" << "five"; setColumnCount(5); setHorizontalHeaderLabels(strs); setRowCount(5); } void MyTable::SetTablePage2() { QStringList strs; strs << "1" << "2" << "3" << "4" << "5"; setColumnCount(5); setHorizontalHeaderLabels(strs); } void MyTable::SetTablePage3() { } void MyTable::SetTableInfo1(QString str) { int row = currentIndex().row(); int column = currentIndex().column(); qDebug() << row << ":" << column; switch(column) { case 0: m_table1[row].one = str; break; case 1: m_table1[row].two = str; break; case 2: m_table1[row].three = str; break; case 3: m_table1[row].four = str; break; case 4: m_table1[row].five = str; break; default:{} } m_tableMap[m_type] = m_table1; } void MyTable::SetTableInfo2(QString str) { int row = currentIndex().row(); int column = currentIndex().column(); //qDebug() << row << ":" << column; switch(column) { case 0: m_table2[row].one = str; break; case 1: m_table2[row].two = str; break; case 2: m_table2[row].three = str; break; case 3: m_table2[row].four = str; break; case 4: m_table2[row].five = str; break; default:{} } m_tableMap[m_type] = m_table2; } void MyTable::SetTableInfo3(QString str) { } void MyTable::ShowTableInfo1() { QList<tableInfo> list = m_tableMap[m_type]; for (int i=0; i<list.count(); i++) { setItem(i,0,new QTableWidgetItem(list[i].one)); setItem(i,1,new QTableWidgetItem(list[i].two)); setItem(i,2,new QTableWidgetItem(list[i].three)); setItem(i,3,new QTableWidgetItem(list[i].four)); setItem(i,4,new QTableWidgetItem(list[i].five)); //item(i,1)->setData(Qt::DisplayRole,list[i].two);//需要先申请item元素资源,否则item为空 //item(i,2)->setData(Qt::DisplayRole,list[i].three); //item(i,3)->setData(Qt::DisplayRole,list[i].four); //item(i,4)->setData(Qt::DisplayRole,list[i].five); } } void MyTable::ShowTableInfo2() { QList<tableInfo> list = m_tableMap[m_type]; for (int i=0; i<list.count(); i++) { setItem(i,0,new QTableWidgetItem(list[i].one)); setItem(i,1,new QTableWidgetItem(list[i].two)); setItem(i,2,new QTableWidgetItem(list[i].three)); setItem(i,3,new QTableWidgetItem(list[i].four)); setItem(i,4,new QTableWidgetItem(list[i].five)); } } void MyTable::ShowTableInfo3() { } void MyTable::ClearTableInfo() { setRowCount(0); setRowCount(5); } void MyTable::OnItemChange(QTableWidgetItem *item) { QString str = item->data(Qt::DisplayRole).toString(); switch (m_type) { case PageId::En_Type1: SetTableInfo1(str); break; case PageId::En_Type2: SetTableInfo2(str); break; case PageId::En_Type3: break; default:{} } }
mywidget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } namespace PageId { enum Type{ En_Type1, En_Type2, En_Type3 }; } QT_END_NAMESPACE class tableInfo { public: QString one; QString two; QString three; QString four; QString five; }; class tableInfo1 : public tableInfo { }; class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); void SetType(PageId::Type type); private slots: void on_pushButton_clicked(); private: Ui::Widget *ui; PageId::Type m_type; }; #endif // WIDGET_H
mywidget.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget),m_type(PageId::En_Type1) { ui->setupUi(this); ui->label->setText("table1"); } Widget::~Widget() { delete ui; } void Widget::SetType(PageId::Type type) { m_type = type; ui->tableWidget->SetType(m_type); ui->tableWidget->initTable(); } void Widget::on_pushButton_clicked() { int cnt = ui->lineEdit->text().toInt(); switch (cnt) { case 0: SetType(PageId::En_Type1); ui->label->setText("table1"); break; case 1: SetType(PageId::En_Type2); ui->label->setText("table2"); break; case 2: SetType(PageId::En_Type3); ui->label->setText("table3"); break; default:{} } }
-
QT+qtablewidget自定义表头【合并单元格】
2018-06-12 20:25:001、把下列文件放在工程中【已上传到我的文件中】 2、代码 auto *headview = new HHeadViewClass(Qt::Horizontal, ui.tableWidget); ...setSectionResizeMode(QHeaderView::Interactive);...titleHigh = 5... -
QTableWiget设置自定义排序
2020-09-21 19:09:54很多引用场景中,我们需要使用到QTableWidget来显示内容,如资源管理器中显示的系统信息。使用过程中,对里面的Item进行排序,将显得更加条理可观。 二.使用 下面为一种简单的实现方法: class ... -
QTableWidget QTableView 自定义复杂表头(多行表头,表头合并) 、冻结、固定特定的行
2019-07-30 16:08:55QTableWidget QTableView 自定义复杂表头(多行表头,表头合并) 、冻结、固定特定的行 -
PYQT5+sqlite数据库+QTableWidget自定义表格显示
2019-10-17 17:58:02通过PYQT5做的一个桌面小工具,连接sqlite数据库,自定义表格展示数据,以及表格点击显示出详细数据,供大家参考。 -
QTableWidget实现复选框与自定义编辑
2022-04-17 13:37:26针对QTableWidget实现复选框、编辑功能的demo,在原生可编辑功能上进行了自定义功能的封装,参考此案例可进行自行扩展更多自定义需求开发,针对有自定义功能需求的开发者有一定启发作用,其中包含完整案例,本项目... -
QT笔记:给QTableWidget添加自定义水平标题
2011-11-16 16:04:32第一种:使用QStringList方式 QString labels; labels table....第二种:在自定义模型中实现headerData() QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role -
QTableView/QTableWidget自定义表头,添加复选框,下拉框控件
2020-12-30 15:50:38自定义表头,添加复选框和下拉选项框 -
【专题2:电子工程师 之 上位机】 之 【26.QTableWidget的信号 (d)】
2020-05-29 11:48:42QTableWidget -
QTableWidget使用自定义代理
2019-05-12 19:48:11QTableWidget表格使用自定义代理,以QLineEdit为例 继承QItemDelegate类 主要重写四个方法 createEditor() setEditorData() setModelData() updateEditorGeometry() #include #include class ... -
在QTableWidget中使用自定义委托组件
2021-03-13 23:53:302.将委托设置给QTableWidget 自定义委托组件 1.继承自QItemDelegate类 2.重写以下函数 virtual QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index... -
QTableWidget自定义表头行排序?
2022-05-07 16:36:03如果不好计算,可以利用自定义表头排序,但是不知道如何重载排序函数,因为我这个排序是根据数据项排序,既不是升排也不是降序。而且通过查资料都是对列进行排序,没有对表头的数据项进行排序的。 问题相关代码,... -
QTableWidget自定义委托
2020-04-21 20:44:21QTableWidget单元格使用自定义的lineEdit控件导致不能选中 使用自定义委托解决 1.自定义委托 class LineEditDelegate : public QItemDelegate { Q_OBJECT public: LineEditDelegate(QObject *parent = 0); //... -
Qt QTableWidget QTableWidget 表头 添加自定义 QHeaderView QCheckBox QCombox 并实现表头控制列
2019-12-06 16:54:40Qt QTableWidget QTableWidget 表头 添加自定义 QHeaderView QCheckBox QCombox 并实现表头控制列 实现效果如下 QTableWidget的表头不能直接添加QWidget,如果需要在表头添加自定义控件,需要继承重写QHeaderView,... -
PyQt5开发之QTableWidget表头自定义与美化Demo
2022-04-22 23:23:00博主进行在做PyQt5软件开发的美化工作,其中遇到一个比较困难的问题是QTableWidget控件的样式设置与自定义。为了帮助遇到与博主类似问题的小伙伴,节省大量查询资料的时间,现单独写了一个QWidget嵌套QTableWidget的... -
PyQt5 使用自定义ToolTip解决QTableWidget数据显示不全问题
2020-04-10 17:08:20最近在使用PyQT5做一个项目,用到最多的控件是QTableWidget,使用很方便,但是也存在很多问题,比如下面这种: 数据太长,使用QTableWidget默认的列宽分配会导致显示不全,数据以"XXX..."的形式呈现,很不利于用户... -
定制QHeaderView,适用于QTreeView、QTableView、QTreeWidget、QTableWidget控件自定义标题栏
2021-06-11 15:12:10用于QTreeView、QTableView、QTreeWidget、QTableWidget的定制QHeaderView,实现类似Windows资源管理器中标题栏的效果:鼠标移到标题栏显示箭头按钮,点击后显示下拉菜单,菜单支持多选checkbox。可方便的显示/隐藏... -
QTableWidget 自定义排序
2010-10-20 12:13:00一种是直接设置每个格子对应的QTableWidgetItem的值,因为QTableWidget默认是据QTableWidgetItem来排序,调用的比较函数是: bool QTableWidgetItem::operator( const QTableWidgetItem & other ) ... -
实例QT程序 —— QTableWidget 表格右键菜单功能(该方式可用于任意Widget子类控件)
2020-03-28 20:42:13实例QT程序 —— 在QTableWidget表格中添加右键菜单功能。 编译可以直接运行。 运行环境WIN10 Qt5.9.7 。 资源为源码压缩包:QTableWidgetContextMenu.rar 相关文章链接如下: ...
收藏数
2,015
精华内容
806