2014-04-01 32 views
2

我有一個包含2000多行的QTableWidget表。當我在每行中添加QToolButton「Remove」時,它變得有點慢)。爲什麼表變慢,按鈕ui或信號映射器?我怎樣才能加快我的桌子,也許用別的東西替換按鈕或以其他方式連接信號?Qt ui:加速大表


我對按鈕的代碼:

// mapper for remove buttons 
    QSignalMapper* signalMapper = new QSignalMapper(this); 
    connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(RemoveString(int)), Qt::UniqueConnection); 

不是每一行:

//remove button 
    QToolButton* remove_button = new QToolButton(this); 
    remove_button->setText("Remove"); 
    signalMapper->setMapping(remove_button, index); 
    connect(remove_button, SIGNAL(clicked()), signalMapper, SLOT(map()), Qt::UniqueConnection); 
    ui->locale_table->setCellWidget(index, 3, remove_button); 

enter image description here

+1

您創建並添加2000個按鈕到表格中?如果是的話,那當然會很慢。您一次不需要2000個按鈕 - 只能看到多個按鈕。這可以通過視圖的項目委託來實現。 – vahancho

+0

所以如果我將上下滾動,按鈕將被創建和刪除?它快嗎? – hoody

+1

我認爲它會更快。但是如果性能如此重要,那麼最好使用QTableView(使用模型和委託)來實現您的表,而不是使用QTableWidget。 – vahancho

回答

2

正如vahancho說你會希望有一個項目委託。項目代表只是以某種方式顯示數據和信息。它主要是將項目繪製成你想要的樣子,所以它不一定會創建一個整體小部件。您可能會想要使用樣式的項目代理。 http://qtadventures.wordpress.com/2012/02/04/adding-button-to-qviewtable/這應該有你需要的所有信息。

您使用QTableWidget方法setItemDelegate,setItemDelegateForColumn,setItemDelegateForRow將項目委託設置爲小部件。

+0

Thanx回答 – hoody

+0

代表最大的好處是即使你使用實際的小部件,他們也不需要一次實例化。 –