环境
- qt : 6.5.1。 5.15.2
相关资源
喜欢在clion中开发 ,添加相应的槽函数是件麻烦事。所以,就有了这个功能:选择相应槽函数后,复制签名到系统剪贴板
效果:
修改的相关代码
QDesignerTaskMenu::navigateToSlot
#include <QApplication>
#include <QClipboard>
void QDesignerTaskMenu::navigateToSlot(QDesignerFormEditorInterface *core,
QObject *object,
const QString &defaultSignal) {
SelectSignalDialog dialog;
dialog.populate(core, object, defaultSignal);
if (dialog.exec() != QDialog::Accepted)
return;
// TODO: Check whether signal is connected to slot
const SelectSignalDialog::Method method = dialog.selectedMethod();
if (method.isValid()) {
QClipboard *clipboard = QApplication::clipboard();
QString signature = method.signature;
auto pos1 = signature.indexOf("(");
auto pos2 = signature.lastIndexOf(")");
QString parameterTypesText = signature.mid(pos1 + 1, pos2 - pos1 - 1);
parameterTypesText = parameterTypesText.replace(" ", "");
QString methodName = signature.left(pos1);
QString methodSignText;
if (parameterTypesText.isEmpty()) {
methodSignText = QString("void on_%1_%2();").arg(objName(core, object), methodName);
clipboard->setText(method.signature);
} else {
QStringList parameterTypes = parameterTypesText.split(",");
QStringList parameter;
for (int i = 0; i < parameterTypes.size(); ++i) {
parameter << parameterTypes.at(i) + " " + method.parameterNames.at(i);
}
methodSignText = QString("void on_%1_%2(%3);").arg(objName(core, object), methodName,
parameter.join(", "));
}
clipboard->setText(methodSignText);
core->integration()->emitNavigateToSlot(objName(core, object),
method.signature,
method.parameterNames);
}
}
QDesignerTaskMenu::taskActions
// if (isSlotNavigationEnabled(formWindow->core())) {
actions.append(d->m_separator7);
actions.append(d->m_navigateToSlot);
// }
注意事项:
- 若是5.15.2。得在qtcreator中编译。编译时如果提示缺少 vulkan。将vulkan文件夹复制到 \Qt\5.15.2\msvc2019_64\include
- 若是6.x.x,可在clion中编译。