小编bra*_*aks的帖子

在为Qt注册自定义类型时何时,何地以及为何使用命名空间

类似的问题已多次提出,但我专注于命名空间和指针问题.

MyClass.h

namespace foo {
class MyClass {
   MyClass();
};

QDataStream &operator<<(QDataStream &out, const MyClass & myObj);
QDataStream &operator>>(QDataStream &in, MyClass &myObj);

} // namespace foo

Q_DECLARE_METATYPE(foo::MyClass) // #1
Q_DECLARE_METATYPE(foo::MyClass*) // #2
Run Code Online (Sandbox Code Playgroud)

fooMyClass.cpp(这么多的排列):

MyClass::MyClass()
{
  qRegisterMetaType<MyClass>("MyClass"); // #3
  qRegisterMetaType<MyClass*>("MyClass*"); // #4
  qRegisterMetaType<MyClass>("foo::MyClass"); // #5
  qRegisterMetaType<MyClass*>("foo::MyClass*"); // #6
  qRegisterMetaType<foo::MyClass>("foo::MyClass"); // #7
  qRegisterMetaType<foo::MyClass*>("foo::MyClass*"); // #8
  qRegisterMetaType<MyClass>(); // #9
  qRegisterMetaType<MyClass*>(); // #10
  qRegisterMetaType<foo::MyClass>(); // #11
  qRegisterMetaType<foo::MyClass*>(); // #12

  // same for qRegisterMetaTypeStreamOperators<T>();
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如果我打算在命名空间内部和外部使用信号和槽(可能作为引用和指针)的自定义对象,那么何时以及为什么需要提供命名空间和/或指针变量.我是否总是要完全限定名称空间?

qt namespaces

11
推荐指数
1
解决办法
3445
查看次数

当明确设置值时,什么是抑制Qt信号的正确方法

我从QWidget派生类获得了一个包含三个QSpinBox(例如坐标)的类.该valueChanged()信号被连接,并且在至少这三种情况下被发射:

  1. 上/下按钮
  2. 手动输入的号码
  3. setValue()

但是,在使用时setValue(),我想抑制信号,因为我不想有(三个)信号.根据我的理解,有两种方法可以解决这个问题:

  1. QObject::blockSignals()
  2. 使用一个标志来指示值是否明确设置

两种变体都有效,但我认为它们根本不是直截了当的:对于第一种,我通常会阻止所有信号,我需要blockSignals(true)为所有底层小部件设置(blockSignals不会阻止我的应用程序中的子QObject).对于第二个,我需要在每个更新方法中查询标志,并且虽然我不需要它们但信号会被提升.

是否存在阻止此类行为的一般设计模式?如果没有,您更喜欢哪种变体?

qt signals qobject

8
推荐指数
1
解决办法
2462
查看次数

Doxygen 表:创建在源中有换行符的表

/**
 * | A | B |
 * | - | - |
 * | 123 | This should be a long line with
 * a line break without breaking the table |
 * | A further | row |
 */
Run Code Online (Sandbox Code Playgroud)

Doxygen 在“with”之后停止表解析。我怎样才能防止这种行为?

doxygen

6
推荐指数
1
解决办法
1451
查看次数

标签 统计

qt ×2

doxygen ×1

namespaces ×1

qobject ×1

signals ×1