!!!急treewidget和stackedwidget关联,为什么没有进入槽函数??

时间:2022-07-15 12:38:46
在做treewidget和stackedwidget关联,但是为什么没有进入槽函数??
部分程序如下所示:

  dev = new QTreeWidgetItem(tree, QStringList(QString(tr("管理设备")))); 
QTreeWidgetItem *encoder1 = new QTreeWidgetItem(dev, QStringList(QString(tr("主编码器")))); 
dev->addChild(encoder1); 
encoder1->setData(0, Qt::UserRole + 1,QVariant(1));

QTreeWidgetItem *encoder2 = new QTreeWidgetItem(dev, QStringList(QString(tr("备编码器")))); 
dev->addChild(encoder2);
encoder2->setData(0, Qt::UserRole + 1,QVariant(2));


connect(tree,SIGNAL(QTreeWidget::itemClicked(QTreeWidgetItem *item, int column)),this,SLOT(setStackedWin(QTreeWidgetItem *item, int column)));

槽:
void Star::setStackedWin(QTreeWidgetItem *item, int column)
{
stackedwindow->setCurrentIndex((item->data(column,Qt::UserRole + 1)).toInt());     
        //做测试用,但一直未变红,感觉没有进入槽函数
        encoder1->setBackground(column,QBrush(QColor(Qt::red)));
}

希望大家帮忙,谢谢

6 个解决方案

#1


应该是connect有问题,SIGNAL里的信号和SLOT响应函数都只用写参数类型,不用写参数名。去掉参数名试试
connect(tree,SIGNAL(QTreeWidget::itemClicked(QTreeWidgetItem *, int    )),this,SLOT(setStackedWin(QTreeWidgetItem *, int )));

#2


connect有返回值的,加个断言试试是不是没有connect成功。。

bool bRet = connect(tree, SIGNAL(xxx()), this, SLOT(xxx());
assert(bRet);

#3


可能是你没有用Q_OBJECT,并且没有moc编译成相应的文件,信号槽自然就不生效啦

#4


引用 3 楼 liuyuanmei 的回复:
可能是你没有用Q_OBJECT,并且没有moc编译成相应的文件,信号槽自然就不生效啦

其它槽都没有问题 应该不会吧  
      

#5


引用 1 楼 hai200501019 的回复:
应该是connect有问题,SIGNAL里的信号和SLOT响应函数都只用写参数类型,不用写参数名。去掉参数名试试
connect(tree,SIGNAL(QTreeWidget::itemClicked(QTreeWidgetItem *, int    )),this,SLOT(setStackedWin(QTreeWidgetItem *, int )));
   ……

这个之前也试过 但是不行

#6


引用 2 楼 HBXStone99 的回复:
connect有返回值的,加个断言试试是不是没有connect成功。。

C/C++ code?12bool bRet = connect(tree, SIGNAL(xxx()), this, SLOT(xxx());assert(bRet);

我试一下  

#1


应该是connect有问题,SIGNAL里的信号和SLOT响应函数都只用写参数类型,不用写参数名。去掉参数名试试
connect(tree,SIGNAL(QTreeWidget::itemClicked(QTreeWidgetItem *, int    )),this,SLOT(setStackedWin(QTreeWidgetItem *, int )));

#2


connect有返回值的,加个断言试试是不是没有connect成功。。

bool bRet = connect(tree, SIGNAL(xxx()), this, SLOT(xxx());
assert(bRet);

#3


可能是你没有用Q_OBJECT,并且没有moc编译成相应的文件,信号槽自然就不生效啦

#4


引用 3 楼 liuyuanmei 的回复:
可能是你没有用Q_OBJECT,并且没有moc编译成相应的文件,信号槽自然就不生效啦

其它槽都没有问题 应该不会吧  
      

#5


引用 1 楼 hai200501019 的回复:
应该是connect有问题,SIGNAL里的信号和SLOT响应函数都只用写参数类型,不用写参数名。去掉参数名试试
connect(tree,SIGNAL(QTreeWidget::itemClicked(QTreeWidgetItem *, int    )),this,SLOT(setStackedWin(QTreeWidgetItem *, int )));
   ……

这个之前也试过 但是不行

#6


引用 2 楼 HBXStone99 的回复:
connect有返回值的,加个断言试试是不是没有connect成功。。

C/C++ code?12bool bRet = connect(tree, SIGNAL(xxx()), this, SLOT(xxx());assert(bRet);

我试一下