[英]Can I create a slot without creating a class?
只是一个简单的编程来说明更大的问题。 我想要做的是创建一个信号/插槽连接功能,而不使用任何类。 我是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...";});
您可以在Qt文档中阅读:
从QObject或其子类之一(例如,QWidget)继承的所有类都可以包含信号和槽。
所以你不能在main.cpp中定义槽。 你有两个选择。 定义从QObject派生的类并在那里添加插槽或使用Qt 5. *并使用新的连接语法将信号连接到lambda。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.