精华内容
下载资源
问答
  • Qt QTableView表格排序

    2020-12-02 16:32:54
    关于Qt QTableView表格排序的问题 本人用到的方法是setSortEnable,发下针对某一列排序失败,后来发现该列值虽然显示为数字,但是实际存储的是字符串,所以table会按照字符串来排序,后来查阅相关资料,发现需要改写...

    关于Qt QTableView表格排序的问题

    本人用到的方法是setSortEnable,发下针对某一列排序失败。
    后来发现该列值虽然显示为数字,但是实际存储的是字符串,所以table会按照字符串来排序。后来查阅相关资料,发现针对数字字符串,需要改写排序方法,才能正常排序。本人是个懒人,于是在向表格内插入数据之前,便做是否为数字的判断,如果是,则按照插入数字的规则向表格内插入数据,然后问题解决了。
    如果有会改写排序方法的朋友,不妨一起交流,不胜感激!

    展开全文
  • QT实现可拖拽行排序表格,研究了一天实现的自定义控件。 效果类似QQ好友分组的拖动排序功能,非常流畅,内含我对表格的常用初始化代码和样式设置。具体内容见博客分类“Qt实用技术”内文章。
  • Qt笔记4:QTableWidget排序功能

    千次阅读 2021-03-11 22:48:18
    QTableWidget排序功能 (1)、注意默认是按照文本方式来排序的,对于想要数据排序的设置如下: 方法一:设置QTableWidgetItem的setData方法,第一个参数是Qt::EditRole, int value = 20; QTableWidgetItem *item =...

    QTableWidget排序功能

    (1)、注意默认是按照文本方式来排序的,对于想要数据排序的设置如下:
    方法一:设置QTableWidgetItem的setData方法,第一个参数是Qt::EditRole,

    	int value = 20;
    	QTableWidgetItem *item = new QTableWidgetItem;
    	//这样设置,排序是按照数字来排
    	item->setData(Qt::UserRole,value);
    

    方法一有一个问题,当double数据太长时,数据类型会自动转换成String类型,导致排序有问题,升级方法如下

    	double dValue =987654321.12345;
    	
    	//'f'表示不使用科学计数法,4表示保留4位小数
    	QString itemText = QString::number(dValue, 'f', 4);
    	
    	//这样设置,排序是按照数字来排
    	item->setData(Qt::UserRole,value);
    

    (2)、需要注意的是排序功能要在设置表格数据时候先关闭,填充结束表格数据之后再开启

    	//先关闭排序功能
        ui->tableWidget->setSortingEnabled(false);
                
        //数据填充操作
                ……
        //开启排序工功能
        ui->tableWidget->setSortingEnabled(true);
    
    展开全文
  • 因为要显示的数据有多列,很自然的会想到要能够对显示的数据进行排序。如果直接操作model里的数据,不太方便,因为最好是能由用户自己选择按哪一列进行排序。如果通过信号槽机制,也不是很方便。然后找到QTableView...

    因为要显示的数据有多列,很自然的会想到要能够对显示的数据进行排序。如果直接操作model里的数据,不太方便,因为最好是能由用户自己选择按哪一列进行排序。如果通过信号槽机制,也不是很方便。然后找到QTableView下有一个setSortingEnabled()的函数。在将该函数设置为True后,在鼠标移动到表头上某一列时,可以看到出现了可以用于提示点击的上三角或下三角标志,但是,在鼠标点击过后没有任何反应。本人以为上述函数被设置为True后,还要对每一列的排序用代码实现,想想就发怵,作罢。后来继续研究,说是可以通过信号槽,先获取鼠标点击表头的信号,然后映射到一个sortByColumn()的排序槽函数上,用于排序。因为本人对信号槽也只是入门,编写起来发现也有一些问题不好解决。最后在中文网上几乎找不到好的解决办法,关键是并没有相关度很高的内容。于是,就试着用了一下google。一会就找到了好几个类似的问题,网友也提出了几种解决方案。

    首先说一下原因:

    将setSortingEnabled()函数设为True后,点击表头排序的背后调用的是sortByColumn()这个函数。

    在qtableview.cpp源文件中有sortByColumn()函数的实现代码:

    复制代码

     1 void QTableView::sortByColumn(int column)
     2 {
     3     Q_D(QTableView);
     4 
     5     if (!d->model)
     6         return;
     7     bool ascending = (horizontalHeader()->sortIndicatorSection()==column&& horizontalHeader()->sortIndicatorOrder()==Qt::DescendingOrder);
     8     Qt::SortOrder order = ascending ? Qt::AscendingOrder : Qt::DescendingOrder;
     9     horizontalHeader()->setSortIndicator(column, order);
    10     d->model->sort(column, order);
    11 }

    复制代码

    sortByColumn()函数最后调用的model的sort函数。

    由于本人使用的model类型是QSqlQueryModel,该类型继承自QAbstractTableModel类,而该类又继承自QAbstractItemModel。

    QSqlQueryModel和QAbstractTableModel这两个类本身是没有sort函数的,自能使用QAbstractItemModel类的sort函数。

    QAbstractItemModel类中的sort函数形式如下:

    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder)

    它是一个虚拟函数,也就是说没有具体的实现,是无法真正用于排序的。

    所以由此产生一个思路,如果将model的类型转换成一个重写了sort函数的model类,那么也许就可以通过点击表头进行排序了。

    找一下QAbstractItemModel有哪些子类,通过一番搜索,找到QAbstractProxyModel、QSqlTableModel等子类都有重写的sort函数。

    我们把之前QSqlQueryModel的model转换为QAbstractProxyModel试一下,看是否有效。

    复制代码

    1 QSqlDatabase db_output1 = QSqlDatabase::database("db_output1_connection");
    2 QSqlQueryModel *model = new QSqlQueryModel();
    3 QString model_query;
    4 model_query = QString("Select Airline ,Airline1, Ratio, Angle, Year, Summer, Winter from [%1$]").arg(show_sheet_name);
    5 model->setQuery(model_query,db_output1);
    6 QSortFilterProxyModel *sqlproxy = new QSortFilterProxyModel(this);
    7 sqlproxy->setSourceModel(model);
    8 ui->tableView->setModel(sqlproxy);

    复制代码

     

    这是没有排序时,显示的结果。

    上图是单击表头中的日班次后排序的结果。

    上图是单击另一列的表头(费率)后排序的结果。其他各列的排序也均有效。

    QSqlTableModel等其他的类本人没测试。按道理来说,应该也是有效的。

    一点感悟:

    遇到技术问题,要善于将问题准确提炼出来,是自己搜索也好,或是请教他人都有帮助。往往是对遇到的问题迷迷糊糊,没有经过仔细思考,导致不知从何处开始解决,最后半途而废。

    国内的圈子必然有限,多用google。

    附几个相关问题的链接:

    http://www.qtcentre.org/archive/index.php/t-467.html

    http://www.qtforum.org/article/18679/qsqlquerymodel-qtableview-and-sorting.html

    http://www.qtforum.org/article/26898/how-to-sort-data-by-column-in-a-table-view-model-set-for-table-view-is-qsqlquerymodel-if-click-to-headerview.html

     

    转自:https://www.cnblogs.com/googly/p/4584264.html

    展开全文
  • 实现了Qt QTableWidget基本的添加删除修改等功能和添加了点击表头排序功能
  • 为了最佳体验,一个拖拽行排序的功能研究了几个小时。效果参考的QQ好友分组的排序。 网上查了下好像没有人发布QT版类似的代码,于是自己动手 QQ好友分组排序效果: 2,效果 这是最终效果图,有小伙伴说看...

    1,简介

     

    为了最佳体验,一个拖拽行排序的功能研究了几个小时。效果参考的QQ好友分组的排序。

    网上查了下好像没有人发布QT版类似的代码,于是自己动手

     

    QQ好友分组排序效果:

     

    2,效果

     

    这是最终效果图,有小伙伴说看起来很流畅,事实确实是很流畅的。

     

    3,思路

     

    拖拽:就是QT的一套拖拽功能的类,QDrag、QMimeData,和几个鼠标事件和拖拽响应事件:

     

    protected:
        //根据鼠标事件开启拖拽
        void mousePressEvent ( QMouseEvent * event ) ;
        void mouseMoveEvent(QMouseEvent *event);
    
        //拖拽响应事件
        void dragEnterEvent(QDragEnterEvent *event);
        void dragMoveEvent(QDragMoveEvent *event);
        void dropEvent(QDropEvent *event);


    拖拽时的位置指示线:其实就是个高度为2的QLabel,设边框颜色就是该线的颜色。

     

    主要类:一个继承自QTableView的类 MyTableView

    MyTableView.h:

     

    #ifndef MYTABLEVIEW_H
    #define MYTABLEVIEW_H
    
    #include <QTableView>
    #include <QLabel>
    #include <QMouseEvent>
    #include <QStandardItemModel>
    
    
    class MyTableView : public QTableView
    {
        Q_OBJECT
    public:
        MyTableView(QWidget *parent = Q_NULLPTR);
    
        //此函数包装了自带的setModel,只是记录了model指针方便内部调用
        void SetModel(QStandardItemModel *model);
    
    signals:
        //拖拽结束后会发出此信号,可绑定槽函数实现你的其他功能,比如把新的顺序存到文件
        void sigRowChange(int from, int to);
    
    protected:
        //根据鼠标事件开启拖拽
        void mousePressEvent ( QMouseEvent * event ) ;
        void mouseMoveEvent(QMouseEvent *event);
    
        //拖拽响应事件
        void dragEnterEvent(QDragEnterEvent *event);
        void dragMoveEvent(QDragMoveEvent *event);
        void dropEvent(QDropEvent *event);
    
    private:
        void DoDrag();                      //执行拖拽
        void ResetOrder();                  //重置第一列序号
        void MoveRow(int from, int to);     //真正执行移动行的功能
    
    private:
        QStandardItemModel *mModel;
        QLabel* mLabel;             //高度设为2,用做指示线
        int mRowHeight;             //表格的行高
    
        bool mValidPress;           //在鼠标移动时,判断之前按下时是否是在有效行上
    	int mRowFrom;				//拖动起始行
        int mRowTo;                 //拖动时(还没松开时)鼠标位置代表的行,会绘制一条指示线,类似QQ好友列表拖拽效果
    
        QString mDragText;          //拖拽过程中跟随鼠标显示的内容
        QPoint mDragPoint;          //拖拽起点
        QPoint mDragPointAtItem;    //记录按下时鼠标相对该行的位置,在拖动过程中保持该相对位置
    
    };
    
    #endif // MYTABLEVIEW_H
    

     

    MyTableView.cpp:

     

    #include "MyTableView.h"
    #include <QApplication>
    #include <QDrag>
    #include <QMimeData>
    #include <QPainter>
    #include <QHeaderView>
    
    MyTableView::MyTableView(QWidget *parent)
        : QTableView(parent)
    {
        setAcceptDrops(true);
    
    	mLabel = new QLabel(this);
    	mLabel->setFixedHeight(2);
        mLabel->setGeometry(1, 0, width(), 2);
    	mLabel->setStyleSheet("border: 1px solid #8B7500;");
    	mLabel->hide();
    
        mModel = NULL;
        mRowHeight = 30;
        mValidPress = false;
        mRowFrom = 0;
        mRowTo = 0;
    }
    
    void MyTableView::SetModel(QStandardItemModel *model)
    {
        mModel = model;
        QTableView::setModel(model);
    }
    
    void MyTableView::mousePressEvent(QMouseEvent *e)
    {
        if (e->button() == Qt::LeftButton)
        {
            QModelIndex index = indexAt(e->pos());
            if (index.isValid())
            {
                mValidPress = true;
                mDragPoint = e->pos();
                mDragText = mModel->item(index.row(),1)->text();
                mDragPointAtItem = mDragPoint - QPoint(0,index.row()*mRowHeight);
                mRowFrom = index.row();
            }
        }
        QTableView::mousePressEvent(e);
    }
    
    void MyTableView::mouseMoveEvent ( QMouseEvent * e )
    {
        if (!mValidPress)
    	{
    		return;
    	}
        if (!(e->buttons() & Qt::LeftButton))
            return;
    
        if ((e->pos() - mDragPoint).manhattanLength()  < QApplication::startDragDistance())
            return;
    
        mLabel->show();
    
        DoDrag();           //开始拖拽,完成拖拽后才会继续往下走
    
        mLabel->hide();
        mValidPress = false;
    }
    
    void  MyTableView::dragEnterEvent ( QDragEnterEvent * e )
    {
        if (e->mimeData()->hasText())
    	{
            e->acceptProposedAction();
    	}
    	else
    	{
            e->ignore();
            QTableView::dragEnterEvent(e);
    	}
    }
    
    void  MyTableView::dragMoveEvent ( QDragMoveEvent * e )
    {
        if(e->mimeData()->hasText())
        {
    		int nCurRow = 0;
            QModelIndex index = indexAt(e->pos());
            if (index.isValid())
            {
                if(e->pos().y() - index.row()*mRowHeight >= mRowHeight/2)
                {
                    nCurRow = index.row() + 1;
                }
                else
                {
                    nCurRow = index.row();
                }
            }
            else
            {
    			nCurRow = mModel->rowCount();
            }
    //        if (nCurRow != mRowFrom)
    		{
                mRowTo = nCurRow;
    			mLabel->setGeometry(1, mRowTo*mRowHeight, width() - 2, 2);
    		}
            e->acceptProposedAction();
    		return;
        }
    
        e->ignore();
        QTableView::dragMoveEvent(e);
    }
    
    void  MyTableView::dropEvent ( QDropEvent * e )
    {
        if(e->mimeData()->hasText())
        {
            if (mRowTo != mRowFrom)
            {
                MoveRow(mRowFrom, mRowTo);
    		}
            e->acceptProposedAction();
    		return;
        }
    
        e->ignore();
        QTableView::dropEvent(e);
    }
    
    void MyTableView::DoDrag()
    {
        QDrag *drag = new QDrag(this);
        QMimeData *mimeData = new QMimeData;
        mimeData->setText(mDragText);
        drag->setMimeData(mimeData);
    
        // 设置拖拽图片
        QPixmap drag_img(width(), mRowHeight);
        drag_img.fill(QColor(255,255,255,100));
        QPainter painter(&drag_img);
        painter.setPen(QColor(0, 0, 0, 200));
        painter.drawText(QRectF(40,0,width(),mRowHeight), mDragText, QTextOption(Qt::AlignVCenter));
    
        drag->setPixmap(drag_img);
        drag->setHotSpot(mDragPointAtItem);
    
        //***注意:此句会阻塞,进入drag的拖拽消息循环,会依次触发dragEnterEvent、dragMoveEvent、dropEvent消息
        if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
        {
            // 确认移动操作
        }
    }
    
    void MyTableView::ResetOrder()
    {
    	for (int i = 0; i < mModel->rowCount(); i++)
    	{
            mModel->item(i, 0)->setText( QString::number(i + 1) );
    	}
    }
    
    void MyTableView::MoveRow(int from, int to)
    {
    	if (from == to)
    	{
    		return;
    	}
    	QStandardItem * item = mModel->item(from, 1);
    	if (item)
    	{
            QString strText = item->text();
    
    		QList<QStandardItem*> items;
    		QStandardItem* item0 = new QStandardItem("");
            QStandardItem* item1 = new QStandardItem(strText);
    		items.append(item0);
    		items.append(item1);
            item0->setTextAlignment(Qt::AlignCenter);
    
            //移动行思路:就是先在要移动到的位置新建同样内容的行,然后删除被移动的行
    		mModel->insertRow(to, items);
    		if (from < to)
    		{
    			mModel->removeRow(from);
    			selectRow(to-1);
    		}
    		else
    		{
    			mModel->removeRow(from+1);
    			selectRow(to);
    		}
    		ResetOrder();
            emit sigRowChange(mRowFrom,mRowTo);
    		
    	}
    	
    }
    

     

    在MainWindow上放一个QTableView然后提升为该MyTableView,MainWindow里做些初始化:

     

    MainWindow.cpp:

     

    #include "MyTableView.h"
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        InitTable();
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::InitTable()
    {
        MyTableView* t = ui->tableView;
    
        //设置各种属性
        t->horizontalHeader()->hide();	//隐藏列头(带列头的情况需要修改代码,重新计算高度偏移)
        t->verticalHeader()->hide();	//隐藏行头
        t->verticalHeader()->setDefaultSectionSize(30);         //默认列高度
        t->horizontalHeader()->setStretchLastSection(true);     //最后一列自适应宽度
        t->setEditTriggers(QTableView::NoEditTriggers);			//不能编辑
        t->setSelectionBehavior(QTableView::SelectRows);		//一次选中整行
        t->setSelectionMode(QTableView::SingleSelection);       //单行选中
        t->setAlternatingRowColors(true);                       //行间隔色
        t->setShowGrid(false);                                  //去掉网格线
        t->setFocusPolicy(Qt::NoFocus);                         //去掉item选中时虚线框
    
        //添加数据
        QStandardItemModel* model = new QStandardItemModel();
        model->setHorizontalHeaderItem(0, new QStandardItem(QStringLiteral("序号")));
        model->setHorizontalHeaderItem(1, new QStandardItem(QStringLiteral("内容")));
        QStringList strs;
        strs<<"111"<<"222"<<"333"<<"444"<<"AAA"<<"BBB"<<"CCC"<<"DDD";
        for(int i=0;i<strs.size();i++)
        {
            model->setItem(i, 0, new QStandardItem(QString::number(i+1)));
            model->setItem(i, 1, new QStandardItem(strs[i]));
            model->item(i, 0)->setTextAlignment(Qt::AlignCenter);
        }
        t->SetModel(model);
    
        //设置样式
        t->setStyleSheet("QTableView {border: 1px solid gray;background: #E8E8E8;}\
                          QTableView::item{color:black;}\
                          QTableView::item:selected{color:black;background: #63B8FF;}");
    
        t->setColumnWidth(0,40);
        t->selectRow(0);
    }
    

     

     

     

     

    4,源码下载

     

    本专栏配套源码,都可在Qt学习群免费下载:

    群号码:1149411109

    群名称:Qt实战派学习群

     

     

     

    展开全文
  • Qt中QTableView设置自动排序的经验

    千次阅读 2018-04-04 15:48:45
    采用QSqlTableModel将数据库数据直接放入QTableView中,使用一行...//设置表格模型 //model = new QSqlTableModel(this); //指定使用的表 model-&gt;setTable("data_net"); //将model放入view中 ui...
  • QT表格排序问题

    2013-08-20 09:58:23
    现在遇见一个问题,我有一个表格,在表格生成的时候使用代码中的第三个语句可以排序 channel_model.setColumnCount(18); ui->tableView_channel->setModel(&channel_model); ui->tableView_...
  • 在使用QTabeleWidget的时候,需要用到排序功能, 于是设置可以点击头进行排序,结果发现排序的 箭头在正上方,如下图 可是平时所见的大部分排序箭头都是在左侧,比如这样: 那么,怎样改变这个排序箭头的位置呢?...
  • 之前总结了 QTableView 实现排序,但是这里还有个问题,就是 Qt 默认的排序状态只有升序和降序,没法通过点击表头恢复到默认的顺序,他这个 SortOrder 宏也只有升序降序两个枚举值(有点奇怪,Qt 很多枚举都有 None ...
  • 文章目录一、原生表格二、效果展示三、实现方式1、排序列定制2、排序交互修改四、相关文章 原文链接:QRowTable表格控件(五)-重写表头排序、支持第三次单击恢复默认排序 一、原生表格 开发客户端程序的方式月来源多...
  • QT 表格

    千次阅读 2018-03-30 14:31:22
    在公司公示Qt开发一段时间,表格用到不少,所以,今天在这做个总结,防止以后忘记。下面为个人模拟Windows资源管理器的一个表单。(写的比較粗糙,谅解一下) 一、设置表单样式 table_widget-&gt;...
  • 针对于qtablewidget的排序,其实本身控件便有自带排序的功能,但是需要注意插入的数据格式,不然会出现类似于22>111>10的这种错误排序情况。以下代码可以完整使用,仅供参考: QSqlDatabase db =QSqlDatabase...
  • 1.首先这个sortingEnabled设置为true后,...下图是未排序的,这时候你如果qDebug()<<item(2,1),应该输出baby。 如果你点击了这个排序按钮,这时候你再qDebug()<<item(2,1),应该输出zy。 ...
  • QT表格的实现

    万次阅读 2018-03-30 10:57:31
    一、简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件,QTableWidget单元格数据是QTableWidgetItem对象来实现的,整个表格都需要用逐个单元格对象QTableWidgetItem构建起来。二、详解1、代码(1)table....
  • QSortFilterProxyModel代理实现排序、并且过滤支持筛选多列、筛选模式支持:或方式、与方式、文章链接:https://www.cnblogs.com/lifexy/p/14145629.html
  • 一、第三列的排序方式: 1、第3列是按照升序来排列 ui->tableView->sortByColumn(3,Qt::AscendingOrder);//第3列是按照升序来排列 ui->tableView->setSortingEnabled(true); 2、第3列是按照降序来...
  • Qt实现表格树控件-支持多级表头

    千次阅读 2019-08-04 23:12:53
    之前写过一篇关于表格控件多级表头的文章,喜欢的话可以参考Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等。今天这篇文章带来了比表格更加复杂的控件-树控件多级表头实现。 在Qt中,表...
  • 原文链接:Qt实现表格树控件-自绘树节点虚线 一、开心一刻 一程序员第一次上女朋友家她妈板着脸问 :你想娶我女儿,有多少存款? 程序员低了下头:五百! 她妈更鄙视了:才五百块,买个厕所都不够! 程序员忙...
  • 基于QT实现九大排序的动态演示

    千次阅读 2020-02-10 21:44:53
    在不久前完成我自己的残缺棋盘动态演示课程设计后,我又帮同学大致完成了一个排序算法的动态演示(狂敲5天代码) 由于代码量很大,我就不再这里展示了,代码都发到下面的百度网盘链接中 链接:...
  • 搬砖的过程中中,我们经常会遇到定制化的表格,比如表头的第一列为全选复选框,或者需要依赖表头的某一咧进行排序,当然,排序这个原有的QTableWidget已经实现了功能,但是如果需要在该列的表头添加icon图片,则会...
  • Qt简单使用表格

    2021-06-15 15:05:41
    qt5简单实用表格,接在登录之后
  • QT实现可拖拽表格控件TableWidget

    千次阅读 2020-10-18 11:11:21
    QT实现可拖拽表格控件TableWidget 看到网上很多用上下箭头和按钮来实现TableWidget的拖动排序,我觉得好low,这种操作,我要是客户,我嫌弃。以下给大家介绍:鼠标长按拖拽、插入的TableWidget。 文章目录QT实现可...
  • Qt表格中加入控件

    千次阅读 2017-07-01 11:55:29
    任务:使用 QTableWidget 动态生成表格,在每行的某两列中加入 QComboBox 下拉框控件和 QPushButton 按钮控件 有添加,删除,编辑功能,每行的按钮可以浏览文件夹并选择文件  1、新建一个对话框QDialog...
  • Qt5中表格处理大数据量

    千次阅读 2018-03-10 11:22:49
    https://www.cnblogs.com/foohack/p/7531446.html在Qt中如果是普通项目,GUI处理展现的数据量不大,一般用...Qt中提供了一种Model/View的编程方式来处理数据,也就是展示层和数据层分离,这样就解耦了。一旦Model的...
  • Qt 之 QHeaderView 排序

    千次阅读 2016-03-02 18:37:49
    Qt中,我们可以通过点击表头来对QTableView或QTreeView等一系列高级视图进行排序,对于一般的数据来说-比如:int、QString等,简单的几句代码就可以搞定,因为Qt内部做了很好的排序处理,但是一般情况下,我们需要...
  • QTableWidgetItem 按数字排序

    千次阅读 2016-04-14 10:44:07
    QTableWidgetItem* item = new QTableWidgetItem(); //按字母排序  item->setText("2");...item->setData(Qt::DisplayRole, 2);  QTableWidget* widget = .... widget->setItem(row, column, item );
  • QT中为了通过表格展示数据时,通常采用QTableView组件来展示。 常用的表格储存方式就是通过QStandardItemModel来进行存储 (1) 排序 Qt排序通常如果通过某列进行排序,用到sortByColumn 或者对模型model使用sort...
  • QT 实现数据库的增删改查,排序

    千次阅读 2019-04-29 00:12:27
    排序:select * from table1 order by field1,field2 desc; asc:升序 desc:降序 总数:select count() from table1; 总数:select count(field1) from table1; 求和:select sum(field1) from table1; 平均:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,340
精华内容 936
关键字:

qt表格排序