2012-01-04 16 views
5

Kimin uygulama şudur FindAndReplaceBar denilen bir sınıf vardır:Birden çok tanım hatası: dosyamda biri ve moc dosyasında bir tane var.

#include "FindAndReplaceBar.h" 
#include <QLabel> 
#include <QPushButton> 
#include <QGridLayout> 
#include <QTextDocument> 
#include <QLineEdit> 

FindAndReplaceBar::FindAndReplaceBar(QObject *parent) : 
    QToolBar(NULL) 
{ 
    lblFind   = new QLabel("Find: ",this); 
    lblReplace  = new QLabel("Replace",this); 

    ledtFind  = new QLineEdit(this); 
    ledtReplace  = new QLineEdit(this); 

    QPixmap next(":/res/resources/next.gif"); 
    QPixmap previous(":/res/resources/previous.gif"); 
    QPixmap close(":/res/resources/close_icon.gif"); 

    btnFindNext  = new QPushButton(QIcon(next),"",this); 
    btnFindPrevious = new QPushButton(QIcon(previous),"",this); 
    btnClose  = new QPushButton(QIcon(close),"",this); 

    btnReplace  = new QPushButton("Replace",this); 
    btnReplaceAll = new QPushButton("Replace All",this); 

    btnFindNext->setFlat(true); 
    btnFindPrevious->setFlat(true); 
    btnClose->setFlat(true); 
    btnReplace->setFlat(true); 
    btnReplaceAll->setFlat(true); 

    lytFindAndReplaceBar  = new QGridLayout(this); 

    lytFindAndReplaceBar->addWidget(lblFind,0,0,1,1); 
    lytFindAndReplaceBar->addWidget(ledtFind,0,1,1,2); 
    lytFindAndReplaceBar->addWidget(btnFindPrevious,0,3,1,1); 
    lytFindAndReplaceBar->addWidget(btnFindNext,0,4,1,1); 

    lytFindAndReplaceBar->addWidget(lblReplace,0,5,1,1); 
    lytFindAndReplaceBar->addWidget(ledtReplace,0,6,1,2); 
    lytFindAndReplaceBar->addWidget(btnReplace,0,8,1,1); 
    lytFindAndReplaceBar->addWidget(btnReplaceAll,0,9,1,1); 

    this->setLayout(lytFindAndReplaceBar); 

    connect(btnFindNext,SIGNAL(clicked()),this,SIGNAL(findNext())); 
    connect(btnFindPrevious,SIGNAL(pressed()),this,SIGNAL(findPrevious())); 
    connect(btnClose,SIGNAL(pressed()),this,SLOT(close())); 
    connect(btnReplace,SIGNAL(pressed()),this,SIGNAL(replace())); 
    connect(btnReplaceAll,SIGNAL(pressed()),this,SIGNAL(replaceAll())); 

    this->setStyleSheet("QToolBar{background: qlineargradient(x1:0,x2:0,y1:0,y2:1,stop:0 #fffaf0,stop:0.3 #fdf5e6)} QLineEdit{border-radius:4px;padding:2px;}"); 
} 

void FindAndReplaceBar::findNext() 
{ 
    emit find(0); 
} 

void FindAndReplaceBar::findPrevious() 
{ 
    emit find(QTextDocument::FindBackward); 
} 

void FindAndReplaceBar::replace() 
{ 
    emit replace(false); 
} 

void FindAndReplaceBar::replaceAll() 
{ 
    emit replace(true); 
} 

QString FindAndReplaceBar::searchTerm() 
{ 
    return this->ledtFind->text(); 
} 

QString FindAndReplaceBar::replaceTerm() 
{ 
    return this->ledtReplace->text(); 
} 

void FindAndReplaceBar::setSearchFieldText(const QString & searchFieldText) 
{ 
    this->ledtFind->setText(searchFieldText); 
} 

void FindAndReplaceBar::setReplaceFieldText(const QString & replaceFieldText) 
{ 
    this->ledtReplace->setText(replaceFieldText); 
} 

Ben fonksiyonların birden tanımların sorunları olsun programı çalıştırdığınızda:

findNext(), findPrevious(), replace(), replaceAll().

Diğer tanım moc_FindAndReplaceBar.cpp dosyasında yapılmıştır. Sorunun ne olduğundan emin değilim, nasıl düzelteceğimi bilmiyorum! Herhangi bir yardım için minnettar olurum, teşekkürler! biz başlık dosyasına bakarsanız

+0

deneyin Qt Dokümanlar

tam, temiz bir yapı yapmak. Bazen işler senkronize olur. – Mat

+0

Yaptım. Moc_FindAndReplaceBar'ın kaldırıldığına ve farklı bir adla kaydetmek istediğime dair bir iletişim var. Yeniden adlandırmanın daha büyük sorunlar yaratabileceğini düşündüm, bu yüzden 'Kaydet'e tıkladım' –

+0

Yapım sisteminizin kafası karışmış gibi görünüyor. Moc dosyalarını yeniden üretilecek şekilde kaldırın. – Mat

cevap

11

senin bağlantı aramaları (sinyal sinyali) bakılırsa, farz, size sinyaller uygulamak gerekir findNext(), findPrevious(), replace(), replaceAll()olarak sinyaller ilan etmesine karşın olacaktır - onlar sadece beyan edilmesi gerekiyor başlıkta. signals

Signals are automatically generated by the moc and must not be implemented in the .cpp file. They can never have return types (i.e. use void).

+0

Tam olarak ne yaptım. Teşekkürler, ben buradan alabilirim :) –

+0

Sadece bu da içine koştum. Önce sinyalleri bildirdiğinizde kolay bir hata yapın, ardından kopyalayıp başka bir sınıfa yapıştırın ve sinyalleri yuvalara değiştirmeyi unutmayın :) – anr78

İlgili konular