ruben.rodrigues
21st July 2010, 13:38
Hi all!
I have a program that reads messages from a machine and places the messages in a QTreeWidget as QTreeWidgetItems.
The messages have multiple properties like: ID, Text, Type etc.
when the user clicks on the message (QTreeWidgetItem) it activates a slot and according to the message flags it should set the buttons enable or disable them but it crashes!!
Header:
#ifndef MESSAGEPOPUPS_H
#define MESSAGEPOPUPS_H
#include <QtGui>
#include "ui_messagepopups.h"
#include <QTreeWidgetItem>
#include <QList>
class messagePopups : public QWidget
{
Q_OBJECT
public:
messagePopups(QWidget *parent = 0);
~messagePopups();
void set_new_message(QByteArray qba);
qint16 number_of_messages;
QTreeWidgetItem *messageText[];
private:
Ui::messagePopupsClass ui;
private slots:
void treeItemClicked(QTreeWidgetItem* test,int item);
};
#endif // MESSAGEPOPUPS_H
cpp:
#include "messagepopups.h"
#include <iostream>
using namespace std;
messagePopups::messagePopups(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
number_of_messages = 1;
}
messagePopups::~messagePopups()
{
}
void messagePopups::set_new_message(QByteArray qba)
{
double _Flags, _MessageType, Ticks;
QString _MessageText;
QString Message_type;
QDataStream data(&qba, QIODevice::ReadOnly);
data >> _Flags;
data >> _MessageText;
data >> _MessageType;
data >> Ticks;
int i = _MessageType;
switch (i){
case 0: Message_type = "mTypeFatal";
break;
case 1: Message_type = "mTypeError";
break;
case 2: Message_type = "mTypeStep";
break;
case 3: Message_type = "mTypeWarning";
break;
case 4: Message_type = "mTypeInfo";
break;
}
messageText[number_of_messages] = new QTreeWidgetItem();//ui.treeWidget->columnAt(0));
ui.treeWidget->addTopLevelItem(messageText[number_of_messages]);
QStringList HeaderLabels;
HeaderLabels << "ID" << "Message Text" << "Message ID" << "Message Type" << "Ticks" << "Task" << "Task ID";
ui.treeWidget->setHeaderLabels(HeaderLabels);
messageText[number_of_messages]->setText(0,QString::number(number_of_messages)); //Message Number
messageText[number_of_messages]->setText(1,_MessageText); //Message Text
messageText[number_of_messages]->setText(2,""); //Message ID
messageText[number_of_messages]->setText(3,Message_type); //Message Type
messageText[number_of_messages]->setText(4,QString::number(Ticks)); //Ticks
messageText[number_of_messages]->setText(5,"test4"); //Task
messageText[number_of_messages]->setText(6,"test5"); //Task ID
messageText[number_of_messages]->setText(7,QString::number(_Flags)); //Flag/mode
connect(ui.treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(treeItemClicked(QTreeWidgetItem*,int)));
number_of_messages = number_of_messages + 1;
}
void messagePopups::treeItemClicked(QTreeWidgetItem* test,int item)
{
int RowID = test->text(0).toInt();
int Flag = messageText[RowID]->text(7).toInt();
switch (Flag)
{
case 4: cout << "@4" << endl;
ui.pushButton->setEnabled(true);
ui.pushButton_2->setEnabled(false);
ui.pushButton_3->setEnabled(false);
case 5: cout << "@5" << endl;
ui.pushButton->setEnabled(true);
ui.pushButton_2->setEnabled(false);
ui.pushButton_3->setEnabled(true);
case 7: cout << "@7" << endl;
ui.pushButton->setEnabled(true);
ui.pushButton_2->setEnabled(true);
ui.pushButton_3->setEnabled(true);
}
cout << "Ended" << endl;
}
I can see where the crash happens because of the cout's. Like I see @7 when the flag is 7 but the cout << "Ended" never get executed and the program closes.
What can be wrong?
Thank in advance
I have a program that reads messages from a machine and places the messages in a QTreeWidget as QTreeWidgetItems.
The messages have multiple properties like: ID, Text, Type etc.
when the user clicks on the message (QTreeWidgetItem) it activates a slot and according to the message flags it should set the buttons enable or disable them but it crashes!!
Header:
#ifndef MESSAGEPOPUPS_H
#define MESSAGEPOPUPS_H
#include <QtGui>
#include "ui_messagepopups.h"
#include <QTreeWidgetItem>
#include <QList>
class messagePopups : public QWidget
{
Q_OBJECT
public:
messagePopups(QWidget *parent = 0);
~messagePopups();
void set_new_message(QByteArray qba);
qint16 number_of_messages;
QTreeWidgetItem *messageText[];
private:
Ui::messagePopupsClass ui;
private slots:
void treeItemClicked(QTreeWidgetItem* test,int item);
};
#endif // MESSAGEPOPUPS_H
cpp:
#include "messagepopups.h"
#include <iostream>
using namespace std;
messagePopups::messagePopups(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
number_of_messages = 1;
}
messagePopups::~messagePopups()
{
}
void messagePopups::set_new_message(QByteArray qba)
{
double _Flags, _MessageType, Ticks;
QString _MessageText;
QString Message_type;
QDataStream data(&qba, QIODevice::ReadOnly);
data >> _Flags;
data >> _MessageText;
data >> _MessageType;
data >> Ticks;
int i = _MessageType;
switch (i){
case 0: Message_type = "mTypeFatal";
break;
case 1: Message_type = "mTypeError";
break;
case 2: Message_type = "mTypeStep";
break;
case 3: Message_type = "mTypeWarning";
break;
case 4: Message_type = "mTypeInfo";
break;
}
messageText[number_of_messages] = new QTreeWidgetItem();//ui.treeWidget->columnAt(0));
ui.treeWidget->addTopLevelItem(messageText[number_of_messages]);
QStringList HeaderLabels;
HeaderLabels << "ID" << "Message Text" << "Message ID" << "Message Type" << "Ticks" << "Task" << "Task ID";
ui.treeWidget->setHeaderLabels(HeaderLabels);
messageText[number_of_messages]->setText(0,QString::number(number_of_messages)); //Message Number
messageText[number_of_messages]->setText(1,_MessageText); //Message Text
messageText[number_of_messages]->setText(2,""); //Message ID
messageText[number_of_messages]->setText(3,Message_type); //Message Type
messageText[number_of_messages]->setText(4,QString::number(Ticks)); //Ticks
messageText[number_of_messages]->setText(5,"test4"); //Task
messageText[number_of_messages]->setText(6,"test5"); //Task ID
messageText[number_of_messages]->setText(7,QString::number(_Flags)); //Flag/mode
connect(ui.treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(treeItemClicked(QTreeWidgetItem*,int)));
number_of_messages = number_of_messages + 1;
}
void messagePopups::treeItemClicked(QTreeWidgetItem* test,int item)
{
int RowID = test->text(0).toInt();
int Flag = messageText[RowID]->text(7).toInt();
switch (Flag)
{
case 4: cout << "@4" << endl;
ui.pushButton->setEnabled(true);
ui.pushButton_2->setEnabled(false);
ui.pushButton_3->setEnabled(false);
case 5: cout << "@5" << endl;
ui.pushButton->setEnabled(true);
ui.pushButton_2->setEnabled(false);
ui.pushButton_3->setEnabled(true);
case 7: cout << "@7" << endl;
ui.pushButton->setEnabled(true);
ui.pushButton_2->setEnabled(true);
ui.pushButton_3->setEnabled(true);
}
cout << "Ended" << endl;
}
I can see where the crash happens because of the cout's. Like I see @7 when the flag is 7 but the cout << "Ended" never get executed and the program closes.
What can be wrong?
Thank in advance