我可以在不创建课程的情况下创建广告位吗?

时间:2019-03-11 07:35:01

标签: c++ qt

只需一个简单的小编就可以用较大的角度说明问题。我正在尝试做的是创建一个信号/插槽连接函数,而不使用任何类。我是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();
    }

2 个答案:

答案 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。