当前位置:编程学习 > wap >>

treewidget怎么与stackedWidget交互???

怎么重写函数使点击treewidget上不同的项在右侧stackedwidget中弹出不同的界面出来???
我只会listWidget与stackedWidget交互!!! treeWidget stackedwi --------------------编程问答-------------------- 信号:
void QTreeWidget::itemChanged ( QTreeWidgetItem * item, int column ) --------------------编程问答-------------------- connect( treeWidget, SIGNAL( itemClicked( QTreeWidgetItem *, int ) ), stackedwidget, SLOT( slotCurrentWidget( QTreeWidgetItem *, int  ) ) );

自定义一个槽函数
void slotCurrentWidget( QTreeWidgetItem *item, int column )
{
   //判断是那个item
   ....
   stackedwidget->setCurrentIndex( n );
} --------------------编程问答--------------------
引用 2 楼 liuyuanmei 的回复:
connect( treeWidget, SIGNAL( itemClicked( QTreeWidgetItem *, int ) ), stackedwidget, SLOT( slotCurrentWidget( QTreeWidgetItem *, int  ) ) );

自定义一个槽函数
void slotCurrentWidget( QTreeWidg……
问题是我也不知道怎么判断当前选中的是哪个Item???关键就是如何区别当前选中的item
--------------------编程问答--------------------
引用 1 楼 heksn 的回复:
信号:
void QTreeWidget::itemChanged ( QTreeWidgetItem * item, int column )
如何判断当前选中的item??? --------------------编程问答-------------------- 这很容易,有两种方法
1、继承QTreeWidgetItem,在里面设一个公有的成员属性,添加item的时候,就给这个item的公有属性赋予一个值,代表是什么类型的item
 class CSecurityListWidgetItem : public QListWidgetItem
    {
    public:
        CSecurityListWidgetItem();
        ~CSecurityListWidgetItem();        
        
    public:
        boost::uuids::uuid m_resourceId;
        EResourceType    m_type;
    };
我以前是这样写的
2、给QTreeWidgetItem设置一个值,调用setData ( int column, int role, const QVariant & value )这个函数,通过 data ( int column, int role ) 取出这个值已确定是什么item --------------------编程问答-------------------- 在做treewidget和stackedwidget关联,但是为什么没有进入槽函数??
部分程序如下所示:

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

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

//这里有什么不对吗
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());     
        //做测试用,但一直未变红,没有进入槽函数
        en1->setBackground(column,QBrush(QColor(Qt::red)));
}
这样连接有什么不妥吗  还是槽函数有问题  多谢了 --------------------编程问答--------------------
引用 5 楼 liuyuanmei 的回复:
这很容易,有两种方法
1、继承QTreeWidgetItem,在里面设一个公有的成员属性,添加item的时候,就给这个item的公有属性赋予一个值,代表是什么类型的item
 class CSecurityListWidgetItem : public QListWidgetItem
    {
    public:
        CSecurityList……


我如上边那样编写程序,为什么不可以呢,没有进入槽函数 --------------------编程问答--------------------
引用 5 楼 liuyuanmei 的回复:
这很容易,有两种方法
1、继承QTreeWidgetItem,在里面设一个公有的成员属性,添加item的时候,就给这个item的公有属性赋予一个值,代表是什么类型的item
 class CSecurityListWidgetItem : public QListWidgetItem
    {
    public:
        CSecurityList……


在connect里的信号与槽函数的参数只写类型,不要写变量名。 --------------------编程问答-------------------- 槽和信号里的参数只写参数类型,不要参数名称
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,