代码之家  ›  专栏  ›  技术社区  ›  Goz

当Qt对象不是通过Designer创建时,如何处理信号?

  •  2
  • Goz  · 技术社区  · 15 年前

    嗨,我有一个空闲时间,所以决定看看Qt和如何轻松地将我的windows应用程序移植到Qt。

    我唯一真正的问题是一些控件需要在Qt下重新实现。我已经处理了控件的基本绘图,但是我的控件创建了一个子滚动条。问题是这个滚动条是作为我的新小部件的一部分动态创建的。 m_Scrollbar 是小部件的成员)。然后如何响应滚动条的移动。在其他情况下,这很容易,因为我只是创建一个 on_myscrollbar_sliderMoved 我的职责 protected slots 在那里处理。但这取决于 QScrollBar 被召唤 myscrollbar . 由于我已经动态地创建了对象(即不是通过设计器),我如何捕获这个信号?

    我猜这真的很简单,我错过了显而易见的:)

    1 回复  |  直到 11 年前
        1
  •  5
  •   Cătălin Pitiș    15 年前
    connect( myScrollbar, SIGNAL( <signal signature>), this, SLOT( <slot signature>));
    

    在创建滚动条后调用connect(我假定您需要在创建滚动条后立即进行此信号处理)。

    我假设myScrollbar是QScrollBar*类型,并且slot被定义为类中的成员。

    当myScrollbar被破坏时,连接被移除(称为disconnect)。

    请参阅QObject::connect和QObject::disconnect方法的文档。

    以后编辑

    myScrollbar = new QScrollBar; // Create the scroll bar
    // ... add it to the layout, etc.
    // ... and connect the signal to your slot
    connect( myScrollbar, SIGNAL( sliderMoved( int)), this, SLOT( handleSliderMoved( int)));
    

    其中handleSliderMoved是类的slot方法。