QApplication app = new QApplication(argc,argv);
对于的临时对象应该是QApplication app(argc,argv); 而不是QApplication app(argc,NULL);
如果是用到QDialog对象,必须保证QDialog在app前销毁
QApplication app = new QApplication(argc,argv);
对于的临时对象应该是QApplication app(argc,argv); 而不是QApplication app(argc,NULL);
如果是用到QDialog对象,必须保证QDialog在app前销毁
QApplication app = new QApplication(argc,argv);
对于的临时对象应该是QApplication app(argc,argv); 而不是QApplication app(argc,NULL);
如果是用到QDialog对象,必须保证QDialog在app前销毁
我使用argc = 0 ,argv=NULL 为啥不行,我这是在.so 中。不管有没有QDialog ,只有new 之后delete ,在主程序未退出之前再次调用那个函数,都会出错。
int ui_test(char *cmdstring,int argc, char **argv)
{
// int argc=0;
int ret = 0;
if(!qApp){
printf("kkkkkkkkkkkkkkkkkkkk\n");
QApplication *app = new QApplication(argc, argv);
// app->setQuitOnLastWindowClosed(true);
/*
MYDialog * mydialog = new MYDialog();
mydialog->show();
mydialog->exec();
delete mydialog;
*/ //mydialog = NULL;
delete app;
} else {
printf("#sleseee\n");
MYDialog * mydialog = new MYDialog();
mydialog->show();
printf("#slxzxczxczxceseee\n");
mydialog->exec();
delete mydialog;
}
return ret;
}
int main(int argc, char *argv[])
{
//
//QApplication app(argc,NULL);
int i = 0;
ui_test("ping 192.168.",argc,argv);
printf("xxxx\n");
ui_test("ping 192.168.",argc,argv);
printf("xxxx###\n");
ui_test("ping 192.168.",argc,argv);
printf("xxxx###\n");
//app.exec()
//return a.exec();
return 0;
}
我使用argc = 0 ,argv=NULL 为啥不行,我这是在.so 中。不管有没有QDialog ,只有new 之后delete ,在主程序未退出之前再次调用那个函数,都会出错。
int ui_test(char *cmdstring,int argc, char **argv)
{
// int argc=0;
int ret = 0;
if(!qApp){
printf("kkkkkkkkkkkkkkkkkkkk\n");
QApplication *app = new QApplication(argc, argv);
// app->setQuitOnLastWindowClosed(true);
/*
MYDialog * mydialog = new MYDialog();
mydialog->show();
mydialog->exec();
delete mydialog;
*/ //mydialog = NULL;
delete app;
} else {
printf("#sleseee\n");
MYDialog * mydialog = new MYDialog();
mydialog->show();
printf("#slxzxczxczxceseee\n");
mydialog->exec();
delete mydialog;
}
return ret;
}
int main(int argc, char *argv[])
{
//
//QApplication app(argc,NULL);
int i = 0;
ui_test("ping 192.168.",argc,argv);
printf("xxxx\n");
ui_test("ping 192.168.",argc,argv);
printf("xxxx###\n");
ui_test("ping 192.168.",argc,argv);
printf("xxxx###\n");
//app.exec()
//return a.exec();
return 0;
}
QApplication::QApplication(int &argc, char **argv)
Initializes the window system and constructs an application object with argc command line arguments in argv.
Warning: The data referred to by argc and argv must stay valid for the entire lifetime of the QApplication object. In addition, argc must be greater than zero and argv must contain at least one valid character string.
The global qApp pointer refers to this application object. Only one application object should be created.
This application object must be constructed before any paint devices (including widgets, pixmaps, bitmaps etc.).
Note: argc and argv might be changed as Qt removes command line arguments that it recognizes.
这是官方文档关于QApplication的构造说明,注意Warning那段
Popular Ranking
ChangePopular Events
More
我在龙芯下UOS 中使用QT 生成动态库,动态库中需要使用到Dialog ,所以有需要使用到QApplication。
写一个Dialog 的简单实例, 函数中使用QApplication app(argc,NULL);生成动态库。
此时用C写一个调用函数,调用函数main 里面不涉及QT相关,调用单次该函数没有问题,调用第二次时发生段错误,错误点就是QApplication app(argc,NULL)处,qAPP 此时为空,不存在多QApplication。
如果使用QApplication app = new QApplication(argc,argv);方式,delete app ;第二次调用出现一样的问题,X86,Kylin 都没有这样的问题。
如果定义全局的QAPPlication,在程序退出时会段错误,kylin 也有类似问题,X86 没有。