Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++和QT中连接信号和时隙,并允许变量传递到被调用的槽_C++_Qt - Fatal编程技术网

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

如何在C++和QT中连接信号和时隙,并允许变量传递到被调用的槽,c++,qt,C++,Qt,我在Qt中创建了一个按钮,以便能够完成一个操作 该类在my browser.h文件中定义如下: class MyButtonGroup: public QButtonGroup { Q_OBJECT public: explicit MyButtonGroup(USBDevice dev, QWidget* parent = 0); ~ MyButtonGroup(){}; USBDevice MyDevice; publ

我在Qt中创建了一个按钮,以便能够完成一个操作

该类在my 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:
};
MyButtonGroup::MyButtonGroup(USBDevice dev, QWidget *parent)
{
    this->setParent(parent);
    this->MyDevice = dev;
    connect(this ,     SIGNAL(buttonClicked(QAbstractButton*)),this,SLOT(buttonClick(QAbstractButton*)));
}
在my browser.cpp中,我定义了MyButtonGroup Click,如下所示:

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:
};
MyButtonGroup::MyButtonGroup(USBDevice dev, QWidget *parent)
{
    this->setParent(parent);
    this->MyDevice = dev;
    connect(this ,     SIGNAL(buttonClicked(QAbstractButton*)),this,SLOT(buttonClick(QAbstractButton*)));
}
然后单击按钮:

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++。p> 问题是,在定义MyButtonGroup::MyButtonGroup时,我提供了dev作为参数,因为我在完成操作buttonClick时需要dev数据

我认为当我在连接时,当api按钮单击调用this->MyDevice时,我用来传递dev的方式是不正确的,它是空的,会使应用程序崩溃

如何确保可以检索

MyButtonGroup::MyButtonGroup(USBDevice dev, QWidget *parent)
可以在中访问

MyButtonGroup::buttonClick

谢谢您的帮助。

有什么问题吗?对不起,字段错了。我更改了描述我的设备如何为空?从我看到的情况来看,它不是指针,因为您正在访问设备id。您确定不是USBDevice::CreateNewFolder成员函数崩溃吗?它崩溃是因为MyDevice字段不正确。我不确定的是如何确保MyButtongGroup::MyButtongGroup中的此->Mydevice=dev可用于此->Mydevice.CreateNewFolderthis->Mydevice.device\u id在MyButtongGroup::buttonClickDid中检查开发是否包含正确的数据?