導航:首頁 > 凈水問答 > qtableview過濾數據

qtableview過濾數據

發布時間:2022-09-02 09:00:02

❶ 如何把QTableView中第一列的默認數字列去掉

選中數據所在列,在菜單欄中點擊"數據",在下拉菜單中選擇"分列",選擇"固定寬度",點"下一步",在數據的第一位和第二位之間標上分列線,再點"下一步",選擇第一個分列,在"列數據格式"中選擇"不導入此列",最後點"完成".

❷ 如何使用qstandarditemmodel獲取qtableview中的數據

類QabstractItemModel,QabstractListModel,QAbstractTableModel不保存數據,用戶需要從這些類派生出子類,並在子類中定義某種數據結構來保存數據。與此不同,類QStandardItemModel負責保存數據,每個數據項被表示為類QStandardItem的對象。我們首先闡述如何使用類QStandardItem保存一個數據項,再闡述如何使用類QStandardItemModel將這些數據項組織起來,形成列表、表格或者樹,以供其他視圖類顯示。

理論參考:http://book.51cto.com/art/201207/347880.htm

關鍵是QAbstractItemView.setItemDelegateForColumn函數,可以設置進度條代理。
其中QAbstractItemView的函數特別多,QStandardItem的函數也特別多。

int main( int argc, char **argv )
{
QApplication app( argc, argv );

QTableView table;

QStandardItemModel model( 10, 2 );
for( int r=0; r<10; ++r )
{
QStandardItem *item = new QStandardItem( QString("Row %1").arg(r+1) );
model.setItem( r, 0, item );
model.setItem( r, 1, new QStandardItem( QString::number((r*30)%100 )) );
}

table.setModel( &model ); // 正常設置模型,沒有任何特殊之處

BarDelegate delegate;
table.setItemDelegateForColumn( 1, &delegate ); // 設置第一列為代理
table.show();

return app.exec();
}

除了調用父類構造函數,還要覆蓋兩個純虛函數paint和sizeHint

class BarDelegate : public QAbstractItemDelegate
{
public:
BarDelegate( QObject *parent = 0 );
// 覆蓋兩個函數就可以顯示進度條
void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
QSize sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const;
};

具體每一步的解釋:
BarDelegate::BarDelegate( QObject *parent ) : QAbstractItemDelegate( parent ) { }

void BarDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if( option.state & QStyle::State_Selected )
painter->fillRect( option.rect, option.palette.highlight() );

// 數據是存儲在QStandardItemModel的QStandardItem,會自動根據當前行進行匹配(我認為)
int value = index.model()->data( index, Qt::DisplayRole ).toInt(); // 這句,取得當前行的數據
qDebug() << value;
double factor = double(value)/100.0; // 計算比例因子

painter->save(); // 保存舊畫板(我認為)
// 進度條背景色
if( factor > 0.8 )
{
painter->setBrush( Qt::red ); // 超過0.8畫純紅色
factor = 1;
}
else
painter->setBrush( QColor( 0, int(factor*255), 255-int(factor*255) ) ); // 否則顏色依次變淡

painter->setPen( Qt::black ); // 畫筆顏色(這里沒用到,我認為)
// 前面都是准備工作,這里才是真正畫進度條
painter->drawRect( option.rect.x()+2, option.rect.y()+2, int(factor*(option.rect.width()-5)), option.rect.height()-5 );
painter->restore(); // 恢復新畫板(我認為)
}

QSize BarDelegate::sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
return QSize( 45, 15 ); // 隨便改,不影響(我認為)

❸ qt qtableview怎麼去除網格和表頭

//設置網格線不可見即可
QTableView*tableView=newQTableView();
tableView->setShowGrid(false);
//設置表頭不可見,需要添加QHeadView頭文件
tableView->horizontalHeader()->setVisible(false);//水平不可見
tableView->verticalHeader()->setVisible(false);//垂直不可見

❹ QT中QTableview表中內容修改

QTableview只是提供視圖功能 具體數據的修改要到model裡面修改

❺ QT中的QtableWidget和QtableView使用有什麼區別

主要使用QTableView和QTableWidget中的三個函數實現

QTableView::verticalScrollBar()->setSliderPosition(); //設置當前滑動條的位置
QTableView::verticalScrollBar()->maximum(); //滑動條能移動的最大位置
QTableView::verticalScrollBar()->value(); //獲得當前滑動條的位置

QTableWidget是一個表示二維離散數組的表格。它在給定維度里顯示當前用戶滾動的單元格。當用戶在一個空的單元格中輸入一些文本時,QTableWidget自動創建一個QTableWidgetItem對象保存輸入的文本。

Qt 4推出了一組新的item view類,它們使用model/view結構來管理數據與表示層的關系。這種結構帶來的
功能上的分離給了開發人員更大的彈性來定製數據項的表示,它也提供一個標準的model介面,使得更多的
數據源可以被這些item view使用。這里對model/view的結構進行了描述,結構中的每個組件都進行了解釋,
給出了一些例子說明了提供的這些類如何使用。

