QPushButton set checked causes program to crash
-
wrote on 23 Apr 2018, 15:07 last edited by Qtstarter121
I have a situation where I create a new QPushButton dynamically and then add it to an existing layout
obtained from a .ui file. It is a class private variable named cButton.I initialize my button and do some other things:
cButton = new QPushButton; cButton->setObjectName("button1"); cButton->setCheckable(true); connect(cButton, SIGNAL(clicked(bool)), this, SLOT(on_button1_clicked(bool)));
afterwards I do this:
cButton->setChecked(true); on_button1_clicked(true);
With the above two lines, my program crashes when launched. Without them it runs fine.
With just the first line where it's setting the checked state it also still crashes.
What could be the reason for this? -
I think you made infinite loop.
set breakpoint in on_button1_clicked
and see if its called over and over -
wrote on 23 Apr 2018, 15:31 last edited by
Nope no loop there. My slot isn't even called once.
-
Nope no loop there. My slot isn't even called once.
@Qtstarter121
ok, try single step and see what lines it crashes in -
Also make sure u didnt do the classic
QPushButton *cButton = new QPushButton; // local, not class member in .h
and then later
cButton->setChecked(true); // the one from .h that is just dangling pointer -
wrote on 23 Apr 2018, 15:40 last edited by
Unfortunately I can't single step because I don't even have time to attach a debugger. My program crashes within seconds of launching. I was hoping to get maybe some possible reasons for what I could have done wrong.
-
Also make sure u didnt do the classic
QPushButton *cButton = new QPushButton; // local, not class member in .h
and then later
cButton->setChecked(true); // the one from .h that is just dangling pointerwrote on 23 Apr 2018, 15:41 last edited by@mrjj I actually had this beforehand where it was a local variable but it is a class pointer in my code right now.
-
@mrjj I actually had this beforehand where it was a local variable but it is a class pointer in my code right now.
@Qtstarter121
Ok, i cant guess. But i promise you it wont crash from setChecked
so its an actual code bug.Without debugger life will be really hard.
what do u do in on_button1_clicked ?
-
@Qtstarter121
Ok, i cant guess. But i promise you it wont crash from setChecked
so its an actual code bug.Without debugger life will be really hard.
what do u do in on_button1_clicked ?
wrote on 23 Apr 2018, 15:56 last edited by Qtstarter121@mrjj Fair enough. I agree actually that setChecked shouldn't be my issue and that it's likely something else I've done. I'm not sure if it's worth mentioning, but prior to my new button initialization and slot connection, I do the following:
QMetaObject::connectSlotsByName(this);
and I see this in my output log : No matching signal for on_button1_clicked()
To answer your question, my slot currently does this:
void MyClass:on_button1_clicked(bool checked) { if (checked) cButton->setText("ENABLED"); else cButton->setText("DISABLED"); SetWidgetProperty(dynamic_cast<QWidget*>(cButton), "highlighted", checked); }
-
hi
do
SetWidgetProperty
called setChecked ?
if that triggers clicked(bool) u get infinite calls. -
hi
do
SetWidgetProperty
called setChecked ?
if that triggers clicked(bool) u get infinite calls.wrote on 23 Apr 2018, 16:03 last edited by@mrjj The thing is, If I do this:
cButton->setChecked(true); //on_button1_clicked(true);
I still get the same crash. Which tells me on_button1_clicked(bool) is irrelevant. Right?
-
@mrjj The thing is, If I do this:
cButton->setChecked(true); //on_button1_clicked(true);
I still get the same crash. Which tells me on_button1_clicked(bool) is irrelevant. Right?
@Qtstarter121
yeah, seems so.
so it seems to crash on ?
cButton->setChecked(true);
since you dont have debugger
use qDebugqDebug() << "before";
cButton->setChecked(true);
qDebug() << "after";to fidn WHAT makes it crash
-
wrote on 23 Apr 2018, 16:06 last edited by
Hold on I might be wrong about that. Let me try something and get back to you.
-
Hold on I might be wrong about that. Let me try something and get back to you.
@Qtstarter121
You really should install debugger. :)
Its ment to find stuff like this :) -
wrote on 23 Apr 2018, 16:22 last edited by
Okay so it looks like i am having an off-day because I just found out the source of my problem.
Turns out the issue was with code in the slot ( not Qt stuff but c++ using a proprietary framework) I neglected to post which was using an uninitialized variable. facepalmI neglected to include it because I wrongly assumed the code wasn't relevant.
Sorry for wasting your time and thanks for the help.
-
@Qtstarter121
You really should install debugger. :)
Its ment to find stuff like this :)wrote on 23 Apr 2018, 16:32 last edited by@mrjj I actually do have a debugger available and installed. The problem is that the way my program is launched, i'm not sure how I can run it with gdb. if I attempt a command such as " gdb < my usual program launch command>
I get an error like this: not in executable format: File format not recognizedHowever I can attach a debugger once my process is running via gdb attach < pid > but in this case the issue was in my constructor so that would run immediately and no time to attach the debugger to catch the crash issue so print statements are my only option.
-
@mrjj I actually do have a debugger available and installed. The problem is that the way my program is launched, i'm not sure how I can run it with gdb. if I attempt a command such as " gdb < my usual program launch command>
I get an error like this: not in executable format: File format not recognizedHowever I can attach a debugger once my process is running via gdb attach < pid > but in this case the issue was in my constructor so that would run immediately and no time to attach the debugger to catch the crash issue so print statements are my only option.
@Qtstarter121
You are not using Creator? -
@Qtstarter121
You are not using Creator?wrote on 23 Apr 2018, 19:01 last edited by@mrjj nope, gdb.
-
@mrjj nope, gdb.
@Qtstarter121
Ok so you compile outside of Creator and not using the dgb integration ?
1/19