【问题标题】:How to deselect selected cell in QTableWidget by clicking on it again?如何通过再次单击取消选择 QTableWidget 中的选定单元格?
【发布时间】:2021-12-19 17:43:52
【问题描述】:

我试图通过再次单击来取消选择 QTableWidget 中的选定单元格。我不知道我是否错过了文档中的选项或信号(我希望不会)。我尝试使用信号cellClickedcellActivated。它们都不起作用。问题是,如果一个单元格处于取消选择状态并且我单击它,则在发出时间信号cellClicked 时,单元格已经有选择。所以我无法检查对该信号作出反应的插槽中的选择。

那么如何取消选择选定的单元格?选择模式为SingleSelection。我只是希望我不必继承QTableWidget

【问题讨论】:

  • 根据documentation,您可以在单击期间按Ctrl 取消选择单元格。
  • 没错,但我不希望那样。我希望该用户能够单击选定的单元格并通过单击取消选择它。基本上,当您单击白色单元格时,它会变为蓝色(选中)。当您单击蓝色单元格时,它会再次变为白色(取消选择)。
  • 类似。但现在用户可以选择多个单元格。我希望用户能够选择 only 一个 单元格并通过再次单击它来取消选择它。此外,突出显示也应该被删除(因为 Qt 区分完全选择和突出显示 - MultiSelection 突出显示保持不变)。
  • 如果没有一个标准选择模式提供你想要的,你可能不得不通过连接到QTableWidget::cellClickedQTableWidget::itemClicked 信号来自己实现它。

标签: qt qtablewidget


【解决方案1】:

我只进行了最少的测试,但以下似乎可以满足您的需求...

#include <iostream>
#include <QApplication>
#include <QTableWidget>

int main (int argc, char **argv)
{
  QApplication app(argc, argv);
  QTableWidget tw(5, 10);

  /*
   * Disable any normal selection mode.
   */
  tw.setSelectionMode(QAbstractItemView::NoSelection);

  QObject::connect(&tw, &QTableWidget::cellClicked,
                   [&tw](int row, int col)
                     {

                       /*
                        * Make sure we have an item in the cell.
                        */
                       auto *item = tw.itemAt(row, col);
                       if (!item) {
                         item = new QTableWidgetItem(QString("cell[%1, %2]").arg(row).arg(col));
                         tw.setItem(row, col, item);
                       }

                       /*
                        * Update selection based on current state.
                        */
                       bool was_selected = item->isSelected();
                       tw.selectionModel()->clear();
                       item->setSelected(!was_selected);
                     });
  tw.show();
  return app.exec();
}

【讨论】:

  • 我明天去看看。谢谢。
猜你喜欢
  • 2019-10-24
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多