QMessageBox showing "Loading...."
-
Good Morning!
This is what I mean transparent....my messagebox doesn´t a background color.
QMessageBox msgBox; msgBox.setText("Lendo Biblioteca SAT."); msgBox.setWindowTitle("Aguarde carregamento..."); msgBox.setWindowModality(Qt::WindowModal); msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt"); msgBox.setVisible(true); msgBox.show();@Venkatesh-V ... I tried your sugestion and the results are the same.
tks
-
@Guapo ,
Try ,
msgBox.exec() instead of msgBox.show(); -
Good Morning!
This is what I mean transparent....my messagebox doesn´t a background color.
QMessageBox msgBox; msgBox.setText("Lendo Biblioteca SAT."); msgBox.setWindowTitle("Aguarde carregamento..."); msgBox.setWindowModality(Qt::WindowModal); msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt"); msgBox.setVisible(true); msgBox.show();@Venkatesh-V ... I tried your sugestion and the results are the same.
tks
@Guapo said in Qmessagebox showing "Loading....":
Good Morning!
This is what I mean transparent....my messagebox doesn´t a background color.
QMessageBox msgBox; msgBox.setText("Lendo Biblioteca SAT."); msgBox.setWindowTitle("Aguarde carregamento..."); msgBox.setWindowModality(Qt::WindowModal); msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt"); msgBox.setVisible(true); msgBox.show();@Venkatesh-V ... I tried your sugestion and the results are the same.
tks
Normally the QMessageBox is not transparent by default , are you changing stylesheet, style or palette somewhere else in your code?
I don't think that this part of the code is responsible of making messagebox transparent
QMessageBox msgBox;
msgBox.setText("Lendo Biblioteca SAT.");
msgBox.setWindowTitle("Aguarde carregamento...");
msgBox.setWindowModality(Qt::WindowModal);
msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt");
msgBox.setVisible(true);
msgBox.show();Can you share other parts of your code?
-
I didn´t change the stylesheet.
This is the second class called in my program...the first one is for login.
If I change msgBox.show to msgBox.exec...it´s ok, but don´t load my library until press "ok" button.
This is the entire constructor class:
Principal::Principal(QWidget *parent) : QDialog(parent), ui(new Ui::Principal) { ui->setupUi(this); QPixmap pix(QString("%1%2").arg(path_images,"selo_sabordelivery.png")); ui->label_pic_2->setPixmap(pix); ui->label_pic_3->setPixmap(pix); ui->label_pic_3->setPixmap(pix); ui->label_pic_4->setPixmap(pix); ui->label_pic_5->setPixmap(pix); ui->label_nomeuser->setText(user_logado); ui->label_status->setText(Utility::JobTitle(user_tipo)); ui->label_nome->setText(user_nome); qDebug() << user_logado << user_status; conn.connOpen(); QDateTime timeConvertor=QDateTime::currentDateTime(); QDateTime licenca; QString validade=lerlicenca(); licenca = QDateTime::fromString(validade, "dd/MM/yyyy"); if(licenca.toTime_t()>=timeConvertor.toTime_t()) validade_ok=true; qDebug() << validade << validade_ok; Acesso(); ui->label_versao->setText(VERSAO); model_loja=new QSqlQueryModel(); lerloja(model_loja); config=model_loja->record(0).value(4).toInt(); qDebug() << config; LerModos(); QMessageBox msgBox; msgBox.setText("Lendo Biblioteca SAT."); msgBox.setWindowTitle("Aguarde carregamento..."); msgBox.setWindowModality(Qt::WindowModal); msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt"); msgBox.setVisible(true); msgBox.show(); if(nomesat!="") carregarDarumaFramework(this); }tks
-
I didn´t change the stylesheet.
This is the second class called in my program...the first one is for login.
If I change msgBox.show to msgBox.exec...it´s ok, but don´t load my library until press "ok" button.
This is the entire constructor class:
Principal::Principal(QWidget *parent) : QDialog(parent), ui(new Ui::Principal) { ui->setupUi(this); QPixmap pix(QString("%1%2").arg(path_images,"selo_sabordelivery.png")); ui->label_pic_2->setPixmap(pix); ui->label_pic_3->setPixmap(pix); ui->label_pic_3->setPixmap(pix); ui->label_pic_4->setPixmap(pix); ui->label_pic_5->setPixmap(pix); ui->label_nomeuser->setText(user_logado); ui->label_status->setText(Utility::JobTitle(user_tipo)); ui->label_nome->setText(user_nome); qDebug() << user_logado << user_status; conn.connOpen(); QDateTime timeConvertor=QDateTime::currentDateTime(); QDateTime licenca; QString validade=lerlicenca(); licenca = QDateTime::fromString(validade, "dd/MM/yyyy"); if(licenca.toTime_t()>=timeConvertor.toTime_t()) validade_ok=true; qDebug() << validade << validade_ok; Acesso(); ui->label_versao->setText(VERSAO); model_loja=new QSqlQueryModel(); lerloja(model_loja); config=model_loja->record(0).value(4).toInt(); qDebug() << config; LerModos(); QMessageBox msgBox; msgBox.setText("Lendo Biblioteca SAT."); msgBox.setWindowTitle("Aguarde carregamento..."); msgBox.setWindowModality(Qt::WindowModal); msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt"); msgBox.setVisible(true); msgBox.show(); if(nomesat!="") carregarDarumaFramework(this); }tks
@Guapo said in Qmessagebox showing "Loading....":
msgBox.setWindowModality(Qt::WindowModal);
instead can you try by Qt::ApplicationModal
-
I didn´t change the stylesheet.
This is the second class called in my program...the first one is for login.
If I change msgBox.show to msgBox.exec...it´s ok, but don´t load my library until press "ok" button.
This is the entire constructor class:
Principal::Principal(QWidget *parent) : QDialog(parent), ui(new Ui::Principal) { ui->setupUi(this); QPixmap pix(QString("%1%2").arg(path_images,"selo_sabordelivery.png")); ui->label_pic_2->setPixmap(pix); ui->label_pic_3->setPixmap(pix); ui->label_pic_3->setPixmap(pix); ui->label_pic_4->setPixmap(pix); ui->label_pic_5->setPixmap(pix); ui->label_nomeuser->setText(user_logado); ui->label_status->setText(Utility::JobTitle(user_tipo)); ui->label_nome->setText(user_nome); qDebug() << user_logado << user_status; conn.connOpen(); QDateTime timeConvertor=QDateTime::currentDateTime(); QDateTime licenca; QString validade=lerlicenca(); licenca = QDateTime::fromString(validade, "dd/MM/yyyy"); if(licenca.toTime_t()>=timeConvertor.toTime_t()) validade_ok=true; qDebug() << validade << validade_ok; Acesso(); ui->label_versao->setText(VERSAO); model_loja=new QSqlQueryModel(); lerloja(model_loja); config=model_loja->record(0).value(4).toInt(); qDebug() << config; LerModos(); QMessageBox msgBox; msgBox.setText("Lendo Biblioteca SAT."); msgBox.setWindowTitle("Aguarde carregamento..."); msgBox.setWindowModality(Qt::WindowModal); msgBox.setStyleSheet("background-color:#0F1418;color:white;font-size:11pt"); msgBox.setVisible(true); msgBox.show(); if(nomesat!="") carregarDarumaFramework(this); }tks
-
Exactly as @jsulm says above. No stylesheet, rather this is what a window/message box looks like when it has "started" to be shown but has not "completed", as in some shape or form your app is "blocking"/looping" where it needs to allow the main event loop to be processing events....
-
@Venkatesh-V said in Qmessagebox showing "Loading....":
ApplicationModal
I tried ApplicationModal, NonModal and WindowModal...nok!
I have no blocked anything because this is the beginning of my aplication....
1)read user/password (first screen)
2)read third party library and open main screen. (2nd screen)This messagebox is inside of the main screen constructor.
LerModos -> function read sqltable
...
carregarDarumaFramework -> load a huge third party librarytks
-
@Venkatesh-V said in Qmessagebox showing "Loading....":
ApplicationModal
I tried ApplicationModal, NonModal and WindowModal...nok!
I have no blocked anything because this is the beginning of my aplication....
1)read user/password (first screen)
2)read third party library and open main screen. (2nd screen)This messagebox is inside of the main screen constructor.
LerModos -> function read sqltable
...
carregarDarumaFramework -> load a huge third party librarytks
@Guapo
I could be way, way out on this... but I still suspect painting/event loop...
You're halfway thru constructing a "man screen" (QMainWindow?) when you decide to put up a message box...
Temporarily, why don't you move the message box later, after the main screen has been constructed and shown, and then see? At least that will eliminate stylesheets etc. -
To complement what @JNBarchan suggests, you should likely move the library loading part outside the constructor of your MainWidget since it's not related to the contraction of that widget.
Basically, create your gui elements and once that's done, trigger the loading/setup of whatever is needed.
-
I did make some changes...
The first action of my app is ask for user/pass to login on.
There is a "Login" button to check these credencials.
After check user and pass I put this library load and my &$&#$%%@# QMessagebox.
When this load finish, I call the Principal class ( that shows the main screen ).
The old code had this Principal class constructor to load this library.
Now I´m loading this library out of any constructor and the results are exactly I the same.
-
I did make some changes...
The first action of my app is ask for user/pass to login on.
There is a "Login" button to check these credencials.
After check user and pass I put this library load and my &$&#$%%@# QMessagebox.
When this load finish, I call the Principal class ( that shows the main screen ).
The old code had this Principal class constructor to load this library.
Now I´m loading this library out of any constructor and the results are exactly I the same.
@Guapo
But are you calling the Message Box creation after you have entered the main Qt event loop (likeapp.exec_()) which has allowed the main window to finish drawing correctly? Or, possibly, very early, before you have started creating yourQMainWindow? Or, what's this "third-party library" you're talking about, could that be interfering, why can't you eliminate that and see if it's relevant?It's up to you whether you want to try these things. But if you don't, I could be wrong but it seems to me nobody here is going to have a solution for you....
-
@JNBarchan
The Login Class is my QMainWindow.
int main(int argc, char *argv[]) { QApplication a(argc, argv); Login w; w.show(); return a.exec(); } ........ Login::Login(QWidget *parent) : QMainWindow(parent), ui(new Ui::Login) { ui->setupUi(this); path_images=QString("%1/images/").arg(QDir::currentPath()); QPixmap pix(QString("%1%2").arg(path_images,"selo_sabordelivery.png")); // QPixmap pix("/mnt/midia4/prj/qt/sql/sql_app/selo_sabordelivery.png"); ui->label_pic->setPixmap(pix); if(!connOpen()) ui->label_db->setText("Falha ao conectar DataBase"); else ui->label_db->setText("DataBase Conectado..."); }and I´m loading my library (.so) inside this class...This class has a GUI.
I put this message before loading library and didn´t show anything....I´m trying to understand what is going on.
tks
-
@JNBarchan
The Login Class is my QMainWindow.
int main(int argc, char *argv[]) { QApplication a(argc, argv); Login w; w.show(); return a.exec(); } ........ Login::Login(QWidget *parent) : QMainWindow(parent), ui(new Ui::Login) { ui->setupUi(this); path_images=QString("%1/images/").arg(QDir::currentPath()); QPixmap pix(QString("%1%2").arg(path_images,"selo_sabordelivery.png")); // QPixmap pix("/mnt/midia4/prj/qt/sql/sql_app/selo_sabordelivery.png"); ui->label_pic->setPixmap(pix); if(!connOpen()) ui->label_db->setText("Falha ao conectar DataBase"); else ui->label_db->setText("DataBase Conectado..."); }and I´m loading my library (.so) inside this class...This class has a GUI.
I put this message before loading library and didn´t show anything....I´m trying to understand what is going on.
tks
-
connOpen only it´s makes a MySql conection
bool connOpen(){
lerconf(); // read text file mydb=QSqlDatabase::addDatabase("QMYSQL"); mydb.setDatabaseName("controle_restaurante"); mydb.setHostName(database_nome); mydb.setPort(database_port.toInt()); mydb.setUserName(database_user); mydb.setPassword(database_senha); if(!mydb.open()){ qDebug() << "Falha ao conectar ao DataBase" << mydb.lastError().text(); return false; } else{ qDebug() << ("Conectado..."); return true; } } -
Do you mean you want to have some sort of splash screen while that library is being loaded ?
Out of curiosity, why do you need to load it by hand ?
-
This is for restaurant app. Here in Brazil, all restaurants needs a device called SAT, connected to USB and the internet (to send all sales data to our beloved government) :). This device has its own library to create a sale invoice and send all data to government.
Load by hand is the way used to access the internal functions.
I don´t know another way to acess internal function from a .dll or .so .
My intention is open a screen to warning loading, because the user could think software is crashed. This library takes a several seconds to load. -
This is for restaurant app. Here in Brazil, all restaurants needs a device called SAT, connected to USB and the internet (to send all sales data to our beloved government) :). This device has its own library to create a sale invoice and send all data to government.
Load by hand is the way used to access the internal functions.
I don´t know another way to acess internal function from a .dll or .so .
My intention is open a screen to warning loading, because the user could think software is crashed. This library takes a several seconds to load.@Guapo said in Qmessagebox showing "Loading....":
I don´t know another way to acess internal function from a .dll or .so
Usually you link your app against a library to use it.
See http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html -
@Guapo said in Qmessagebox showing "Loading....":
I don´t know another way to acess internal function from a .dll or .so
Usually you link your app against a library to use it.
See http://doc.qt.io/qtcreator/creator-project-qmake-libraries.htmlwhen I tried to use this library, my first option was
at my .pro fileLIBS += -L"/mnt/midia4/prj/qt/Controle" -lDarumaFramework
But I cannot exec the internal function ( ex: rVerificarComunicacao_SAT_Daruma() ).
So, I received from the library owner a file to load it´s library and execute internal functions;
bibliotecaDinamica = dlopen("./libDarumaFramework.so", RTLD_NOW);This is working!
Today, I tried to include this line at my .pro file
LIBS += -L"/mnt/midia4/prj/qt/Controle" -lDarumaFramework -ldl
The library loading is during the aplication load....I can exec the internal function.
But this is all inside the Qt Creator....when I tried to exec my aplication from the CL, there is a segmentation fault.
I need more information, but this note is only to update you that I´m studying your hint.tks
-
when I tried to use this library, my first option was
at my .pro fileLIBS += -L"/mnt/midia4/prj/qt/Controle" -lDarumaFramework
But I cannot exec the internal function ( ex: rVerificarComunicacao_SAT_Daruma() ).
So, I received from the library owner a file to load it´s library and execute internal functions;
bibliotecaDinamica = dlopen("./libDarumaFramework.so", RTLD_NOW);This is working!
Today, I tried to include this line at my .pro file
LIBS += -L"/mnt/midia4/prj/qt/Controle" -lDarumaFramework -ldl
The library loading is during the aplication load....I can exec the internal function.
But this is all inside the Qt Creator....when I tried to exec my aplication from the CL, there is a segmentation fault.
I need more information, but this note is only to update you that I´m studying your hint.tks
@Guapo said in Qmessagebox showing "Loading....":
bibliotecaDinamica = dlopen("./libDarumaFramework.so", RTLD_NOW);But this is all inside the Qt Creator....when I tried to exec my aplication from the CL, there is a segmentation fault.
-
You need to check the return result of
dlopen, as it may fail? Do you proceed to usebibliotecaDinamicawithout verifying its value? -
./libDarumaFramework.sois a relative path; it must be found in the current directory. Is your current directory right for this while running from QtCreator, but something else when run from the command line? (I don't know whatdlopen's behaviour is exactly, but you might be better with plainlibDarumaFramework.sowithout the leading./.) Have you put the library in the same directory as your executable, alongLD_LIBRARY_PATH, or what?
-