簡體   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