1

我一直在使用 QT,我注意到他们通过为诸如private slots: public slots: signals:etc 等类实现一些新功能将 OOP 提升到了另一个层次……他们在做什么来声明类的此类类别?它是特定于编译器的还是仅仅是一种typedef?我猜它可以移植到主要操作系统,因为 QT 将在多个系统上运行。出于好奇,我要求创建自己的子类来帮助组织和创建更多的 OOP 程序。例如

class Main
{
handles:
  HANDLE hWin;
threads:
  HANDLE hThread;
};

然后简单地做干净的继承就很容易了

class Dialog : handles Main
{

};
4

2 回答 2

3

对我来说,看起来人们没有回答你的问题,他们回答的问题有点不同。您似乎在谈论恰好用于插槽的“部分标签”,并且希望您自己的类部分(如句柄和线程)的部分标签。这是 QT 通过在将代码发送到编译器之前对其进行预处理来完成的。如果不添加另一个编译阶段,这不是您可以自己做的事情。

也就是说,除了告诉 QT 预编译器找到它的插槽的部分之外,它真的没有多大用处。你不能继承它们,就像你想要做的那样。它只是标记一个区域以生成内省代码。

而且你真的不想那样做。如果您有想要继承的单独组件,请将它们分成单独的类,然后使这些单独的类成为控制它们交互的更大类的成员。如果您尝试拆分具有不同部分的类,编译器将无法确保它们不会以需要其他部分的不变量的方式进行交互,因为编译器不会将这些类型的限制使用不同的成员。

于 2012-05-12T00:41:48.100 回答
0

它被称为信号和插槽,由Qt 元对象编译器 moc实现。moc还为预处理的类添加了一个内省系统。还存在不需要特殊预处理步骤的信号/插槽实现,例如Boost.SignalsBoost.Signals2。与通过函数调用传递的普通消息相比,我不会考虑更多或更少的信号和插槽 OOP,但这是有争议的,并不真正相关。

于 2012-05-12T00:13:45.533 回答