如何设置QTableWidget只允许按标题选择?

时间:2013-07-18 21:28:11

标签: qt user-interface qtablewidget

我正在尝试禁止用户在表格小部件中选择单个单元格,我只希望能够选择列标题和行标题,以及它们各自的选择行为。这是我试过的:

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

但它不允许我选择任何东西,我找不到一种方法来设置只有单元格的选择行为。任何人吗?

编辑: 我尝试连接到表格小部件垂直和水平标题的sectionClicked信号,即使表格小部件的选择设置为无,它们似乎也在发光,但它们不会保持突出显示。

1 个答案:

答案 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);
}