Model/View 結構

Model-View-Controller(MVC), 是從Smalltalk發展而來的一種設計模式,常被用於構建用戶界面。經典設計模式的著作中有這樣的描述:

MVC 由三種對象組成。Model是應用程序對象,View是它的屏幕表示,Controller定義了用戶界面如何對用戶輸入進行響應。在MVC之前,用戶界面設計傾向於三者揉合在一起,MVC對它們進行了解耦,提高了靈活性與重用性。

假如把 view與controller結合在一起,結果就是model/view結構。這個結構依然是把數據存儲與數據表示進行了分離,它與MVC都基於同樣的思想,但它更簡單一些。這種分離使得在幾個不同的view上顯示同一個數據成為可能,也可以重新實現新的view,而不必改變底層的數據結構。為了更靈活的對用戶輸入進行處理,引入了delegate這個概念。它的好處是,數據項的渲染與編程可以進行定製。

如上圖所示,model與數據源通訊,並提供介面給結構中的別的組件使用。通訊的性質依賴於數據源的種類
與model實現的方式。view從model獲取model indexes,後者是數據項的引用。通過把model indexes提供給model,view可以從數據源中獲取數據。

在標準的 views中,delegate會對數據項進行渲染,當某個數據項被選中時,delegate通過model indexes與model直接進行交流。總的來說,model/view 相關類可以被分成上面所提到的三組:models,views,delegates。這些組件通過抽象類來定義,它們提供了共同的介面,在某些情況下,還提供了預設的實現。抽象類意味著需要子類化以提供完整的其他組件希望的功能。這也允許實現定製的組件。models,views,delegates之間通過信號,槽機制來進行通訊:

從model發出的信號通知view數據源中的數據發生了改變。
從view發出的信號提供了有關被顯示的數據項與用戶交互的信息。
從delegate發生的信號被用於在編輯時通知model和view關於當前編輯器的狀態信息。

Models

所有的item models都基於QAbstractItemModel類,這個類定義了用於views和delegates訪問數據的介面。
數據本身不必存儲在model,數據可被置於一個數據結構或另外的類,文件,資料庫,或別的程序組件中。
關於model的基本概念在Model Classes部分中描述。
QAbstractItemModel提供給數據一個介面,它非常靈活,基本滿足views的需要,無論數據用以下任何樣的形式
表現,如tables,lists,trees。然而,當你重新實現一個model時,如果它基於table或list形式的數據結構,最好從QAbstractListModel,QAbstractTableModel開始做起,因為它們提供了適當的常規功能的預設實現。這些類可以被子類化以支持特殊的定製需求。子類化model的過程在Create New Model部分討論
QT提供了一些現成的models用於處理數據項:
QStringListModel 用於存儲簡單的QString列表。
QStandardItemModel 管理復雜的樹型結構數據項,每項都可以包含任意數據。
QDirModel 提供本地文件系統中的文件與目錄信息。
QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用來訪問資料庫。
假如這些標准Model不滿足你的需要,你應該子類化QAbstractItemModel,QAbstractListModel或是
QAbstractTableModel來定製。

Views

不同的view都完整實現了各自的功能:QListView把數據顯示為一個列表,QTableView把Model 中的數據以table的形式表現,QTreeView 用具有層次結構的列表來顯示model中的數據。這些類都基於QAbstractItemView抽象基類,盡管這些類都是現成的,完整的進行了實現,但它們都可以用於子類化以便滿足定製需求。

Delegates
QAbstractItemDelegate 是model/view架構中的用於delegate的抽象基類。預設的delegate實現在QItemDelegate類中提供。它可以用於Qt標准views的預設 delegate.

排序

在model/view架構中,有兩種方法進行排序,選擇哪種方法依賴於你的底層Model。
假如你的model是可排序的,也就是它重新實現了QAbstractItemModel::sort()函數,QTableView與QTreeView都提供了API,允許你以編程的方式對Model數據進行排序。另外,你也可以進行交互方式下的排序(例如,允許用戶通過點擊view表頭的方式對數據進行排序),可以這樣做:把QHeaderView::sectionClicked()信號與QTableView::sortByColum()槽或QTreeView::sortByColumn()槽進行聯結就好了。
另一種方法是,假如你的model沒有提供需要的介面或是你想用list view表示數據,可以用一個代理
model在用view表示數據之前對你的model數據結構進行轉換。

便利類

許多便利類都源於標準的view類,它們方便了那些使用Qt中基於項的view與table類,它們不應該被子類化,
它們只是為Qt 3的等價類提供一個熟悉的介面。這些類有QListWidget,QTreeWidget,QTableWidget,它們提供了如Qt 3中的QListBox, QlistView,QTable相似的行為。這些類比View類缺少靈活性,不能用於任意的models,推介使用model/view的方法處理數據。

❻ QTableView去掉右側上下箭頭

