如何在未通过Designer创建Qt对象时处理信号?

Goz*_*Goz 2 c++ qt signals-slots

嗨,我有一个空闲的时刻,所以决定看看Qt,我可以轻松地将我的Windows应用程序移植到Qt.

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

我猜这很简单,我错过了明显的:)

Căt*_*tiș 5

connect( myScrollbar, SIGNAL( <signal signature>), this, SLOT( <slot signature>));
Run Code Online (Sandbox Code Playgroud)

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

我假设myScrollbar的类型为QScrollBar*,并且插槽被定义为类中的成员.

销毁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)));
Run Code Online (Sandbox Code Playgroud)

其中handleSliderMoved是您的类的slot方法.