繁体   English   中英

我可以在不创建课程的情况下创建插槽吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM