- 我创建了一个继承自
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/