【问题标题】:Qt::QTableWidget: SIGNAL currentCellChanged: Differ between mouse and keyboardQt::QTableWidget: SIGNAL currentCellChanged: 鼠标和键盘不同
【发布时间】:2013-06-12 17:33:33
【问题描述】:

我有一个 QTableWidget,只要我用鼠标或键盘(制表键或箭头键)选择一行,它就会发出 SIGNAL currentCellChanged 调用 SLOT 方法。是否可以找出使用了哪一个(鼠标或键盘)?

【问题讨论】:

  • QObject 的sender() 方法只会让你进入QTableWidget,我认为......你需要更深入地挖掘它是否是由鼠标或键盘引起的......可以'你不是反过来吗?就像,不是让 QTableWidget 发出信号并在之后检查原点,你不能让它在 onmouseclick 或 keypress 事件之后发出信号吗?这样你就知道了……

标签: c++ qt


【解决方案1】:

我假设您使用的是常规的 Designer 表单类,并且表格小部件是该表单的一部分。

在表单类的构造函数中你应该这样做:

ui->tableWidget->viewport()->installEventFilter(this);

eventFilter 方法添加到您的类(它重新实现了虚拟QObject::eventFilter):

bool MyForm::eventFilter(QObject* object, QEvent* event) {
  if (object == ui->tableWidget->viewport()) {
    if (event->type() == QEvent::KeyPress) {
      method = method_keyboard;
    } else if (event->type() == QEvent::MouseButtonPress) {
      method = method_mouse;
    }
  }
  return false;
}

在槽中,您可以检查method 变量的值以找出使用了哪个控件。

【讨论】:

  • 我的 GUI 是在运行时生成的,但它仍然可以工作。但是 KeyPress 不适用于选项卡,我不得不使用 ShortcutOverride
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2013-07-13
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多