实例QT程序 —— QTableWidget 表格行的上下移动_橙色阳光五月天的博客-程序员宝宝_qt的tablewidget中上移一行

技术标签: 经验分享  c++  QT  qt  ui  gui  

目录

1.简介
2.源码
3.效果图



源码下载地址
https://download.csdn.net/download/Redboy_Crazy/12273652

1.简介

实例QT程序:实现QTableWidget表格中行的上移/下移的功能。

2.源码

widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
    
class Widget;
}

class QTableWidget;

class Widget : public QWidget
{
    
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btnUp_clicked();

    void on_btnDown_clicked();

private:
    // 移动行
    void moveRow( QTableWidget *pTable, int nFrom, int nTo );

    // 复制行
    void copyRow( QTableWidget *pTable, int nFrom, int nTo );

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp
#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    
    ui->setupUi(this);

    ui->tabWdg->selectRow(0);
}

Widget::~Widget()
{
    
    delete ui;
}

void Widget::on_btnUp_clicked()
{
    
    int nCurRow = ui->tabWdg->currentRow();
    moveRow(ui->tabWdg, nCurRow, nCurRow-1);
}

void Widget::on_btnDown_clicked()
{
    
    int nCurRow = ui->tabWdg->currentRow();
    moveRow(ui->tabWdg, nCurRow, nCurRow+1);
}

void Widget::copyRow( QTableWidget *pTable, int nFrom, int nTo )
{
    
    int nColCount = pTable->columnCount();
    for(int col=0; col<nColCount; col++){
    
        QString text = pTable->item(nFrom, col)->text();
        QTableWidgetItem *it = new QTableWidgetItem;
        it->setText(text);
        pTable->setItem(nTo, col, it);
    }
}

void Widget::moveRow( QTableWidget *pTable, int nFrom, int nTo )
{
    
    if( pTable == nullptr ) {
    
        return;
    }
    if( nFrom == nTo ) {
    
        return;
    }
    if( nFrom < 0 || nTo < 0 ) {
    
        return;
    }
    int nRowCount = pTable->rowCount();
    if( nFrom >= nRowCount  || nTo >= nRowCount ) return;

    int nColCur = 0;
    nColCur = pTable->currentColumn();
    QTableWidgetItem *itCur = pTable->currentItem();
    if( nullptr != itCur ){
    
        nColCur = itCur->column();
    }
    int nFromRow = nFrom;
    int nInsertRow = nTo;
    if( nTo < nFrom ){
      // Up
        nFromRow = nFrom + 1;
        pTable->insertRow(nTo);
//        this->insertRow(pTable, nTo);
    }else {
     // Down
        nInsertRow = nTo + 1;
        pTable->insertRow(nInsertRow);
//        this->insertRow(pTable, nInsertRow);
    }
    this->copyRow( pTable, nFromRow, nInsertRow );
//    this->removeRow( pTable, nFromRow );   //删除旧行信息
    pTable->removeRow(nFromRow);

    // 选择之前移动的行
    pTable->selectRow( nInsertRow );
    pTable->setCurrentCell(nTo, nColCur);
}

3.效果图

运行效果图
运行效果图




加油,向未来!GO~
Come on


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Redboy_Crazy/article/details/105128822

智能推荐

Java 8系列之重新认识HashMap_搬砖娃的博客-程序员宝宝_cannot allocate the member type stringmap<v>.linke

摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口...

Jenkins--brew安装jenkins完全卸载_吕阿蒙的博客-程序员宝宝_brew jenkins 卸载

系统:macOS安装:brew install jenkins-lts卸载:brew uninstall jenkins-lts问题:当运行低版本的时候,会遇到jenkins卸载不干净的问题,当运行jenkins的时候,原来的配置信息还在里面需要完全卸载的话除了需要运行brew uninstall ,还需要删除.jenkins文件夹,这个文件夹找了好久。...

自定义Windows资源管理器预览的实现_bigzhangx的博客-程序员宝宝

在Windows中,资源管理器对文件的预览是通过系统PreviewHandler组件实现的,因此,想要实现自定义的PreviewHandler就需要实现一个定义了预览接口COM组件。 从Microsoft文档我们可以看到,自定义PreviewHandler需要实现以下COM接口: A preview handler must implement the following interfaces