操作方法如下:
取消系統的分隔線 supportMenuTableView.SeparatorStyle = UITableViewCellSeparatorStyle.No即可。
QTableView是Qt中用來把數據集以表格形式提供給用戶的一個控制項,它與C++Builder中的DBGrid作用類似。坦白的說,DBGrid的使用要比QTableView更容易一些。但QTableView在使用麻煩的同時,也提供了更多的靈活性。
QTableView是PyQt和Qt提供的一種表視圖的實現,用於顯示存儲在Model模型中的數據項。QTableView類是Model/View類之一,是QtModel/View框架的一部分。

❼ Qt 中 QTableView如何清空啊沒有clear啊。我把model設置清空,然後讓它在setmodel也不清空,腫么怎啊

數據記錄空了就空了吧。手裡沒有assistant

❽ 如何在QTableView中顯示SQL查詢結果

QVariant headerData ( int section,Qt::Orientation orientation, int role = Qt::DisplayRole ) const 獲取水平頭或垂直頭標題
bool setHeaderData ( int section,Qt::Orientation orientation, const QVariant & value, int role = Qt::EditRole ) 設置水平頭或垂直頭標題
int rowCount ( const QModelIndex & parent= QModelIndex() ) const // 返回行數
int columnCount ( const QModelIndex &index = QModelIndex() ) const // 返回列數
virtual bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ) //model->removeColumns (0)刪除第一列
bool QSqlTableModel::submitAll (),//提交所有被修改的數據,然後修改的數據被保存在資料庫中
void QSqlTableModel::revertAll () //撤銷所有的修改,如果資料庫已經被提交了修改,就不能通過撤銷修改改回來了
virtual void revertRow ( int row ) //恢復指定行的改變
void QSqlTableModel::setFilter ( const QString & filter ) //篩選,按照字元串filter對資料庫進行篩選,相當於SQL中的WHERE語句
bool QSqlTableModel::select () //在篩選和排序的條件下,將資料庫中符合要求的在mode表格中顯示出來
void QSqlTableModel::setSort ( int column, Qt::SortOrder order ) //排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序
bool insertRow ( int row, const QModelIndex & parent = QModelIndex() ) //插入行
bool insertColumn ( int column, constQModelIndex & parent = QModelIndex() ) // 插入列
model->setEditStrategy(QSqlTableModel::OnManualSubmit); //設置保存策略為手動提交

❾ 如何優化QTableView的性能

Step 1:通過用戶操作,確認數據范圍,發送請求到後台線程。
Step 2:後台生產者線程,根據數據范圍,從數據源提取數據,一邊提取一邊發送至消費者線程。
Step 3:消費者線程接收原始數據,對其根據用戶指令進行一定處理和變換。
Step 4:處理完畢的數據,整合後統一推送至自定義的TableModel。
Step 5:TableModel接收到數據後,通過beginResetModel()方法通知界面准備更新,然後將數據保存在本地,並重置HeaderText等輔助界面運作的數據結構。然後通過endResetModel()方法刷新界面。
Step

6:數據容器為兩層嵌套的QVector,內層每個Vector為一個column。針對數據空格,做了一個row*column大小的雙層vector,用來保存實際的數據索引。TableModel的rowCount()、columnCount()均為輸出索引表對應維度的長度。data()方法內直接通過row、column兩個下標查詢索引表,索引存在則根據索引取出對應數據,無索引則返回空值。

❿ 怎麼設置QTableview底部留白高分求高手支招!!

個人理解:你是想把顯示數據部分顯示在中間幾行,然後上下均空白填充?這樣的話你需要自己做數據管理, 不是很方便,實現方式:不添加滾動條,設置上下頁切換按鈕,事件過濾滑鼠滾輪事件,用另外的方法實現數據瀏覽。你看如何。

閱讀全文

與qtableview過濾數據相關的資料

熱點內容
蒸餾高一視頻 瀏覽:102
汽車空氣濾芯口很臟了有什麼影響 瀏覽:66
山東省污水處理廠運行管理標准 瀏覽:847
牙縫樹脂美學修復 瀏覽:354
熱水器水垢清理 瀏覽:65
即開即熱熱水器除垢方法視頻 瀏覽:101
大眾新桑塔納汽油濾芯怎麼取下來 瀏覽:667
蒸餾葡萄白酒如何不列 瀏覽:890
蒸餾出來的熱酒度數 瀏覽:451
棕櫚油的廢水 瀏覽:958
酚氰廢水如何產生 瀏覽:586
污水處理下項目落地流程 瀏覽:106
7月十日回臨汾用隔離 瀏覽:264
凈水器的過濾芯黑色的顆粒是什麼 瀏覽:799
為什麼凈水器的純水TDS值偏高 瀏覽:274
播放器提升不明顯 瀏覽:916
黑殼用過濾水養能活嗎 瀏覽:544
美的飲水機水管有雜味怎麼去除 瀏覽:974
藍光過濾是不是護眼模式 瀏覽:675
水壺裡面的水垢用什麼清洗 瀏覽:288