部分程序如下所示:
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 )));
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
其它槽都没有问题 应该不会吧
#5
这个之前也试过 但是不行
#6
我试一下
#1
应该是connect有问题,SIGNAL里的信号和SLOT响应函数都只用写参数类型,不用写参数名。去掉参数名试试
connect(tree,SIGNAL(QTreeWidget::itemClicked(QTreeWidgetItem *, int )),this,SLOT(setStackedWin(QTreeWidgetItem *, int )));
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
其它槽都没有问题 应该不会吧
#5
这个之前也试过 但是不行
#6
我试一下