Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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

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,我有一个从QListWidget继承的类,名为Menu,我正在尝试将这个类的信号连接到一个小部件的插槽 class Menu : QListWidget { Q_OBJECT public: Menu(Config &config, QWidget *parent = 0); ~Menu(); public slots: void itemChanged(QListWidgetItem *item); signals: void clickedIte

我有一个从QListWidget继承的类,名为
Menu
,我正在尝试将这个类的信号连接到一个小部件的插槽

class Menu : QListWidget
{
Q_OBJECT

public:
    Menu(Config &config, QWidget *parent = 0);
    ~Menu();

public slots:
    void itemChanged(QListWidgetItem *item);

signals:
    void clickedItemChanged(std::string item);

private:
    std::vector<QListWidgetItem*> items;

};

// in another widget connect the signals and slots 
connect(menu, SIGNAL(clickedItemChanged(std::string)),
        this, SLOT(menuItemChanged(std::string)));
类菜单:QListWidget
{
Q_对象
公众:
菜单(配置&配置,QWidget*parent=0);
~Menu();
公众时段:
作废项目变更(QListWidgetItem*项目);
信号:
作废clickedItemChanged(标准::字符串项);
私人:
向量项;
};
//在另一个小部件中,连接信号和插槽
连接(菜单、信号(单击编辑更改(标准::字符串)),
这个插槽(menuItemChanged(std::string));

但编译失败,表示无法将“Menu”强制转换为其私有基类“const QObject”。插槽的签名与信号的签名匹配,插槽所属的小部件类包含对
菜单的引用。问题的原因是什么?我应该如何解决

您是否将
#包含
菜单中定义的
标题纳入您调用connect的cpp文件中?
std::string
与Qt容器不同,因此复制(通常)非常昂贵,考虑更改您的信号和时隙签名以使用const引用,您为什么从<代码> QListWIDGET < /代码>中私下继承?这使得基类无法访问。使用
public
继承。@G.M.没有注意到这一点。非常感谢@伊尔贝尔杜斯明白了!