如何在QTableView中加速选择?

如何在QTableView中加速选择?,qt,codeigniter,qtableview,Qt,Codeigniter,Qtableview,我使用MVC显示大量的文件名,在CTableView中有选择全部和剖析全部的操作。文件的数量可能有数千个,因此,我编写了一个线程来执行这些操作,如: for (int row = 0; row < m_ImgMgr->m_TableModel->rowCount(); row++) { //QtSleep(5); for (int column = 0; column < m_ImgMgr->m_TableModel-

我使用MVC显示大量的文件名,在CTableView中有选择全部和剖析全部的操作。文件的数量可能有数千个,因此,我编写了一个线程来执行这些操作,如:


for (int row = 0; row < m_ImgMgr->m_TableModel->rowCount(); row++)
    {


        //QtSleep(5);

        for (int column = 0; column < m_ImgMgr->m_TableModel->columnCount(); column++)
        {

            //LogLog( QString(" sel 1") ) ;
            m_ImgMgr->listImages2->selectionModel()->select(m_ImgMgr->listImages2->model()->index(row, column), QItemSelectionModel::Select);

        }

        //LogLog(QString(" sel 2"));

        m_ImgMgr->labelImageIndex->setText(QString::number(row+1) + QString("/") + QString::number(m_ImgMgr->m_TableModel->rowCount()));

        //LogLog(QString(" sel 3"));

    }
没有功能。



#include <QTableView>
#include <QVBoxLayout>
#include <QStandardItemModel>
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget mainWid;
   QAbstractItemModel* model = new QStandardItemModel(&mainWid);
   model->insertColumns(0,4);
   model->insertRows(0,5000);
   for(int rowIter = 0, maxRow = model->rowCount();rowIter<maxRow;++rowIter){
       for(int colIter = 0, maxCol = model->columnCount();colIter<maxCol;++colIter){
           model->setData(model->index(rowIter,colIter),QStringLiteral("%1,%2").arg(rowIter+1).arg(colIter+1));
       }
   }
   QTableView* table = new QTableView(&mainWid);
   table->setModel(model);
   QPushButton* selectAllButton = new QPushButton(QStringLiteral("Select All"),&mainWid);
   QObject::connect(selectAllButton,&QPushButton::clicked,table,[table]()->void{
       const QItemSelection selec(table->model()->index(0,0),table->model()->index(table->model()->rowCount()-1,table->model()->columnCount()-1));
       table->selectionModel()->select(selec,QItemSelectionModel::ClearAndSelect);
   });
   QVBoxLayout* mainLay = new QVBoxLayout(&mainWid);
   mainLay->addWidget(selectAllButton);
   mainLay->addWidget(table);
   mainWid.show();
   return a.exec();
}
#包括 #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { 质量保证申请a(argc、argv); QWidget-mainWid; qabstractemmodel*model=新的QStandardItemModel(&mainWid); 模型->插入列(0,4); 模型->插入行(05000); 对于(int rowIter=0,maxRow=model->rowCount();rowItercolumnCount();colItersetData(model->index(rowIter,colIter),QStringLiteral(“%1,%2”).arg(rowIter+1).arg(colIter+1)); } } QTableView*表=新的QTableView(&mainWid); 表->设置模型(模型); QPushButton*selectAllButton=新的QPushButton(QStringLiteral(“全选”),&mainWid); QObject::connect(selectAllButton,&QPushButton::clicked,table,[table]()->void{ const QItemSelection selec(table->model()->index(0,0),table->model()->index(table->model()->rowCount()-1,table->model()->columnCount()-1)); table->selectionModel()->select(selec,QItemSelectionModel::ClearAndSelect); }); QVBoxLayout*mainLay=新的QVBoxLayout(&mainWid); mainLay->addWidget(选择AllButton); mainLay->addWidget(表格); mainWid.show(); 返回a.exec(); }

这就是解决方案,谢谢VRonin@forum.qt.io

第二种方法在我看来更合理。但是右下角索引不正确。它应该是
…->索引(m_ImgMgr->m_TableModel->rowCount()-1,3);

#include <QTableView>
#include <QVBoxLayout>
#include <QStandardItemModel>
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget mainWid;
   QAbstractItemModel* model = new QStandardItemModel(&mainWid);
   model->insertColumns(0,4);
   model->insertRows(0,5000);
   for(int rowIter = 0, maxRow = model->rowCount();rowIter<maxRow;++rowIter){
       for(int colIter = 0, maxCol = model->columnCount();colIter<maxCol;++colIter){
           model->setData(model->index(rowIter,colIter),QStringLiteral("%1,%2").arg(rowIter+1).arg(colIter+1));
       }
   }
   QTableView* table = new QTableView(&mainWid);
   table->setModel(model);
   QPushButton* selectAllButton = new QPushButton(QStringLiteral("Select All"),&mainWid);
   QObject::connect(selectAllButton,&QPushButton::clicked,table,[table]()->void{
       const QItemSelection selec(table->model()->index(0,0),table->model()->index(table->model()->rowCount()-1,table->model()->columnCount()-1));
       table->selectionModel()->select(selec,QItemSelectionModel::ClearAndSelect);
   });
   QVBoxLayout* mainLay = new QVBoxLayout(&mainWid);
   mainLay->addWidget(selectAllButton);
   mainLay->addWidget(table);
   mainWid.show();
   return a.exec();
}