c++ - QConnect 在 Qt Creator 的 Combobox 上找不到这样的插槽

标签 c++ qt

  • 我创建了一个继承自QWidget的窗口
  • 我为该窗口设置了网格布局
  • 我在该窗口内的公共(public)插槽中创建了一个名为 handleHeroChange(int index) 的函数
  • 我添加了一个 Qcombobox 来调用函数 handleHeroChange(int index)

Qtcreator 不断告诉:

**QObject::connect: No such slot QWidget::handleHeroChange(int) in ../Testing/Window.cpp:92**

我做错了什么?

代码:

//Window.h
    class Window : public QWidget
    {
        QGraphicsPixmapItem* avatar;
        QGraphicsTextItem* heroNameItem;
        QGraphicsTextItem* heroStrItem;
        QGraphicsTextItem* heroDexItem;
        QGraphicsTextItem* herointelItem;
      public:
        Window(QWidget *parent = 0);
      public slots:
        void handleHeroChange(int);
    };

//Window.cpp
    Window::Window(QWidget *parent)
        : QWidget(parent)
    {

       QGridLayout *grid = new QGridLayout(this);
       QComboBox *comboHeroClass = new QComboBox();
        comboHeroClass->addItem("Witcher");
        comboHeroClass->addItem("Maurander");
        comboHeroClass->setCurrentIndex(1);
        grid->addWidget(comboHeroClass, 2,3,1,1);
        QComboBox::connect(comboHeroClass, SIGNAL(currentIndexChanged(int)),this, SLOT(handleHeroChange(int)));
    }

    void Window::handleHeroChange(int index){
        QPixmap myImage;
        if(index == 0){

        }else if(index == 1){

        }
    }

最佳答案

class Window : public QWidget
{
    Q_OBJECT

将不带分号的 Q_OBJECT 宏添加到您的类中并重建您的项目。

如果没有这个宏,moc 将无法找到您的类并且不会创建您的插槽(以及其他一些东西)这就是您收到错误的原因:您看到了您的插槽但它不存在并且出现运行时错误

关于c++ - QConnect 在 Qt Creator 的 Combobox 上找不到这样的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25470635/

相关文章:

c++ - QSerialPort行为不一致,具体取决于起始波特率

c++ - 在 Qt Creator 中使用 libc++ 而不是 libstdc++

QtWebKit不安装flash播放器播放HTML5视频

c++ - QTextEdit 不显示键盘上不可用的特殊字符

qt - 将自定义命令添加到qmake中的现有目标

c++ - 我可以在不使用虚函数的情况下获得多态行为吗?

C++无效的协变返回类型与指针

c++ - 以 qreal 引用作为参数的语法

c++ - 将带有随机 char 元素的 char[] 转换为一个 int

c++ - 打破 std::for_each 循环