【问题标题】:Create a custom slot in C++, Qt5在 C++、Qt5 中创建自定义插槽
【发布时间】:2013-05-31 05:50:34
【问题描述】:

在 python 中,我们通过传入要在生成信号时调用的函数来非常容易地编写自定义插槽。 而在 C++ 中,连接函数需要我们传递插槽函数的地址,或者我想。我怎么做。我尝试使用 this 但没有用。

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
}

【问题讨论】:

  • 除了不知道如何在c++中使用Qt之外,你似乎也不知道c++类的基础知识。我建议你参加初学者课程。
  • 让我知道哪个部分跳过了你......

标签: c++ qt oop pyqt qt5


【解决方案1】:

为了使用信号和槽,您需要在您的类中包含 Q_OBJECT 宏,并确定哪些函数应该是信号和槽。请查看the documentation 以获得更深入的解释。

在此之后,您需要设置项目文件,以便 MOC 可以生成必要的代码。

您的类定义应如下所示:

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

  public slots:
    void openimg();

  private:
    QPushButton *btn;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 2010-09-15
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2013-01-12
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多