每个 QT 小部件是否都有“显示”信号?

Joe*_*e C 5 c++ qt

当对话框显示何时打开或从最小状态最大化或从屏幕移出时,我想执行一些操作。

QT有这种信号吗?我也不知道在哪里可以找到 QT 是否定义了信号列表。

Ale*_*r V 5

每个 QT 小部件是否都有“显示”信号?

如果您查看 Qt 源代码,您会发现 QWidget::show 是一个插槽:

public Q_SLOTS:
    // Widget management functions

    virtual void setVisible(bool visible);
    void setHidden(bool hidden);
    void show();
Run Code Online (Sandbox Code Playgroud)

该插槽主要是为我们,程序员使我们能够连接信号用于特定目的,例如单击我们创建的按钮对某些小部件执行某些操作。对于 Windows 或 Mac OS,我们的应用程序通过事件循环为来自系统的所有事件提供服务。而QWidget的在未来的系统事件的形式,所有的“信号”反应,是的,可以执行show()showMaximized()showMinimized插槽即可。

但我可以假设你想超载

virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);
Run Code Online (Sandbox Code Playgroud)

喜欢:

void MyWidget::showEvent(QShowEvent *e)
{
    if (isMaximized())
    {
         if (e->spontaneous())
         {
             // the author would like to know
             // if the event is issued by the system
         }
         ; // the action for maximized
    }
    else
    {
         ; // the action for normal show
    }
}

void MyWidget::hideEvent(QHideEvent *)
{
    if (isMinimized())
    {
         ; // the action for minimized
    }
    else
    {
         ; // the action for hide
    }
}
Run Code Online (Sandbox Code Playgroud)

为了识别系统操作小部件的情况,我们可以使用QEvent::spontaneous()

另请参阅显示和隐藏事件文档页面:http : //doc.qt.io/qt-5/qshowevent-members.html http://doc.qt.io/qt-5/qhideevent.html