2013-07-18 34 views
1

我試圖禁止用戶選擇表格窗口小部件中的單個單元格,我只希望能夠選擇列和行標題以及他們自己的單獨選擇行爲。下面是我的嘗試:如何將QTableWidget設置爲只允許按標題選擇?

ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 
ui->tableWidget->horizontalHeader()->setSelectionMode(QAbstractItemView::SingleSelection); 
ui->tableWidget->verticalHeader()->setSelectionMode(QAbstractItemView::MultiSelection); 

但它不是讓我選擇什麼,我無法找到設置爲僅細胞選擇行爲的方法。任何人?

編輯: 我試着連接到表格控件的垂直和水平標題的sectionClicked信號,即使表格控件的選項設置爲無,但它們仍不會突出顯示。

回答

2

setSelectionMode作爲默認是NoSelection忽略小部件上的所有選擇。然後按以下代碼連接,以觸發hhSelected和vhSelected插槽。在這些插槽中,您只需設置相應的selectionMode和SelectionBehavior。

SO_Qt::SO_Qt(QWidget *parent, Qt::WFlags flags) 
    : QMainWindow(parent, flags) 
{ 
    ui.setupUi(this); 
ui.tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 

QHeaderView* hh = ui.tableWidget->horizontalHeader(); 
bool success = connect(hh, SIGNAL(sectionClicked(int)), this, SLOT(hhSelected(int))); 

QHeaderView* vh = ui.tableWidget->verticalHeader(); 
success = connect(vh, SIGNAL(sectionClicked(int)), this, SLOT(vhSelected(int))); 
} 

void SO_Qt::hhSelected(int index) 
{ 
    ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); 
    ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns); 
    ui.tableWidget->selectColumn(index); 
} 

void SO_Qt::vhSelected(int index) 
{ 
    ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); 
    ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); 
    ui.tableWidget->selectRow(index); 
} 
+0

我用這個,但選擇行/列後重置爲NoSelection。這有點哈克,但至少它做我想要的。非常感謝! – mpellegr

+0

我遇到使用此解決方案的問題。如果你想回答它,我創建了另一個問題:http://stackoverflow.com/questions/17790509/select-rows-and-columns-in-qtablewidget-while-keeping-highlighted – mpellegr

相關問題