I was able to resolve the segmentation faults, but now get the following messages while running
Code:
Object::connect: No such slot Mainwindow::displayinfo(node) in entrytree2.cpp:167
Object::connect: No such slot Mainwindow::adjustroot(newbutton) in entrytree2.cpp:168
Object::connect: No such slot Mainwindow::displaychildren(node->parent) in entrytree2.cpp:169
Object::connect: No such slot Mainwindow::displayinfo(node->parent) in entrytree2.cpp:170
Object::connect: No such slot Mainwindow::adjustroot(node->parent) in entrytree2.cpp:171
Object::connect: No such slot Mainwindow::displaychildren(node) in entrytree2.cpp:166
I have defined the slots as part of Mainwindow class. What could be the reason?
Here is my present code:
Code:
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <cstdlib>
#include <sstream>
#include <QtGui>
using namespace std;
char *stringtoarray(string);
class treenode
{
public:
string name;
double efficiency;
long noofflops;
unsigned int level;
treenode *parent;
vector <treenode *> children;
void createnode(int h, treenode *r)
{
level=h;
parent=r;
}
void insertchild(treenode *c)
{
children.push_back (c);
}
void initdata(string &e, double f, long g)
{
name=e;
efficiency=f;
noofflops=g;
}
treenode* traversal(void)
{
static vector <treenode*>::size_type p=0;
if(p<children.size())
{
return(children[p]);
++p;
}
else
{
p=0;
return NULL;
}
}
};
treenode *root=NULL;
treenode *curr=NULL;
class Mainwindow : public QDialog, public treenode
{
Q_OBJECT
public:
Mainwindow();
void createbutton(treenode * node);
protected:
void closeevent(QCloseEvent *event);
private slots:
void adjustroot(QPushButton *button);
void displayinfo(treenode *node);
void displaychildren(treenode *node);
private:
QLabel *namelabel;
QLabel *efflabel;
QLabel *flopslabel;
QTextEdit *namefield;
QTextEdit *efffield;
QTextEdit *flopsfield;
QHBoxLayout *topleftlayout;
QHBoxLayout *bottomleftlayout;
QVBoxLayout *leftlayout;
QVBoxLayout *rightlayout;
QHBoxLayout *mainlayout;
QScrollArea *scrollbox;
QWidget *scrollwidget;
QHBoxLayout *scrollboxlayout;
QRect Rect;
float factor;
};
Mainwindow::Mainwindow(void)
{
topleftlayout=new QHBoxLayout;
bottomleftlayout=new QHBoxLayout;
leftlayout=new QVBoxLayout;
rightlayout=new QVBoxLayout;
mainlayout=new QHBoxLayout;
namefield=new QTextEdit;
efffield=new QTextEdit;
flopsfield=new QTextEdit;
treenode *tempnode;
tempnode=root->traversal();
scrollbox=new QScrollArea;
scrollbox->setWidgetResizable(true);
bottomleftlayout->addWidget(scrollbox);
scrollbox->setFrameShape(QFrame::NoFrame);
scrollwidget=new QWidget();
scrollboxlayout=new QHBoxLayout(scrollwidget);
scrollbox->setWidget(scrollwidget);
scrollbox->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollboxlayout->setAlignment(Qt::AlignLeft);
scrollboxlayout->setSizeConstraint(QLayout::SetMinimumSize);
while(tempnode!=NULL)
{
createbutton(tempnode);
tempnode=root->traversal();
}
Rect=QApplication::desktop()->screenGeometry();
factor=(float)(Rect.width()/Rect.height());
setMaximumSize(Rect.width()*0.7/factor, Rect.height()*0.4/factor);
leftlayout->addLayout(topleftlayout);
leftlayout->addLayout(bottomleftlayout);
mainlayout->addLayout(leftlayout);
mainlayout->addLayout(rightlayout);
}
void Mainwindow::createbutton(treenode *node)
{
QPushButton *newbutton =new QPushButton;
newbutton->setDefault(false);
newbutton->setEnabled(true);
if(node==root)
{
topleftlayout->addWidget(newbutton);
}
else
{
scrollboxlayout->addWidget(newbutton);
}
QObject::connect(newbutton, SIGNAL(pressed()), this, SLOT(displaychildren(node)));
QObject::connect(newbutton, SIGNAL(pressed()), this, SLOT(displayinfo(node)));
QObject::connect(newbutton, SIGNAL(pressed()), this, SLOT(adjustroot(newbutton)));
QObject::connect(newbutton, SIGNAL(released()), this, SLOT(displaychildren(node->parent)));
QObject::connect(newbutton, SIGNAL(released()), this, SLOT(displayinfo(node->parent)));
QObject::connect(newbutton, SIGNAL(released()), this, SLOT(adjustroot(node->parent)));
}
void Mainwindow::displaychildren(treenode *node)
{
treenode *tempnod;
tempnod=node->traversal();
scrollbox->setWidgetResizable(true);
bottomleftlayout->addWidget(scrollbox);
scrollbox->setFrameShape(QFrame::NoFrame);
scrollbox->setWidget(scrollwidget);
scrollbox->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollboxlayout->setAlignment(Qt::AlignLeft);
scrollboxlayout->setSizeConstraint(QLayout::SetMinimumSize);
while(tempnod!=NULL)
{
createbutton(tempnod);
tempnod=root->traversal();
}
Rect=QApplication::desktop()->screenGeometry();
factor=(float)(Rect.width()/Rect.height());
setMaximumSize(Rect.width()*0.7/factor, Rect.height()*0.4/factor);
leftlayout->addLayout(topleftlayout);
leftlayout->addLayout(bottomleftlayout);
mainlayout->addLayout(leftlayout);
mainlayout->addLayout(rightlayout);
}
void Mainwindow::displayinfo(treenode *node)
{
namefield->insertPlainText(stringtoarray(node->name));
namefield->setDocumentTitle("Name:");
rightlayout->addWidget(namefield);
stringstream ss(stringstream::in|stringstream::out);
ss<<node->efficiency;
string s=ss.str();
QString q1(s.c_str());
efffield->insertPlainText(q1);
efffield->setDocumentTitle("Efficiency:");
rightlayout->addWidget(efffield);
s.clear();
ss.str("");
ss<<node->noofflops;
s=ss.str();
QString q2(s.c_str());
flopsfield->insertPlainText(q2);
flopsfield->setDocumentTitle("Flops:");
rightlayout->addWidget(flopsfield);
}
void Mainwindow::adjustroot(QPushButton *button)
{
topleftlayout->addWidget(button);
}
/*void treenode::createnode(leveldata *a, int h, treenode *r)
{
data=a;
level=h;
}
void treenode::insertchild(treenode *c)
{
children.push_back (c);
}
void treenode::initdata(char *e, double f, long g,)
{
name=e;
efficiency=f;
noofflops=g;
}*/
int main(int argc, char *argv[])
{
size_t spaces=0;
//size_t nextspaces=0;
size_t pos=0;
string temp;
string temp2;
string levname;
double eff;
long flops;
int flag=1;
ifstream myfile("sample.txt");
if(getline(myfile, temp))
{
flag=1;
}
else
{
flag=0;
return 1;
}
do
{
//Separating the data from the line read to initialise the data members of the object
for(; temp[pos]!=' '; ++pos)
{
temp2.push_back(temp[pos]);
}
++pos;
levname=temp2;
//size_t j=levname.length();
char c;
size_t p=0;
c=levname[p];
temp2.clear();
for(; temp[pos]!=' '; ++pos)
{
temp2.push_back(temp[pos]);
}
++pos;
eff=atof(stringtoarray(temp2));
temp2.clear();
for(; pos<temp.length(); ++pos)
{
temp2.push_back(temp[pos]);
}
++pos;
flops=atol(stringtoarray(temp2));
temp2.clear();
//Creating a new node
treenode *newnode=new treenode;
newnode->initdata(levname, eff, flops);
newnode->createnode((unsigned int)spaces, curr);
if((!newnode->level)||(spaces==0))
{
root=newnode;
curr=newnode;
}
//Associating the child to the parent
curr->insertchild(newnode);
//Updating the curr pointer to point to the parent for next node to be created
if (getline(myfile, temp))
{
flag=1;
}
else
{
flag=0;
break;
}
spaces=0;
while(temp[spaces]==' ')
{
++spaces;
}
if(spaces>newnode->level)
{
curr=newnode;
}
else if(spaces<newnode->level)
{
treenode *temporary=newnode;
while(!(temporary->level<spaces))
{
temporary=temporary->parent;
}
curr=temporary;
}
pos=spaces;
}while(flag==1);
QApplication app(argc, argv);
Mainwindow *mywindow=new Mainwindow;
mywindow->show();
return app.exec();
}
char *stringtoarray(string s)
{
char *a=new char[s.size()+1];
memcpy(a, s.c_str(), s.size());
a[s.size()]='\0';
return a;
}
#include "entrytree2.moc"