繁体   English   中英

“this”的小问题(在非成员函数中无效使用“this”)

[英]Little issue with 'this' (invalid use of 'this' in a non-member function)

当我解决了这个问题后,我终于完成了我的编 :D 一如既往,问题的模型如下。 invalid use of 'this' in a non-member function错误中得到了invalid use of 'this' in a non-member functioninvalid use of 'this' in a non-member function 在我看来,我所做的一切都是正确的:我已经将类移到了main函数之外,而且我也没有忘记Q_OBJECT宏......有人可以在这里帮助我,请注意我是 OOP 的新手。 谢谢!

#include <QtGui>
#include <QtCore>


class MyObject : public QObject
{
   Q_OBJECT

   public:
   QTextEdit text;
   QString a;

   public slots:
   void onClicked() {
      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()),
      this,                 /* the compiler keeps complaining... */
      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();

}  

您不能在非静态成员函数之外使用this

您似乎想将clicked()信号连接到MyObject实例上的onClicked()函数。 这意味着您首先需要创建MyObject类的一个实例。 然后使用指向该对象的指针作为信号的接收者:

MyObject my_object;

QObject::connect(
  &btn,
  SIGNAL(clicked()),
  &my_object,
  SLOT(onClicked()));

不过要小心,因为MyObject的成员变量与main函数中的同名局部变量没有任何关系。

从我上面的示例代码来看, my_object.text是一个与text完全不同的变量。 当然, my_object.aa也是如此。

对您的问题的评论所示,有更好的方法可以做您想做的事,而无需创建MyObject类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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