在c++中创建一个自定义槽,Qt5
Create a custom slot in C++, Qt5
在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;
};
相关文章:
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- C++自定义流操纵器,用于更改流上的下一个字符串
- 编译一个自定义的tf操作,其中输入是5d张量
- 带有自定义deleter的std::unique_ptr对象的大小(一个由ref捕获的lambda)
- C++ 一个自定义类字符串,将其分配给 C 样式字符串
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 我写了一个自定义的咖啡层.但是在训练期间,它说“**层不需要向后计算”
- 尝试自定义一个函数来对不同种类元素的向量进行排序
- 创建一个包含对 <int、自定义类的最小堆>
- 编译自定义咖啡层时,LevelDB 中出现一个奇怪的错误
- QlineEdit:显示一个处理过的文本,而不是输入的文本,而是保留它(自定义回声模式)
- HRESULT:将自定义代码与系统一个区分开
- 我正在制作一个自动化器,并且我需要自定义它才能在将鼠标钥匙放下时单击
- glib:在另一个线程上处理自定义 GMainContext* 循环,不引发信号处理程序
- 如何设置此视觉工作室 (2015) 自定义生成步骤(工具?基本上,我想要一个修改头文件(c ++)的预处理器步骤
- 这个递归类需要一个自定义析构函数?
- 写一个最小的自定义操作员:std :: Sort需要std :: __ lg为我的类型解释
- 我正在声明一个自定义优先级队列,包括 pair<pair<int,int>int >,如何清除它?
- 我正在制作一个自动点击器,我需要自定义它以仅在按住左键单击时才单击
- C 例外 - 每个库或自定义一个