只需一个简单的小编就可以用较大的角度说明问题。我正在尝试做的是创建一个信号/插槽连接函数,而不使用任何类。我是OOP的新手,现在不想与课程有关。因此,我要在main
函数之前创建一个函数,并希望它可以工作……但事实并非如此。该编可以编译并执行,但我收到通知: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();
}
答案 0 :(得分:5)
好吧,确实只有在QObjects中才有插槽,但是您也可以肯定也将信号连接到lambda:)
因此,在这种情况下,您可以使用有用的lambda并忽略自定义函数
void onClicked(QTextEdit文本,QString a):
喜欢
QObject::connect(&btn, &QPushButton::clicked,
[](QTextEdit te, QString s){qDebug() << "am in...";});
答案 1 :(得分:3)
您可以在Qt文档中阅读以下内容:
所有从QObject或其子类之一继承的类(例如, QWidget)可以包含信号和插槽。
因此,您不能在main.cpp中定义插槽。您有两个选择。要么定义一个从QObject派生的类,然后在其中添加插槽,要么使用Qt 5. *,然后使用新的连接语法将信号连接到lambda。