问题描述
我有一个名为FindAndReplaceBar的类,其实现是这样的:
I have a class called FindAndReplaceBar, whose implementation is this:
#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);
}
运行程序时,我遇到了多个函数定义的问题:
When I run the program I get problems of multiple definitions of the functions:
findNext()
,findPrevious()
,replace()
,replaceAll()
.
另一个定义在moc_FindAndReplaceBar.cpp文件中进行.我不确定是什么问题,所以我不知道如何解决!我真的很感谢您的帮助,谢谢!
The other definition is made in the moc_FindAndReplaceBar.cpp file.I'm not sure what the problem so I don't know how to fix it! I would really appreciate any help, thanks!
推荐答案
从您的连接调用(信号到信号)判断,假设我们查看您的头文件,则您将findNext(), findPrevious(), replace(), replaceAll()
声明为信号,但是您不能实现信号-只需在标头中声明它们即可.
Judging by your connect calls (signal to signal), I assume if we look at your header file, you will have declared findNext(), findPrevious(), replace(), replaceAll()
as signals, but you must not implement signals - they just need to be declared in the header.
从信号
这篇关于多个定义错误:一个在我的文件中,一个在moc文件中.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!