c++ - 我可以在不创建类的情况下创建一个插槽吗?
问题描述
只是一个简单的程序来说明更大的问题。我要做的是在不使用任何类的情况下为信号/插槽连接创建一个函数。我是 OOP 的新手,目前不想与课程有关。所以,我在函数之前创建了一个函数,main
并希望这会起作用......但它没有。prog 可以编译和执行,但我收到一个通知:Object::connect: No such slot QTextEdit::onClicked()
. 我预计这个问题可以很容易地解决,因为它是表达上的错误而不是理解上的错误,所以在此先感谢您的帮助!:)
#include <QtGui>
#include <QtCore>
void onClicked (QTextEdit text, QString a)
{
text.setText(a);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget mw;
mw.setWindowTitle("Main Window");
mw.resize(400, 400);
mw.show();
QLabel label ("Enter something:", &mw);
label.setAlignment(Qt::AlignHCenter);
label.show();
QLineEdit line (&mw);
line.show();
QString a = line.text();
QTextEdit text (&mw);
text.show();
QPushButton btn ("Convert", &mw);
QObject::connect(
&btn,
SIGNAL(clicked()),
&text,
SLOT(onClicked()));
btn.show();
QVBoxLayout layout_mw;
layout_mw.addWidget(&label);
layout_mw.addWidget(&line);
layout_mw.addWidget(&btn);
layout_mw.addWidget(&text);
mw.setLayout(&layout_mw);
return app.exec();
}
解决方案
好吧,确实插槽仅在 QObjects 中可用,但您也可以肯定地将信号连接到 lambdas :)
因此,在这种情况下,您可以使用有用的 lambda 并省略自定义函数
void onClicked (QTextEdit text, QString a) :
喜欢
QObject::connect(&btn, &QPushButton::clicked,
[](QTextEdit te, QString s){qDebug() << "am in...";});
推荐阅读
- c# - 如何在.net core web API中获取excel文件?
- mysql - 将子字符串值插入到已经存在的条目中
- typescript - 带有 vscode 的打字稿路径在 ctrl 单击时解析错误
- apache-spark - Pyspark:java.lang.IllegalArgumentException:HOUR_OF_DAY:0 -> 1
- amazon-web-services - 使用 terraform 将 AWS 备份还原到 RDS
- flutter - Flutter中不同的元素位置
- pdf - 将可填写的 pdf 嵌套到新的 pdf 文档中
- r - ggplot 多列(一些列有很多 NaN),在 r 的一个图中带有线和点
- spring-boot - Spring Cloud Config Server 无法使用 SSH 克隆私有 Git 存储库
- java - JsonIgnore 除了一个端点