精华内容
下载资源
问答
  • 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
            }
        }
    
    展开全文
  • PyQt5 自定义QTableWidget

    2021-02-26 16:52:59
    添加功能 1、设置单元格文本居中 2、添加自定义按钮 ...from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QItemDelegate from switchbtn import SwitchBtn class MyTableWidget(QTabl

    添加功能

    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
    
    展开全文
  • 然后用代码定义一个PageTable类,将分页组件与QTableWidget封装进去 使用封装好的PageTable 核心代码如下: 自定义Page组件 类 #include "PageWidget.h" #include "ui_PageWidget.h" #include <QtGlobal>...

    QT自带没有分页组件,加载表格大数据的时候有些不方便,因此打算全部用源码自定义一个表格+分页,这样方便以后移植。

    具体思路如下:

    1.   先实现一个分页组件
    2.  然后用代码定义一个PageTable类,将分页组件与QTableWidget封装进去
    3. 使用封装好的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-04-21 20:44:21
    QTableWidget单元格使用自定义的lineEdit控件导致不能选中 使用自定义委托解决 1.自定义委托 class LineEditDelegate : public QItemDelegate { Q_OBJECT public: LineEditDelegate(QObject *parent = 0); //...

    QTableWidget单元格使用自定义的lineEdit控件导致不能选中

    使用自定义委托解决

    1.自定义委托

    class LineEditDelegate : public QItemDelegate
    {
      Q_OBJECT
    
    public:
      LineEditDelegate(QObject *parent = 0);
      //重写以下方法
    
      //创建编辑器,当视图需要一个编辑器时会告知委托为被修改的项目提供一个编辑器部件,此时会调用此方法
      QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
        const QModelIndex &index) const;
      //为编辑器设置数据,将模型中的数据设置到编辑器中
      void setEditorData(QWidget *editor, const QModelIndex &index) const;
      //将数据写入到模型中,当用户编辑完成后把编辑器中的数据写入到模型中
      void setModelData(QWidget *editor, QAbstractItemModel *model,
        const QModelIndex &index) const;
      //更新编辑器几何布局
      void updateEditorGeometry(QWidget *editor,
        const QStyleOptionViewItem &option, const QModelIndex &index) const;
    };
    LineEditDelegate::LineEditDelegate(QObject *parent)
      : QItemDelegate(parent)
    {
    }
    
    QWidget *LineEditDelegate::createEditor(QWidget *parent,
      const QStyleOptionViewItem &/* option */,
      const QModelIndex &/* index */) const
    {
      LonLatLineEdit *editor = new LonLatLineEdit(parent);
    
      return editor;
    }
    
    void LineEditDelegate::setEditorData(QWidget *editor,
      const QModelIndex &index) const
    {
      QString value = index.model()->data(index, Qt::EditRole).toString();
      LonLatLineEdit *widget = static_cast<LonLatLineEdit*>(editor);
      widget->setText(value);
    }
    
    void LineEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
      const QModelIndex &index) const
    {
      LonLatLineEdit *widget = static_cast<LonLatLineEdit*>(editor);
      widget->trans();
      QString value = widget->text();
      model->setData(index, value, Qt::EditRole);
    }
    
    void LineEditDelegate::updateEditorGeometry(QWidget *editor,
      const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
    {
      editor->setGeometry(option.rect);
    }
    

    2.QTableWidget整行设置代理

    
    ui.tableWidget_node->setItemDelegateForColumn(1,new LineEditDelegate);
    
    设置数据
    ui.tableWidget_node->setItem(row, 1, new QTableWidgetItem(temp));
    获取数据
    QString text = ui.tableWidget_node->item(row, 1)->text();
    

    原文来自微信公众号"程序员成长日志",已经工作的程序员朋友可以关注下,分享日常工作中解决的问题即可赚取稿费,大家一起成长~
    在这里插入图片描述

    展开全文
  • QTableWidget 自定义排序

    千次阅读 2010-10-20 12:13:00
    一种是直接设置每个格子对应的QTableWidgetItem的值,因为QTableWidget默认是据QTableWidgetItem来排序,调用的比较函数是: bool QTableWidgetItem::operator( const QTableWidgetItem & other ) ...
  • 需求:改变QTreeWidget和QTableWidget控件中鼠标滚轮的响应动作,不让鼠标滚轮控制滚动条上下滚动。 实现: 1、在控件的实现函数中重新实现wheelEvent。 void TSSTree::wheelEvent(QWheelEvent* event) { ...
  • 最近在使用PyQT5做一个项目,用到最多的控件是QTableWidget,使用很方便,但是也存在很多问题,比如下面这种: 数据太长,使用QTableWidget默认的列宽分配会导致显示不全,数据以"XXX..."的形式呈现,很不利于用户...
  • QTableWidget表格使用自定义代理,以QLineEdit为例 继承QItemDelegate类 主要重写四个方法 createEditor() setEditorData() setModelData() updateEditorGeometry() #include #include class ...
  • Qt QTableWidget QTableWidget 表头 添加自定义 QHeaderView QCheckBox QCombox 并实现表头控制列 实现效果如下 QTableWidget的表头不能直接添加QWidget,如果需要在表头添加自定义控件,需要继承重写QHeaderView,...
  • } 代码讲解 推荐继承自QStyledItemDelegate,因为它可以使用当前的Sytle绘制Items,而继承QItemDelegate需要自定义Sytle。具体可以参考Qt的手册 QStyledItemDelegate vs. QItemDelegate,讲解的比较详细。 ...
  • PyQT5实现QTableWidget自定义分页

    千次阅读 2019-03-13 14:35:00
    需求分析: 在做一个界面工具的时候, 由于需要用QTableWidget显示查询数据库返回的内容, 但数据库返回内容较多, QTableWidget没有自带分页功能, 且界面一下显示过多内容会出现卡顿, 所以自己实现一个分页解决问题.. ...
  • 1 QTableWidget自定义表头QHeaderView加全选复选框 在使用QTableWidget时需要在表头添加全选复选框,但是默认的表头无法添加复选框,只能用图片画上去一个复选框了。并且实现点击复选框时,发出信号,让QTableWidget...
  • 2.将委托设置给QTableWidget 自定义委托组件 1.继承自QItemDelegate类 2.重写以下函数 virtual QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index...
  • QTableWidget自定义实现鼠标右键操作

    千次阅读 2018-10-25 17:04:29
    QTableWidgetItem *item = this->itemAt(point); if(item != nullptr) { //菜单出现的位置为当前鼠标的位置 row = item->row(); pop_menu->exec(QCursor::pos()); event->accept(); } else{ emit ...
  • qt学习笔记:自定义右键菜单(QTableWidget、QTextEdit等) PURPOSE:使用QT软件写GUI时需要自定义右键菜单内容 写在前面的话:在写交互界面的时候,需要给文本框(QTextEdit)或者表格框(QTableEdit)自定义右键...
  • QTableWidget> #include "widget.h" #include <QTableWidgetItem> class MyTable : public QTableWidget { public: MyTable(QWidget *parent = nullptr); ~MyTable(); void SetType(PageId

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 330
精华内容 132
关键字:

自定义qtablewidget