//本次介绍的很常用的表格对象:
QTableView * m_tbvSyncing;
//由UI文件创建对象方式:
m_tbvSyncing = qFindChild <QTableView *>( m_wgtSync, "tbvSyncing" );
//允许右键表格
m_tbvSyncing->setContextMenuPolicy (Qt ::CustomContextMenu );
//右键表格后显示的菜单
QMenu *m_meuSyncing = new QMenu( m_wgtSyncing);
connect(m_tbvSyncing , SIGNAL( customContextMenuRequested(QPoint )), this, SLOT(ShowSyncingContextMenu (QPoint )));
void LHSyncClientPrivate ::ShowSyncingContextMenu (QPoint )
{
m_meuSyncing->addAction( m_actResume);
m_meuSyncing->addAction( m_actStop);
m_meuSyncing->addAction( m_actPause);
m_meuSyncing->addSeparator();
m_meuSyncing->addAction( m_actDetails);
m_meuSyncing->exec( QCursor:: pos());
}
// 表格通过QStandardItemModel修改其值
QStandardItemModel *m_SyncingModel = new QStandardItemModel();
//设置列数
m_SyncingModel->setColumnCount (8 );
m_tbvSyncing->setModel (m_SyncingModel);
//设置表头
QStringList lstSyncingHeader;
lstSyncingHeader << "id"
<< QObject:: tr( "Filename")
<< QObject:: tr( "Progress")
<< QObject:: tr( "Speed")
<< QObject:: tr( "Status")
<< QObject:: tr( "Datetime")
<< "type"
<< "Transferred";
m_SyncingModel->setHorizontalHeaderLabels (lstSyncingHeader);
//隐藏一些不需要显示的列
m_tbvSyncing->horizontalHeader ()->hideSection (0 );
m_tbvSyncing->horizontalHeader ()->hideSection (5 );
m_tbvSyncing->horizontalHeader ()->hideSection (6 );
m_tbvSyncing->horizontalHeader ()->hideSection (7 );
m_tbvSyncing->horizontalHeader ()->setFont (QFont ("Simsun" , 12));
//获取当前鼠标位置的行信息
if (!m_tbvSyncing-> currentIndex().isValid ())
{
LHParameters Parameters;
Parameters["btnMessageBox_1"] = QObject ::tr ("Ok" );
QString strResult;
m_UiLoader->ShowMessage (strResult, QMessageBox ::Information ,
QObject:: tr( "VSO CloudBox Client"),
QObject:: tr( "Please select one item before invoking the command!"), Parameters);
}
int nRow = m_tbvSyncing-> currentIndex().row (); // 获取当前行号
QModelIndex mdlIndex = m_tbvSyncing-> currentIndex().sibling (nRow, 0); // 获取当前行的第0列
int nRecordId = m_SyncingModel-> data( mdlIndex, Qt::DisplayRole). toInt(); // 获取当前值
//通过第0列查找,查找结果存在list里
QList < QStandardItem *> lstResult = m_SyncingModel-> findItems( QString:: number ( nTransferId ), Qt ::MatchExactly );
if ( lstResult. count () == 0 )
{
// 如果没有,则在最后添加一行
int nRow = m_SyncingModel -> rowCount (); // 获取当前行数,即为当前要插入的行号
m_SyncingModel -> insertRow ( nRow );
m_SyncingModel -> setItem ( nRow , 0 , new QStandardItem (Query . value (0 ).toString ()));
m_SyncingModel -> setItem ( nRow , 1 , new QStandardItem (QFileInfo (Query . value ( 1 ).toString ()).fileName ()));
m_SyncingModel -> setItem ( nRow , 2 , new QStandardItem (Query . value (2 ).toString ()));
m_SyncingModel -> setItem ( nRow , 3 , new QStandardItem( 0));
m_SyncingModel -> setItem ( nRow , 4 , new QStandardItem (QString ::number ( nState )));
m_SyncingModel -> setItem ( nRow , 5 , new QStandardItem (Query . value (5 ).toDateTime ().toString ("yyyy-MM-dd hh:mm:ss" )));
m_SyncingModel -> setItem ( nRow , 6 , new QStandardItem (Query . value (6 ).toString ()));
m_SyncingModel -> setItem ( nRow , 7 , new QStandardItem (QString ::number ( nTransferredSize )));
}
else
{
// 如果有,则先拿到第一条的item(所以最好确保id是唯一的,这样找到的item最多只有一条)
QStandardItem* Item = lstResult. at( 0 );
// 获取行号
int nRow = Item ->row ();
QStandardItem * item = NULL ;
//! 0:id(hide)
item = m_SyncingModel -> item ( nRow , 0 );
item-> setText( Query. value( 0 ). toString ());
//! 1:file name
item = m_SyncingModel -> item ( nRow , 1 );
item-> setText( QFileInfo ( Query . value ( 1). toString()). fileName());
//! 2:size
item = m_SyncingModel -> item ( nRow , 2 );
item-> setText( QString :: number ( nTotalSize ));
//! 3:Speed
item = m_SyncingModel -> item ( nRow , 3 );
item-> setText( QString :: number ( nSpeed));
//! 4:Status
item = m_SyncingModel -> item ( nRow , 4 );
item-> setText( QString :: number ( nState));
//! 5:DateTime
item = m_SyncingModel -> item ( nRow , 5 );
item-> setText( Query. value( 5 ). toDateTime (). toString ( "yyyy-MM-dd hh:mm:ss"));
//! 6:type(hide)
item = m_SyncingModel -> item ( nRow , 6 );
item-> setText( Query. value( 6 ). toString ());
//! 7:Transfered(hide)
item = m_SyncingModel -> item ( nRow , 7 );
item-> setText( QString :: number ( nTransferredSize ));
}
//删除所有行
m_SyncingModel->removeRows (0 , m_SyncingModel-> rowCount());
//删除某一行
QList<QStandardItem *> lstResult = m_SyncingModel-> findItems( QString:: number( nTransferId), Qt::MatchExactly );
QStandardItem* Item = lstResult .at (0 );
QModelIndex Index = m_SyncingModel-> indexFromItem(Item );
m_SyncingModel->removeRow (Index.row());
//删除某一行貌似可以简化成
QList<QStandardItem *> lstResult = m_SyncingModel-> findItems( QString:: number( nTransferId), Qt::MatchExactly );
QStandardItem* Item = lstResult .at (0 );
m_SyncingModel->removeRow (Item.row());