数字电路实验九_qq_58007603的博客-程序员宝宝

1.实验目的:下载Quartus软件与Modlsim并进行VerilogModelsim仿真2.实验内容:参考老师发的视频的代码,然后用Quartusii和Modlsim进行仿真3.实验原理:按照视频上的内容,书写和运行代码,完成仿真操作。4.实验工具:Quartus软件、Modlsim软件、pc机。5.实验截图:6.实验代码:moduleex8_1(clock,reset,x,y1,y2);inputclock,reset;inputx;outputy...

[Extjs] XTemplete for 循环_29号同学的博客-程序员宝宝_extjs 循环

有时利用extjs写东西时,有些样式是组件不好写出来的,想用html所以这时候一般用到Templete如下,想构建以下界面后面奖杯的数量,是由同行记录里的数字决定的12345678910111213141516171819202122232425262728{    xtype: 'list',    itemId: 'topChart',    cls:'x-listitem',    item...

Sequel pro 连接mysql 报MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded..._sugarMessi的博客-程序员宝宝

Sequel pro 连接mysql 报MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded...简单描述起因解决办法简单描述起因由于是因为mysql升级后默认使用的身份验证机制默认为caching_sha2_password方式,以前用的是mysql_native_password 方式,然而现在...

随便推点

WebSocket 是什么原理?为什么可以实现持久连接?_JIESA的博客-程序员宝宝

WebSocket 是什么原理?为什么可以实现持久连接?WebSocket是HTML5出的东西 也就是说HTTP协议没有变化 但HTTP是不支持持久连接的(长连接,循环连接的不算)或者说WebSocket干脆就不是基于HTTP来执行的。但是。。。说不通啊。。。他是怎么实现的呢??为什么可以实现持久连接????-----------------------------

【.NET Core】应用配置,多环境,日志NLog_GreAmbWang的博客-程序员宝宝_iwebhostenvironment nlog

应用配置应用配置信息一般存在appsettings.json文件中添加一些配置信息{ "str": "aaa", "People": { "Name": "haha", "Age": 18 }}在Startup中,通过依赖注入给IConfiguration注入服务public Startup(IConfiguration configurat...

使用树莓派搭建家用 NAS_weixin_34200628的博客-程序员宝宝

硬件准备要搭建一个小型的NAS,根据我多日调研,只需要下面这些配件:树莓派 3b+ (买的无卡套装)¥280系统盘:16G tf 卡 + 读卡器 ¥37下载盘:500G 2.5寸移动硬盘 ¥165无线安装系统到 官网 下载树莓派专用系统用 BalenaEtcher 将系统刻录到 tf 卡里打开 tf 卡目录,在根目录中添加 ssh 文件touch ssh复制代码...

操作系统经典书籍推荐_xuhongku的博客-程序员宝宝

操作系统经典书籍推荐推荐原则: 宁缺勿滥,决不混进糟粕(好书不一定对所有人都合适,但对于它的目标读者群来说,一定是好书)。选书原则: 有国外的,不看国产的有原版的,不看翻译的看大师的作品 计算机的书最好看国外的教材,因为比较经典的教材都是国外的,而且尽量看英文原版的,如果一个人永远不接触英文原版,那么他的信息接受必定比别人慢,无形中落后很多。我建议如果你有一定外语基础其实就是学过英语,一定要坚

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作_AFinalStone的博客-程序员宝宝

github同步更新 博客同步更新 简书同步更新项目地址:传送门一、使用MyBatis对表执行CRUD操作——基于XML的实现1、定义sql映射xml文件  userMapper.xml文件的内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper

apkg格式怎么打开_jpg怎么转换成pdf?再不学就晚了_weixin_39693295的博客-程序员宝宝

jpg怎么转换成pdf?照片转换成PDF格式文件是我们很多爱拍照用户的需求,转换成PDF格式文件后的照片更易于保存浏览,那接下来我给大家介绍两种怎么把照片转换成PDF格式文件的方法。方法一:嗨格式PDF转换器我们可以下载嗨格式PDF转换器进行各种格式文件之间的转换,当然就包括了将照片转换成PDF格式。首先我们双击打开转换器,点击选择“文件转PDF”。软件页面跳转后,将准备好的图片添加至中间的空白区...

推荐文章

热门文章

相关标签