是否可以在SLOT宏中用作參數QString? PS。我的意思是一個簡單的解決方案..不像在QMetaObject :: connectSlotsByName()。使用QString作爲SLOT宏中的參數
回答
不,你不能通過QString
到SLOT
宏。但是,您可以使用QString
作爲connect
。 connect
也不能採取QString
,所以你必須將其轉換爲const char *
。簡單的例子是:
QString slotName = SLOT(clicked());
connect(ui->pushButton, SIGNAL(clicked()), qPrintable(slotName));
SLOT
只是stringifies傳遞的參數,並與1
串連它:
# define SLOT(a) qFlagLocation("1"#a QLOCATION)
如果你不想使用SLOT
有可能寫出這樣的代碼:
QString slotName = QString::number(QSLOT_CODE) + "clicked()";
代碼: connect(pAct,SIGNAL(triggered()),this,SLOT(qPrintable(SlotActionPrefix + pAct-> objectName()) )); log: Object :: connect:無此插槽MainWindow :: qPrintable(pAct-> objectName())in。\ mainwindow.cpp:91 Object :: connect :(發件人名稱:'actionIPBlur') Object: :連接:(接收器名稱:'MainWindowClass') 不起作用( PS。QAction * pAct; const char * SlotActionPrefix =「act_」; – Bleach
您不需要將'qPrintable'傳遞給'SLOT'宏。 – fasked
謝謝,它的工作,我確實仔細閱讀) – Bleach
這是我當前項目的原始代碼。它解析聊天命令,例如/ me customtext並調用cmd_me(const QString & params);插槽。 爲了引入新的命令,它足以使用void cmd _ *(const QString &)創建專用插槽;簽名。
這裏是代碼:
void ConsoleController::onCommand(const QString& cmd)
{
if (cmd.length() < 1)
return ;
if (cmd[0] != '/')
return ;
const QMetaObject *meta = metaObject();
int posParam = cmd.indexOf(' ');
if (posParam == -1)
posParam = cmd.length();
const QString command = cmd.mid(1, posParam - 1).toLower();
const QString params = cmd.mid(posParam + 1);
const QString slotName = QString("cmd_%1(const QString&)").arg(command);
const QString normalizedSlotName = QMetaObject::normalizedSignature(slotName.toStdString().c_str());
for (int i = 0; i < meta->methodCount(); i++)
{
QMetaMethod method = meta->method(i);
if (method.methodType() != QMetaMethod::Slot)
continue;
const QString signature = method.signature();
if (normalizedSlotName == signature)
{
method.invoke(this, Q_ARG(QString, params));
return ;
}
}
log(QString("Command \"%1\" not recognized, type /help to list all available commands").arg(command));
}
你可以把一個想法,使其適用於您的需求。
謝謝。索裏,但我無法提升你的業力 – Bleach
沒有任何反應。你可能只接受一個答案。 –
- 1. 在SLOT(function())中傳遞變量或QString函數C++
- 2. Qt連接沒有SLOT宏
- 3. 在Umbraco中使用DAMP數據類型作爲宏參數
- 4. Umbraco - 使用Image Cropper作爲宏中的參數類型
- 5. 計數QString參數
- 6. QT中的SIGNAL和SLOT參數問題
- 7. 使用宏作爲函數
- 8. 使用宏作爲函數
- 9. 如何實現宏SIGNAL和SLOT作爲功能QT
- 10. 如何在Qt 5中聲明New-Signal-Slot語法作爲函數的參數
- 11. 在FreeMarker中以自己的參數傳遞宏作爲參數
- 12. RPM:使用參數從另一個宏的參數調用宏
- 13. 使用\ verbatim作爲宏的參數的一部分?
- 14. 的Qt的QString maxsplit參數
- 15. 傳遞數組作爲宏參數
- 16. GoogleMock和QString的參數
- 17. 如何使用宏作爲其他宏觀參數的一個列表
- 18. 宏作爲參數傳遞給宏用C
- 19. 作爲宏的參數的作用域內的枚舉聲明
- 20. Nunjucks:在宏中傳遞參數作爲參數
- 21. 宏作爲函數參數的默認參數
- 22. 爲什麼append Slot不起作用?
- 23. 如何在Qt中調用靜態函數作爲SLOT()?
- 24. 傳遞__FILE__宏作爲參數
- 25. 添加春季宏作爲Freemarker宏的參數
- 26. 功能,創建宏作爲參數提供的宏名稱
- 27. 作爲宏函數參數的下劃線的用法
- 28. 使用可變參數宏作爲列表
- 29. 如何使用宏參數作爲字符串文字?
- 30. 操作<<爲QString的
我不這麼認爲; SLOT宏在編譯時定義其內容。你可以做一些像'QString slotName = SLOT(method());',然後將該字符串傳遞給'connect'? –
不幸的是,沒有。我正在寫自動連接方法到我的班級,其中包含許多名稱前綴不同的函數 – Bleach