如何在Qt中将静态函数称为SLOT()?

时间:2013-05-31 14:18:26

标签: qt qt-creator

我在ROS节点中使用Qt代码。我在班上宣布了一个静态函数setLabel()。此功能的作用是将图像放入QLabel。现在,我想在使用信号/插槽连接单击按钮时调用此功能。请告诉我应该用什么代替问号。

class ImageDisplay: public QObject
{

Q_OBJECT    

    public slots:
    void setLabel();    

    public: 
    static void imageCallback( ); 

};


void ImageDisplay::setLabel()
{

        QLabel* selectLabel= new QLabel();
        selectLabel->setText("hi");     
        selectLabel->show();
}    

void imageDisplay::imageCallBack()
{
    ImageDisplay obj;

    QObject::connect(selectButton, SIGNAL(clicked()),&obj, SLOT(setLabel()));       
}

2 个答案:

答案 0 :(得分:2)

你试试这个,

QObject::connect(selectButton, SIGNAL(clicked()), listenerObj, SLOT(setLabel()));

listenerObj是您声明插槽的类的对象指针。如果您无法在侦听器中使用“this”,则声明一个包含函数setLabel的公共插槽的活动对象并连接插槽。

将setLabel()声明为新类头文件中的公共插槽

class SomeClass
{
public slots:
void setLabel();
}

然后使用父指针,您可以在界面

中显示标签

我认为其中一些可以帮到你。

答案 1 :(得分:0)

首先,摆脱全局变量。你为什么需要它?全局变量差异很大,应该避免 其次,将Q_OBJECT宏添加到myQtClass并执行qmake 第三,您的setLabel()广告位不应为private,如果您想在public之外使用,请将其设为myQtClass