簡體   English   中英

在C ++,Qt5中創建自定義插槽

[英]Create a custom slot in C++, Qt5

在python中,我們通過傳遞生成信號時要調用的函數來非常輕松地編寫自定義插槽。 而在C ++中,connect函數需要我們傳遞插槽函數的地址,或者我想這樣。 我怎么做。 我嘗試使用它,但沒有用。

Python代碼::

 class imviu(QtGui.QWidget):
   def __init__(self):
     super(imvui,self).__init__()
     self.btn=QtGui.QPushButton('Browse')
     btn.clicked.connect(self.openimg)
   def openimg(self):
     #do something

C ++代碼::

class imviu: public QWidget
{
  public:
    imviu(QWidget *parent=0);
    QPushButton *btn=new QPushButton("Browse");
    void openimg(void);
};

imviu::imviu(QWidget *parent)
  :QWidget(parent)
{
  connect(btn, SIGNAL(clicked()),this,SLOT(openimg()));//this does'nt work:QObject::connect: No such slot QWidget::openimg()
}

void imviu::openimg()
{
   //do something
}

為了使用信號和插槽,您需要在類中使用Q_OBJECT宏,並標識哪些功能應該是信號和插槽。 請查看文檔以獲取更深入的說明。

此后,您需要設置項目文件,以便MOC可以生成必要的代碼。

您的類定義應如下所示:

class imviu: public QWidget
{
  Q_OBJECT
  public:
    imviu(QWidget *parent=0);

  public slots:
    void openimg();

  private:
    QPushButton *btn;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM