【问题标题】:pyqt: receive signal when widget becomes visible/hiddenpyqt:当小部件变得可见/隐藏时接收信号
【发布时间】:2012-06-11 05:17:07
【问题描述】:

我注意到当 QWidget 变得可见/不可见时没有信号/事件。还有什么我可以挂钩来获得大致相同的东西(轮询 isVisible() 除外)吗?

如果显示数据的小部件不可见,我想关闭一些数据获取。

【问题讨论】:

  • 请注意,虽然 QWidget 基类对此没有信号,但您会发现其他一些类有一个。例如,QWindow 有 visibleChanged...而 QDockWidget 有一个奇怪的稍微不同的名称 visibilityChanged
  • @HostileFork 我猜 QWindow 使用 visibleChanged 作为对应于isVisible() state-changes 的信号,因为它有一个 QWindow::visibilityChanged 与它的(不相关) visibility 财产。 QWindow::visibility 是在 QT 5.1 中引入的,QDockWidget::visibilityChanged 可以追溯到 Qt 4.3。猜猜他们后悔没有从一开始就将其命名为 visibleChanged。 (而 我的 遗憾的是 visiblevisibility 现在在同一个类中表示两个不同的东西。)

标签: qt pyqt signals


【解决方案1】:

一种解决方案是,您可以在小部件 (documentation) 中覆盖 QWidget::showEvent()QWidget::hideEvent() 函数。然后emit 自定义signal 并在相应对象中捕获slot。比如……

void MyWidget::hideEvent(QHideEvent *)
{
    // 'false' means hidden..
    emit widgetVisibilityChanged(false);
}

void MyWidget::showEvent(QShowEvent *)
{
    // 'true' means visible..
    emit widgetVisibilityChanged(true);
}

现在,如果您无法覆盖您的小部件,您还可以使用 QObject::installEventFilter ( QObject * filterObj )QObject::eventFilter ( QObject * watched, QEvent * event ) 组合 (documentation and example) 在其父小部件中接收上述事件。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多