• 5882阅读
  • 7回复

定义信号出错了,帮忙解决啊 [复制链接]

上一主题 下一主题
离线daizb05
 
只看楼主 倒序阅读 楼主  发表于: 2009-06-03
我定义了一个signal: void isClicked(QModelIndex index),编译时却出现了如下的错误
1>moc_directoryviewer.obj : error LNK2005: "protected: void __thiscall DirectoryViewer::isSelected(class QModelIndex)" (?isSelected@DirectoryViewer@@IAEXVQModelIndex@@@Z) 已经在 directoryviewer.obj 中定义
谁知道这是怎么回事啊
离线wader
只看该作者 1楼 发表于: 2009-06-03
方便的话,把代码贴出来
离线daizb05
只看该作者 2楼 发表于: 2009-06-03
/*******************directoryviewer.h*******************/

#ifndef DIRECTORYVIEWER_H
#define DIRECTORYVIEWER_H

#include <QDialog>
#include <QTreeView>
//#include "mainwindow.h"
//#include <QMouseEvent>

//class QDialogButtonBox;
class QDirModel;
class QTreeView;
//class MainWindow;
//class QMouseEvent;

class DirectoryViewer : public QTreeView
{
    Q_OBJECT

public:
    DirectoryViewer(QWidget *parent = 0);

//private slots:
  /*  void createDirectory();*/
    //void remove();
    //void mousePressEvent(QMouseEvent *event);
public slots:
signals:
    //void explains();
    void isClicked(QModelIndex index);

private:
    QTreeView *treeView;
    QDirModel *model;
   // QDialogButtonBox *buttonBox;
};

#endif
离线daizb05
只看该作者 3楼 发表于: 2009-06-03
/*************directoryViewer.cpp*********************/


#ifndef DIRECTORYVIEWER_H
#define DIRECTORYVIEWER_H

#include <QDialog>
#include <QTreeView>
//#include "mainwindow.h"
//#include <QMouseEvent>

//class QDialogButtonBox;
class QDirModel;
class QTreeView;
//class MainWindow;
//class QMouseEvent;

class DirectoryViewer : public QTreeView
{
    Q_OBJECT

public:
    DirectoryViewer(QWidget *parent = 0);

//private slots:
  /*  void createDirectory();*/
    //void remove();
    //void mousePressEvent(QMouseEvent *event);
public slots:
signals:
    //void explains();
    void isClicked(QModelIndex index);

private:
    QTreeView *treeView;
    QDirModel *model;
   // QDialogButtonBox *buttonBox;
};

#endif
离线daizb05
只看该作者 4楼 发表于: 2009-06-03
/*************directoryViewer.cpp*********************/

#include <QtGui>

#include "directoryviewer.h"

DirectoryViewer::DirectoryViewer(QWidget *parent)
    : QTreeView(parent)
{
    model = new QDirModel;
    model->setReadOnly(false);
    model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);

    treeView = new QTreeView;
    this->setModel(model);
    this->header()->setStretchLastSection(true);
    this->header()->setSortIndicator(0, Qt::AscendingOrder);
    this->header()->setSortIndicatorShown(true);
    this->header()->setClickable(true);

    QModelIndex index = model->index(QDir::homePath());
    this->expand(index);
    this->scrollTo(index);
    this->resizeColumnToContents(0);

    //connect(index,SIGNAL(clicked),)
/*
    buttonBox = new QDialogButtonBox(Qt::Horizontal);
    QPushButton *mkdirButton = buttonBox->addButton(
            tr("&Create Directory..."), QDialogButtonBox::ActionRole);
    QPushButton *removeButton = buttonBox->addButton(tr("&Remove"),
            QDialogButtonBox::ActionRole);
    buttonBox->addButton(tr("&Quit"), QDialogButtonBox::AcceptRole);

    connect(mkdirButton, SIGNAL(clicked()),
            this, SLOT(createDirectory()));
    connect(removeButton, SIGNAL(clicked()), this, SLOT(remove()));
    connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
*/
   // QVBoxLayout *mainLayout = new QVBoxLayout;
    //mainLayout->addWidget(treeView);
    //mainLayout->addWidget(buttonBox);
    //setLayout(mainLayout);

    //setWindowTitle(tr("Directory Viewer"));
}
/*
void DirectoryViewer::createDirectory()
{
    QModelIndex index = treeView->currentIndex();
    if (!index.isValid())
        return;

    QString dirName = QInputDialog::getText(this,
                              tr("Create Directory"),
                              tr("Directory name"));
    if (!dirName.isEmpty()) {
        if (!model->mkdir(index, dirName).isValid())
            QMessageBox::information(this, tr("Create Directory"),
                    tr("Failed to create the directory"));
    }
}

void DirectoryViewer::remove()
{
    QModelIndex index = treeView->currentIndex();
    if (!index.isValid())
        return;

    bool ok;
    if (model->fileInfo(index).isDir()) {
        ok = model->rmdir(index);
    } else {
        ok = model->remove(index);
    }
    if (!ok)
        QMessageBox::information(this, tr("Remove"),
                tr("Failed to remove %1").arg(model->fileName(index)));
}
*/
/*
void DirectoryViewer::mousePressEvent(QMouseEvent *event)
{
    bool ok;
    if (event->button() == Qt::LeftButton) {
        QModelIndex index = this->currentIndex();
        if (model->fileInfo(index).isDir()) {
            this->expand(index);
            ok = true;
        } else {
            model->remove(index);
            ok = true;
        }
        if (!ok)
            QMessageBox::information(this, tr("Remove"),
            tr("Failed to remove %1").arg(model->fileName(index)));            
    } else {
        QTreeView::mousePressEvent(event);
    }
    
    //QTreeView::mousePressEvent(event);
}
*/
void DirectoryViewer::isClicked(QModelIndex index)
{
    index = this->currentIndex();    
}
离线daizb05
只看该作者 5楼 发表于: 2009-06-03
我搞错了,谁能告诉我自定义信号怎么定义啊?
~我真菜
离线wader
只看该作者 6楼 发表于: 2009-06-03
  1. void DirectoryViewer::isClicked(QModelIndex index)
  2. {
  3.     index = this->currentIndex();    
  4. }

你把源文件中的这段代码删掉,然后再试
离线yang_huafeng

只看该作者 7楼 发表于: 2009-06-03
信号是不需要实现的


声明信号:
signals:
    void isClicked(QModelIndex *index);  //用指针

.cpp中
mousePressEvent中用emit isClicked(&index);
QT使用中...
快速回复
限100 字节
 
上一个 下一个