如何在C ++和Qt中连接信号和插槽,并允许变量传递到被调用的插槽

时间:2014-11-20 19:54:55

标签: c++ qt

我在Qt中创建了一个按钮,可以完成一个动作。

该类在我的browser.h文件中定义如下:

class MyButtonGroup: public QButtonGroup
{
    Q_OBJECT
    public:
        explicit MyButtonGroup(USBDevice dev, QWidget* parent = 0);
        ~ MyButtonGroup(){};
        USBDevice MyDevice;

    public slots:
        //Slot that is called when one of buttons in QButtonGroup is clicked
        void buttonClick(QAbstractButton* button);
    private:
};

在我的browser.cpp中,我已经将MyButtonGroupClick定义如下:

MyButtonGroup::MyButtonGroup(USBDevice dev, QWidget *parent)
{
    this->setParent(parent);
    this->MyDevice = dev;
    connect(this ,     SIGNAL(buttonClicked(QAbstractButton*)),this,SLOT(buttonClick(QAbstractButton*)));
}

和buttonClick:

void MyButtonGroup::buttonClick(QAbstractButton *button)
{
    if (button->text() == "Create Folder") {
        this->MyDevice.CreateNewFolder(this->MyDevice.device_id, "toto", 0, this->MyDevice.device_id->storage->id);
    }
}

该类设置为主浏览器小部件应用程序:

....
QPushButton* CreateFolderButton = new QPushButton("Create Folder", centralWidget);
CreateFolderButton->setFixedSize(100,20);
QVBoxLayout* Layout = new QVBoxLayout(centralWidget);
Layout->addWidget(CreateFolderButton);

....
MyButtonGroup* group = new MyButtonGroup(MyDevice, centralWidget);
group->addButton(CreateFolderButton);
....

这是我第一次玩Qt,而且与C ++差不多。

问题在于,在定义MyButtonGroup :: MyButtonGroup时,我提供“dev”作为参数,因为当我完成动作“buttonClick”时我需要“dev”数据

我认为当我进行连接时,我曾经通过这种方式传递“dev”的方式是不正确的,当api buttonClick调用时,this-> MyDevice为null并且使应用程序崩溃。

如何确保我可以检索

中的参数
MyButtonGroup::MyButtonGroup(USBDevice dev, QWidget *parent)

可以在

中访问
MyButtonGroup::buttonClick

感谢您的帮助。

0 个答案:

没有答案