• 7401阅读
  • 3回复

QListView双击无法引起其槽调用? [复制链接]

上一主题 下一主题
离线ch19860304
 
只看楼主 倒序阅读 楼主  发表于: 2009-06-11
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
        我已经实现了显示指定目录下的所有文件和文件夹,我还想实现一个功能:双击某个文件夹,打开它并显示该文件夹中的内容。双击某个文件,用文件编译器打开该文件。所以我自己写了个类,让它继承QMainWindow(为了加工具按钮的方便),给它写一个槽函数open,让它连接到QListView类的doubleClicked信号上。但现在居然connect失败了,它提示:No such slot QMainWindow::open(QModelIndex)  ??这个什么意思呀,我定义了这个槽呀!大家帮我看看,这是什么原因呀?我的程序有什么问题吗?
#include <QtGui>
#include <QApplication>

class Imagewindow :public QMainWindow
{
    public:
        Imagewindow() ;

    public slots:
        void open(const QModelIndex &index ) ;
        
    private:
        QDirModel *model ;
        QListView *list ;
        QDir imageDir ;
        QStringList fileList ;
        
};

Imagewindow::Imagewindow()
{

    model = new QDirModel ;
    list = new QListView(this) ;
    bool yes_no ;

    list->setViewMode(QListView::IconMode);
    list->setModel(model);
    list->setRootIndex(model->index("/mnt/hgfs/share_file/qt_dir",0));

    setCentralWidget(list);
    yes_no = connect(list,SIGNAL(doubleClicked(const QModelIndex &) ),this,SLOT(open(const QModelIndex &))) ;
    qDebug("connect? %d",yes_no);   //这个值居然是0

}

void Imagewindow::open(const QModelIndex &index)
{
     qDebug("enter open()!");
     if(model->isDir(index))      //如果双击的是目录的话
     {
         list->setRootIndex(index);  //显示该目录
        setCentralWidget(list);
     }
    else
    {
        list->openPersistentEditor(index);  //用编辑器编辑该文件
    }

}
离线wvins
只看该作者 1楼 发表于: 2009-06-12
类定义少了Q_OBJECT

另外,你什么时候emit呢?
离线duduqq

只看该作者 2楼 发表于: 2009-06-12
类定义少了Q_OBJECT,这个信号会自己emit的,不需要自己调用。
还有把出错的信息贴出来看看
离线foxyz

只看该作者 3楼 发表于: 2009-06-12
楼上都说了.你有自定义的slot时候请加上宏Q_OBJECT
快速回复
限100 字节
 
上一个 下一个