C++ QFileDialog::控制台应用程序中的getOpenFileName
这是一个问题,第一次发布在我的网站上: 在控制台应用程序中使用打开的对话框后,我很难将其隐藏起来。 以下是用于测试此行为的main.cc文件的内容:C++ QFileDialog::控制台应用程序中的getOpenFileName,c++,qt,console-application,getopenfilename,C++,Qt,Console Application,Getopenfilename,这是一个问题,第一次发布在我的网站上: 在控制台应用程序中使用打开的对话框后,我很难将其隐藏起来。 以下是用于测试此行为的main.cc文件的内容: #include <QApplication> #include <QFile> #include <QFileDialog> #include <QString> bool b_closing = false; static QString gofn ( void ) { QString
#include <QApplication>
#include <QFile>
#include <QFileDialog>
#include <QString>
bool b_closing = false;
static QString gofn ( void )
{
QString s_file;
s_file = QFileDialog::getOpenFileName(
qApp->activeWindow(),
QObject::tr( "Select the file to open:" )
);
if ( !s_file.isEmpty() )
{
/* ... */
}
/* have no effect; */
QApplication::processEvents();
QApplication::sendPostedEvents();
return s_file;
}
static void userInpLoop ( void )
{
QFile cons_inp;
QFile cons_outp;
QString s_ln;
cons_inp.open( stdin, QIODevice::ReadOnly );
cons_outp.open( stdout, QIODevice::WriteOnly );
for ( ;; )
{
if ( b_closing )
break;
cons_outp.write( "\n>" );
cons_outp.flush();
s_ln = cons_inp.readLine().trimmed();
if ( s_ln == "q" )
{
b_closing = true;
cons_outp.write( "Closng...\n" );
}
else if ( s_ln == "gofn" )
{
cons_outp.write( gofn().toLatin1() );
}
else
{
cons_outp.write( "ERROR!!! \nInvalid input!\n" );
}
cons_outp.flush();
//break; /* just to test that a.exec() hides the dialog */
}
}
int main( int argc, char *argv[] )
{
/* we choose QApplication instead of QCoreApplication because we need some Gui components */
QApplication a(argc, argv);
userInpLoop();
//return a.exec(); /* this will hide the dialog */
return 0;
}
操作系统:Ubuntu 12.04
Qt:4.8.2是在Windows 7上从主干构建的,使用Qt4.8.1和Qt4.8.3以及openDialog进行编译是自然的,并且隐藏了 使用后 你能描述一下你身边发生了什么吗?你可能想试试
QEventLoop loop;
while (loop.processEvents())
/* nothing */;
我发现有时有必要再次调用循环 有趣的是,在我的openSUSE上使用Qt4.7.4,对话框消失得很好。。。所以,我真的帮不了你。您可能想尝试
QEventLoop循环;while(loop.processEvents())/*nothing*/代码>。我发现有时有必要再次调用循环…QEventLoop循环;while(loop.processEvents())/*nothing*/;这就是诀窍。你能把这个贴成一个电子邮件吗?非常感谢。你好,troyane,谢谢你的测试。对话框仍然可见,但按钮不可访问(如禁用)。新调用将隐藏旧对话框并显示新对话框。然而,Tilman Vogel的解决方案是有效的——QEventLoop循环;while(loop.processEvents())/*nothing*/;将隐藏该对话框
QEventLoop loop;
while (loop.processEvents())
/* nothing */;