我正在尝试禁止用户在表格小部件中选择单个单元格,我只希望能够选择列标题和行标题,以及它们各自的选择行为。这是我试过的:
ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);
ui->tableWidget->horizontalHeader()->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget->verticalHeader()->setSelectionMode(QAbstractItemView::MultiSelection);
但它不允许我选择任何东西,我找不到一种方法来设置只有单元格的选择行为。任何人吗?
编辑: 我尝试连接到表格小部件垂直和水平标题的sectionClicked信号,即使表格小部件的选择设置为无,它们似乎也在发光,但它们不会保持突出显示。
答案 0 :(得分:2)
setSelectionMode默认为NoSelection,忽略widget上的所有选择。然后按以下代码连接以触发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);
}