C++ Qt 4.0信号和插槽具有最小OOP

C++ Qt 4.0信号和插槽具有最小OOP,c++,qt,qt4,C++,Qt,Qt4,我对Qt比较陌生;我正在编写一个小程序,我不想为每个小部件等创建自己的类。到目前为止,我还没有遇到很多困难,但我对信号和插槽有点困惑。我想发出一个信号,当用户在文本框(QLineEdit)中键入并按enter键时触发。我希望槽是一个功能,接受用户输入的文本 到目前为止,我已经想到了这个: textBox.connect(&textBox,SIGNAL(textBox.returnPressed()),/*What to put here?*/,processText(/*Here?*/)

我对Qt比较陌生;我正在编写一个小程序,我不想为每个小部件等创建自己的类。到目前为止,我还没有遇到很多困难,但我对信号和插槽有点困惑。我想发出一个信号,当用户在文本框(QLineEdit)中键入并按enter键时触发。我希望槽是一个功能,接受用户输入的文本

到目前为止,我已经想到了这个:

textBox.connect(&textBox,SIGNAL(textBox.returnPressed()),/*What to put here?*/,processText(/*Here?*/))
如果这段代码严重错误,我道歉;正如我所说的,我对Qt比较陌生


非常感谢您的帮助。

遗憾的是,如果您希望文本与信号一致,或者希望在调用的插槽中进行一些自定义处理,我认为没有继承就无法实现这一点

如果没有,您可以使用QLineEdit发出的“returnPressed”信号和一些我不可能知道的预先存在的插槽

下面是我使用继承的解决方案

要创建自己的插槽,需要创建一个继承的类。直接或间接地从Qobject继承它

//myClass.h
#ifndef myclass_h_
#define myclass_h_
#include <QObject>

class myClass: public QObject
{
    // important
    Q_OBJECT;

    ....
    public slots:
        void takeText(QString p_value);
};

#endif
在此之后,创建一个myClass对象,并将信号连接到它

myClass * thing = new myClass();
myLineEdit* lineEdit = new myLineEdit();

connect(lineEdit, SIGNAL(newText(QString),
        things, SLOT(takeText(QString));

信号和插槽必须是QObject(/QObject子类)的方法。不能将自由函数用作插槽。这里的“最小OOP”可能意味着包含插槽的QObject单例


此外,带有签名(a、B、C)的信号只能连接到带有签名()的插槽,(a)、(a、B)、(a、B、C),即可以放弃/忽略尾随参数。插槽不能有信号以外的其他参数,也不能在连接时将插槽参数绑定到某个值(我认为QSignalMapper涵盖了最常见的用例)。

我不是唯一一个引起注意的人。但我仍然觉得我应该帮助你,因为我可以,我不应该让这困扰我。像你那样处理一些批评让我再也帮不了你了。注意,我不想让你把这个作为答案,我不在乎这个。我只是想让你做个记号,我道歉。昨天我头痛得很厉害。在我的许多问题中,有多个可以接受的答案,所以我投了赞成票。那么糟糕吗?
myLineEdit::myLineEdit()
{
    connect(this, returnPressed(),
            this, handleReturnPressed());
}

void myLineEdit::handleReturnPressed()
{
    emit(newText(text());
}
myClass * thing = new myClass();
myLineEdit* lineEdit = new myLineEdit();

connect(lineEdit, SIGNAL(newText(QString),
        things, SLOT(takeText(QString));