【问题标题】:How to set QTableWidget to only allow selection by headers?如何将 QTableWidget 设置为仅允许按标题选择?
【发布时间】:2013-07-18 21:28:10
【问题描述】:

我正在尝试禁止用户选择表格小部件中的单个单元格,我只想能够选择列和行标题,并使用它们自己的单独选择行为。这是我尝试过的:

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

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

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

【问题讨论】:

    标签: qt user-interface qtablewidget


    【解决方案1】:

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

    【讨论】:

    • 我使用了这个,但在选择行/列后我重置为 NoSelection。这有点hacky,但至少它做了我想要的。非常感谢!
    • 我在使用此解决方案时遇到问题。如果您想回答,我创建了另一个问题:stackoverflow.com/questions/17790509/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多