My program doesn't show up in my enterprise device while in pc does
-
Hello!!
I've made a couple of projects in Qt4.8.5 which have to run on a especific device (the product of our company) which runs under a unix OS and they run as expected. You launch them, they show up and you use them. Until here is everything normal and happy:D
Now I've made another program, which is like one of the before mentioned but bigger. The thing is that now that I've finished it, I've tried to run it on the HW and something strange happened:
The screen gets black (the tipical black "with light" that means that the screen is on). I've launched it manually so I can see the console messages on console and I see all the qDebug() it has to print at the beginning and also, I have a
qDebug() << "1st page";
on the::initializePage()
funcion of the first page shown (is a QWizardPage) also which is printed, so everything looks normal but... I can't see it on the screnn... just a black screen (My apps' background is orange so it is now the background of the app).Any idea of why I can't see it? The HW has all the libraries necessaries for it because as I said, I run there 2 other Qt apps.
I add my .pro info...don't think it is usefull now but... any information is apreciated I guess..
QT += core gui QT += network QT += script QT += date QT += time QT += xml QMAKE_CXXFLAGS += -std=c++11 QMAKE_CXXFLAGS += -s greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MyApp TEMPLATE = app
Note 1: In the 1st page I have 2 buttons, so if you press enter, you go to the next QWizardPage called 2nd page so... when I see the "1st page" message on console, if I press enter on the device, of course, it then shows the "2nd page" message from the qDebug in the ::initializePage() which means that the program runs well, it is not frozen.
Note 2: Another thing I want to point is that: it CAN'T be in the background running, the device make it appear in front always.
Thank you so much.
-
So... after 2 days looking and trying different things with the different versions I had in the SVN I've found the stupid-silly-cause of my problem...
It was a page, more exactly in its constructor where I create a connect between a combobox curretnIndexChanged signal and a fucntion I created as a slot. After that connect I load some items into the cb and switching those lines fixed my problem.... I don't really understand why because the combobox was well created and I thought is was not necessary to load some items into it to be able to do a connect with it but... seems I was wrong
-
@roseicollis
Hello,
I'm glad you were able to solve your problem, however you're also correct in noting that it shouldn't in principle matter where you make yourQObject::connect
calls. Maybe if you provide a code-snippet we could investigate that?Kind regards.
-
Hi @kshegunov srry for my late reply.
What I do in that QWizardPage called WP25 is:
In its constructor:.... LoadXMLInfo(); connect(my_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(SetSomeLabels(int))); ---
In the loadXMLInfo function, the only thing that has something in common with the combobox is:
while(!Child.isNull()) { my_combobox->addItem(Child.attribute("Info1",Child.toText().data()), Child.attribute("Info2",Child.toText().data())); Child = Child.nextSibling().toElement(); }
And in the SetSomeLabels function:
void WP25::SetSomeLabels(int i) { if (i==(my_combobox->count()-1)) { m_bOtherTipus=true; l_Onelabel->setVisible(true); le_OneLineEdit>setVisible(true); }else{ m_bOtherTipus=false; l_OneLabel->setVisible(false); le_OneLineEdit->setVisible(false); } }
I think that is everything important here
-
@roseicollis
Hello,
I can't spot anything plainly wrong with that part of the code. Do you get any Qt warnings when running your application on the problematic device?Kind regards.
-
Hi,
Does LoadXMLInfo work on a local file ?
-
Hi @SGaist ! Yes, but the XML is ok and well loaded I imagine because the program reads it and load it into the combobox
-
What I meant is that if you are using a local file from your hard drive then it's normal that it won't load when running on a different device. If you don't change that file often, then use Qt's resource system to embedded the file in your application.
-
@SGaist oh sorry, I know what you mean, that's why I say it loads correctly in both sites... The XML is in both and yes, it will be changed every now and then so it has to be this way but... as I said, it is well loaded.... so I discard that as a problem :S
-
Ok, I misunderstood your original problem.
In such a strange case (meaning when nothing is obvious), one thing to do is to "disable everything". By that I mean start with only your main function showing a QWidget in place of your custom widget. I know it sounds basic but it confirms that Qt's working. The next step is to re-enable one by one your custom widgets until things break again.
-
Np :) Well its something similar to what I did... I commented everything until it stopped working so found the problem in that constructor.... comented everything ans was descomenting until found that and that's all.. If I switch lines, it crashes O.o
-
What did you have to switch ?
-
@SGaist
Hello, look up posts #2 and #4. He had switched:connect(my_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(SetSomeLabels(int))); LoadXMLInfo();
to make it work, although I see no logical reason not to work in the original order.
-
I also don't see any reason either.
However, one thing I usually do is to setup widgets and connection and then trigger data/settings loading once everything is done or even right after the event loop as started using e.g. a QTimer with a 0 timeout.
-
@SGaist
To be honest I've never found any use for single shot timers with 0 timeout. Although, this depends on a personal preference I have always usedQMetaObject::invokeMethod
withQt::QueuedConnection
for such purposes. :) -
QTimer is higher level and a bit clearer for people not going in the lower levels of Qt. But in the end, yes both have the same effects.
Also, invokeMethod doesn't have any overload for lambdas
-
Yup, good point.
For lambdas ? Two main things comes to mind for Qt: real private slots and processing of QNetworkReply :)
-
For lambdas ? Two main things comes to mind for Qt: real private slots and processing of QNetworkReply :)
Q_PRIVATE_SLOT works wonders for me, although I could appreciate one wanting to use lambdas for it.
QNetworkReply
I've never used, only raw TCP/UDP connections ... I guess, I'm pretty old school ... :) -
@kshegunov said:
Q_PRIVATE_SLOT
AFAIK, works only if you also use the PIMPL idiom, which is not the most common case.
QNetworkAccessManager is a good tool when you want to write a layer to access a REST service. You use what best fits your needs :)