在c++中创建一个自定义槽,Qt5

Create a custom slot in C++, Qt5

本文关键字:自定义 一个 Qt5 c++ 创建      更新时间:2023-10-16

在python中,我们通过传入要在信号生成时调用的函数来编写自定义槽非常容易。而在c++中,connect函数要求我们传递slot函数的地址。我该怎么做呢?我尝试使用这个,但没有工作。

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;
};
相关文章: