有没有办法配置clang-format
工具跳过我的Qt::connect
函数调用?我的构造函数中有几个连接看起来像这样:
connect( m_Job, SIGNAL( error( const QString&, const QString& ) ), this, SLOT( onError( const QString&, const QString& ) ) );
connect( m_Job, SIGNAL( message( const QString& ) ), this, SLOT( onMessage( const QString& ) ) );
connect( m_Job, SIGNAL( progress( int, int ) ), this, SLOT( onProgress( int, int ) ) );
但是在我运行格式化工具后,它的可读性降低了:
connect( m_Job, SIGNAL( error(const QString&, const QString&)), this, SLOT( onError(const QString&, const QString&)) );
connect( m_Job, SIGNAL( message(const QString&)), this, SLOT( onMessage(const QString&)) );
connect( m_Job, SIGNAL( progress(int, int)), this, SLOT( onProgress(int, int)) );
答案 0 :(得分:9)
使用// clang-format off
和// clang-format on
使其跳过代码段。
// clang-format off
// Don't touch this!
connect( m_Job, SIGNAL( error( const QString&, const QString& ) ), this, SLOT( onError( const QString&, const QString& ) ) );
connect( m_Job, SIGNAL( message( const QString& ) ), this, SLOT( onMessage( const QString& ) ) );
connect( m_Job, SIGNAL( progress( int, int ) ), this, SLOT( onProgress( int, int ) ) );
// clang-format on
// Carry on formatting
答案 1 :(得分:0)
您可以使用new signal slot syntax来提高可读性。它看起来更简单
connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue);
答案 2 :(得分:0)
暂且不说:您应该规范化信号/插槽签名。因此,不需要引用和const引用,Qt中的签名规范化代码只是删除它们。如果它是this
,您也不需要第三个参数。
您的代码应如下所示:
connect(m_Job, SIGNAL(error(QString,QString)), SLOT(onError(QString,QString)));
connect(m_Job, SIGNAL(message(QString)), SLOT(onMessage(QString)));
connect(m_Job, SIGNAL(progress(int,int)), SLOT(onProgress(int,int)));
如果你坚持,那么参数类型之间肯定会有空格,当然在某些运行时成本,因为规范化代码不再是无操作。
您还可以利用QMetaObject::connectSlotsByName
摆脱显式连接。这要求m_Job
是this
的孩子,并且有一个名字。例如:
class Foo : public Q_OBJECT {
Job m_job;
Q_SLOT void on_job_error(const QString&, const QString&);
Q_SLOT void on_job_message(const QString&);
Q_SLOT void on_job_progress(int, int);
public:
Foo(QObject * parent = 0) :
QObject(parent),
m_job(this)
{
m_job.setObjectName("job");
QMetaObject::connectSlotsByName(this);
}
};
名称格式为on_name_signal
的广告位将由connectSlotsByName
自动关联。 name
是发件人对象的名称,signal
是信号的名称。
最后,过多的空格可以使您的代码更难阅读,而不是更容易阅读。这不是风格问题,而是简单的生理问题。 Fovea centralis直径约为2角度。一个角度视角是指拇指在手臂长度上的宽度。读取具有过多空白的代码需要更多的扫视/注视,以便沿着代码行重新定位您的中心视觉。图0.15-0.2s需要处理每个固定的数据,并将其与您正在阅读的代码的心智模型相结合。这一切都是可以衡量的。
作为一则轶事,不是医学建议:我不能在没有+0.5眼镜的情况下阅读密集的乐谱。我的愿景完全正常。 YMMV。