• 5208阅读
  • 5回复

高手救命啊 [复制链接]

上一主题 下一主题
离线yuman
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-22
小弟刚开始用Qt,就遇到了一个让我很无语的问题,在VS2005下使用创建了一个Qt的工程,
其中一个类里创建了一个QListView,在connect的时候出了问题。在继承自QDialog的类的构造函数中,代码是这样的:
    resize(600, 300);
    m_ListView = new QListView(this);
    m_ListView->setGeometry(10, 10, 190, 280);
    QStringList strList;
    strList<<"1";
    strList<<"2";
    strList<<"3";
    strList<<"4";
    m_StringListModel = new QStringListModel(strList);
    m_ListView->setModel(m_StringListModel);        
    connect(m_ListView, SIGNAL(clicked(const QModelIndex &index)),
        this, SOLT(setTreeModel(const QModelIndex &index)));
    connect(m_ListView, SIGNAL(doubleClicked(const QModelIndex &index)),
        this, SLOT(setTreeModel(const QModelIndex &index)));
程序可以跑起来,而且listview也可以正常显示,但是信号和槽却不能按照我希望的相连,在vs输出栏有提示
Object::connect: No such signal QListView::clicked(QModelIndex&index)
Object::connect: No such signal QListView::doubleClicked(QModelIndex&index);
我用QPushButton的clicked()信号又可以,它的clicked信号也是从父类继承的。
这个问题出现了好几次了,而且过的时间长了有时候它又好了。
离线rqzrqh

只看该作者 1楼 发表于: 2009-10-22
没信号。提示太清楚了
clicked信号是从QAbstractItemView继承过来的,不知道为什么会没有。
该不会是你自己写了个clicked(int)的信号吧
[ 此帖被rqzrqh在2009-10-22 21:06重新编辑 ]
只看该作者 2楼 发表于: 2009-10-23
必须要加上Q_OBJECT的,是不是忘记加这个了
离线wsszlj

只看该作者 3楼 发表于: 2009-10-23
同意楼上的
离线foxyz

只看该作者 4楼 发表于: 2009-10-23
connect(m_ListView, SIGNAL(clicked(const QModelIndex &index)),
        this, SOLT(setTreeModel(const QModelIndex &index)));
    connect(m_ListView, SIGNAL(doubleClicked(const QModelIndex &index)),
        this, SLOT(setTreeModel(const QModelIndex &index)));

请改成:
connect(m_ListView, SIGNAL(clicked(const QModelIndex &)),
        this, SOLT(setTreeModel(const QModelIndex &)));
    connect(m_ListView, SIGNAL(doubleClicked(const QModelIndex &)),
        this, SLOT(setTreeModel(const QModelIndex &)));

如果你没有自己写的signal或者slots就不需要加Q_OBJECT
离线yuman
只看该作者 5楼 发表于: 2009-10-23
引用第4楼foxyz于2009-10-23 15:24发表的  :
connect(m_ListView, SIGNAL(clicked(const QModelIndex &index)),
        this, SOLT(setTreeModel(const QModelIndex &index)));
    connect(m_ListView, SIGNAL(doubleClicked(const QModelIndex &index)),
        this, SLOT(setTreeModel(const QModelIndex &index)));
.......

谢谢各位,就是foxyz网友说到的问题,原来在Qt的信号和槽连接的语句中只能写参数的类型,不能写参数的名字。
快速回复
限100 字节
 
上一个 下一个