Signals and slots or whatever
-
15:51:34: Debugging starts
(Internal error: pc 0x0 in read in psymtab, but not in symtab.)
(Internal error: pc 0x0 in read in psymtab, but not in symtab.)@VRonin said in Signals and slots or whatever:
If you remove the connect you get no such error, correct?
UPDATE: correct
-
@jrod2much said in Signals and slots or whatever:
QObject::connect: Cannot connect (null)::Rvalues(QString) to QTextBrowser::setText(QString)
You're using a nullptr to connect, this can't work. The sender object was not created.
-
@jsulm Is this what you are talking about:
#include "console.h" #include "interpreter.h" #include "chirpmon.h" #include "dfu.h" #include "flash.h" #include "ui_mainwindow.h" #include "configdialog.h" #include "dataexport.h" #include "sleeper.h" #include "aboutdialog.h" #include "parameters.h" #include "paramfile.h" #include <QTextBrowser> #include "renderer.h" extern ChirpProc c_grabFrame; MainWindow::MainWindow(int argc, char *argv[], QWidget *parent) : QMainWindow(parent), m_ui(new Ui::MainWindow) { QCoreApplication::setOrganizationName(PIXYMON_COMPANY); QCoreApplication::setApplicationName(PIXYMON_TITLE); qRegisterMetaType<Device>("Device"); m_ui->setupUi(this); setWindowTitle(PIXYMON_TITLE); m_interpreter = NULL; connect(m_interpreter->m_renderer,&Renderer::Rvalues,m_ui->textBrowser,&QTextBrowser::setText); m_flash = NULL; m_renderer = NULL; //<-------------------------This? m_pixyConnected = false; m_pixyDFUConnected = false; m_configDialog = NULL; m_fwInstructions = NULL; m_fwMessage = NULL; m_versionIncompatibility = false; m_testCycle = false; m_waiting = WAIT_NONE; parseCommandline(argc, argv); m_settings = new QSettings(QSettings::NativeFormat, QSettings::UserScope, PIXYMON_COMPANY, PIXYMON_TITLE); m_console = new ConsoleWidget(this); m_video = new VideoWidget(this); connect(m_video, SIGNAL(mouseLoc(int,int)), this, SLOT(handleMouseLoc(int, int))); m_ui->imageLayout->addWidget(m_video); m_ui->imageLayout->addWidget(m_console); // hide console m_showConsole = m_testCycle; m_console->setVisible(m_testCycle); m_ui->actionConsole->setChecked(m_testCycle); m_ui->toolBar->addAction(m_ui->actionPlay_Pause); m_ui->actionDefault_program->setIcon(QIcon(":/icons/icons/home.png")); m_ui->toolBar->addAction(m_ui->actionDefault_program); m_ui->actionRaw_video->setIcon(QIcon(":/icons/icons/raw.png")); m_ui->toolBar->addAction(m_ui->actionRaw_video); m_ui->actionConfigure->setIcon(QIcon(":/icons/icons/config.png")); m_ui->toolBar->addAction(m_ui->actionConfigure); m_ui->menuProgram->setToolTipsVisible(true); m_statusLeft = new QLabel; m_statusRight = new QLabel; // give the status a little of a left margin m_ui->statusBar->setContentsMargins(6, 0, 0, 0); m_ui->statusBar->addWidget(m_statusLeft); m_ui->statusBar->addPermanentWidget(m_statusRight); updateButtons(); m_parameters.add("Pixy start command", PT_STRING, "", "The command that is sent to Pixy upon initialization"); // start looking for devices m_connect = new ConnectEvent(this); if (m_connect->getConnected()==NONE) error("No Pixy devices have been detected.\n"); // <---My added expermiental code ------v //connect(m_renderer,SIGNAL(Rvalues(QString)), m_ui->textBrowser, SLOT(setText(QString))); // connect(m_interpreter->m_renderer,&Renderer::Rvalues,m_ui->textBrowser,&QTextBrowser::setText); }
-
@VRonin said in Signals and slots or whatever:
m_interpreter = NULL; connect(m_interpreter->m_renderer
I'm not really sure what this means. This is my interpretation of the code; The application runs without my connect function or any other alteration to the code. So, I would guess it would be a bad idea to create an object where the original Programmers of this code did not. Wouldn't that affect the program? That is my uneducated opinion.
-
@jrod2much said in Signals and slots or whatever:
I'm not really sure what this means.
Let's simplify it further.
m_interpreter = NULL; m_interpreter->m_renderer
Line 1: You make
m_interpreter
a null pointer.
Line 2: You dereference the null pointer.What do you think will happen when you dereference a null pointer?
Note: This is a very important, fundamental concept in C++. If it's unclear to you, I highly recommend you spend some time learning C++ first, before you attempt to modify a complex application.
-
@JKSH Alright so I read up on the subject and I think I understand. A null pointer does not point to an address so it can't be dereferenced. I also found this video that made me feel stupid.
https://www.youtube.com/watch?v=bLHL75H_VEMAlright so what is my next step. Should I eliminate the two lines of code that make m_interpreter and m_renderer NULL? or do I have to point it to a specific address value?
-
@JKSH @VRonin @jsulm @J-Hilk
GUYS WE DID IT!!!!!!!!!!!!! ITS OUTPUTING THE VALUES!!!!
I searched the code for the whatever you call it when you make a new object and placed the connect function that @VRonin gave me there and BOOM... } dir = fd.directory().absolutePath(); m_settings->setValue("fw_dialog", QVariant(dir)); } } else if (m_interpreter==NULL) { m_console->clear(); m_console->print("Pixy detected.\n"); m_interpreter = new Interpreter(m_console, m_video, &m_parameters, m_initScript); connect(m_interpreter->m_renderer,&Renderer::Rvalues,m_ui->textBrowser,&QTextBrowser::setText); //Added connect(m_interpreter, SIGNAL(error(QString)), this, SLOT(error(QString))); connect(m_interpreter, SIGNAL(textOut(QString,uint)), this, SLOT(handleText(QString,uint))); connect(m_interpreter, SIGNAL(runState(int,QString)), this, SLOT(handleRunState(int,QString))); connect(m_interpreter, SIGNAL(finished()), this, SLOT(interpreterFinished())); // thread will send finished event when it exits connect(m_interpreter, SIGNAL(connected(Device,bool)), this, SLOT(handleConnected(Device,bool))); connect(m_interpreter, SIGNAL(actionScriptlet(QString,QStringList,bool)), this, SLOT(handleActionScriptlet(QString,QStringList,bool))); connect(m_interpreter, SIGNAL(view(QString,uint,bool,bool)), this, SLOT(handleView(QString,uint,bool,bool))); connect(m_interpreter, SIGNAL(prog(QString,QString,uint,bool)), this, SLOT(handleProg(QString,QString,uint,bool))); connect(m_interpreter, SIGNAL(paramLoaded()), this, SLOT(handleLoadParams())); connect(m_interpreter, SIGNAL(paramChange()), this, SLOT(handleParamChange())); connect(m_interpreter, SIGNAL(version(ushort,ushort,ushort,QString,ushort,ushort,ushort)), this, SLOT(handleVersion(ushort,ushort,ushort,QString,ushort,ushort,ushort))); m_interpreter->start(); } m_pixyConnected = true; } catch (std::runtime_error &exception) ...
-
@jrod2much said in Signals and slots or whatever:
A null pointer does not point to an address so it can't be dereferenced.
Correct.
I also found this video that made me feel stupid.
https://www.youtube.com/watch?v=bLHL75H_VEMI think he's being a bit harsh ;-)
Should I eliminate the two lines of code that make m_interpreter and m_renderer NULL? or do I have to point it to a specific address value?
You must never ever use these:
- Null pointers
- Uninitialized pointers
- Dangling pointers
Remember, take some time to learn the foundations of C++. It will save you lots of pain and heartache in the future.
@jrod2much said in Signals and slots or whatever:
GUYS WE DID IT!!!!!!!!!!!!! ITS OUTPUTING THE VALUES!!!!
Congratulations! Happy coding.
-
@jrod2much glad you solved your issue. In appreciation to all the people that helped you with it, please don't forget to mark your post as solved!