在Qt创建者中将功能附加到按钮的正确方法?

时间:2013-10-29 20:59:23

标签: c++ qt qt-creator

注意:我正在开发Qt creator 5.0

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

Qt网站上的教程指示这样做的方法是进入Design模式,右键单击QPushButton,点击“转到插槽...”然后在创建的函数中编写按钮的代码。

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

这两种方法之间是否存在差异,并且优于另一种方法?

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

2 个答案:

答案 0 :(得分:2)

  

我注意到的主要区别是,如果我遵循第一个   方法,然后我刚创建的插槽/信号没有出现   “信号与插槽编辑”。

这是因为第一种方法中的插槽是MainWindow的私有插槽,而在第二种方法中,按钮将信号发送到公共插槽(或者您的示例中的函数,即imho BAD习惯) MainWindow。差别很明显我想私有插槽只在类({在这种情况下为MainWindow)中使用,并且不能在它之外连接。我认为理解代码是有用的区别,这就是我不同意的原因(我强调):

  

第一个,你完全确定你在做什么,不   拼写错误的单词... 但如果你的代码附带很难更新   文件很差。

有两个原因:

1)只要你明智地命名你的插槽(即PushButton1_Clicked),它就会很明亮地连接到它(clicked()的信号PushButton1)。

3)即使功能在其他地方重复使用(将其作为公共函数imho的唯一理由),你最好从按钮的这个私有槽调用该函数,而不是直接将代码中的按钮连接到它处理它作为一个插槽(这至少是令人困惑的事情)。更好的是,在MainWindow范围之外需要用于按钮和公共插槽的私有插槽,并且函数本身作为两者调用的私有方法...或者如果功能未在MainWindow外部的信号/插槽中使用,则将其作为公共功能但仍然可以从按钮的私人插槽中调用它,而不是直接连接它。

我将它分开的原因是将功能和UI分开,特别适用于需要在UI元素之外重用代码的情况,以及多个元素使用它的情况。能够看到与UI隔离的功能使得更容易更新,而不必担心连接到它的UI元素。但是,这只是我。 : - )

PS。真实的评论。除非您特别需要按钮在clicked()上执行某些操作,否则我建议您使用released()信号,因为用户可以在点击按钮后重新考虑但是clicked()他无法重新考虑。

答案 1 :(得分:0)

使用第一个,你完全确定你正在做什么,没有拼写错误的单词......但如果你的代码文档很差,很难更新。

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