3

注意:我在 Qt creator 5.0 中开发

我在看别人的 Qt 代码,我有点困惑。在我看来,基本上有两种方法可以实现将函数附加到QPushButton clicked()信号的相同任务。

Qt网站上的教程指导的方式是进入Design模式,右键单击QPushButton,单击“Go to slot...”,然后在创建的函数中编写按钮的代码。

在我目前正在查看的代码中,他们在MainWindow类(即根类)中编写了自己的公共函数。然后在Design模式的Edit/signal slots模式下,他们将QPushButton信号附加(拖动)到MainWindow,此时他们选择手动创建的函数作为slot

这两种方法之间有区别吗?一种方法优于另一种方法吗?

我注意到的主要区别是,如果我遵循第一种方法,那么我刚刚创建的插槽/信号不会出现在“信号和插槽编辑器”中。

4

2 回答 2

2

我注意到的主要区别是,如果我遵循第一种方法,那么我刚刚创建的插槽/信号不会出现在“信号和插槽编辑器”中。

那是因为第一种方法中的插槽是私有插槽,MainWindow而在第二种方法中,按钮将信号发送到公共插槽(或您的示例中的函数,这是恕我直言的坏习惯)MainWindow。区别很明显,我猜私有插槽仅在类内使用(MainWindow在这种情况下),不能在类外连接。我相信这是理解代码的有用区别,这就是为什么我不同意这一点(我强调):

使用第一个,您完全确定自己在做什么,没有拼写错误的单词......但是如果您的代码附带糟糕的文档,则很难更新。

两个原因:

1) 只要您明智地命名您的插槽(即 PushButton1_Clicked),它所连接的内容就非常明确(信号clicked()PushButton1

3)即使该功能在其他地方被重用(将其作为公共功能恕我直言的唯一原因),您最好从按钮的此类私有插槽调用该功能,而不是将代码中的按钮直接连接到将其视为插槽(这至少又是一件非常令人困惑的事情)。更好的是为按钮和公共插槽提供私有插槽,用于 MainWindow 范围之外的任何需要,并且函数本身作为两者调用的私有方法......或者如果该功能未在 MainWindow 之外的信号/插槽中使用,则将其作为公共功能但仍然从按钮的专用插槽调用它,而不是直接连接它。

我像这样将它分开的原因是为了将功能和 UI 分开,这尤其适用于您需要在 UI 元素之外重用代码的情况,但也适用于多个元素使用它的情况。能够看到与 UI 隔离的功能可以更轻松地进行更新,而无需担心连接到哪些 UI 元素。但是,这只是我。:-)

PS。房地产评论。除非您特别需要按钮来执行某些操作,否则clicked()我建议您改用released()信号,因为用户可以在单击按钮后重新考虑,但clicked()他无法这样做。

于 2013-10-30T06:08:21.707 回答
0

使用第一个,您完全确定自己在做什么,没有拼写错误的单词......但是如果您的代码附带糟糕的文档,则很难更新。

使用第二个,版本会更容易,即使您没有足够的代码文档,也很容易为其他人更新。

于 2013-10-29T21:06:18.153 回答