如何在QTableView中加速选择?
我使用MVC显示大量的文件名,在CTableView中有选择全部和剖析全部的操作。文件的数量可能有数千个,因此,我编写了一个线程来执行这些操作,如:如何在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-
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();
}