当前位置: 技术问答>linux和unix
qt中我的窗体为什么显示不出来呢?
来源: 互联网 发布时间:2015-11-15
本文导语: 在linux下用qt编写界面,main是我定义的一个窗体类,win_alarm0是他的一个成员,我在main的析构函数中创建它,并马上隐藏,然后在while_main函数中show(),但是总是显示不出win_alarm0的窗体,若是我把while(1)屏蔽掉,就...
在linux下用qt编写界面,main是我定义的一个窗体类,win_alarm0是他的一个成员,我在main的析构函数中创建它,并马上隐藏,然后在while_main函数中show(),但是总是显示不出win_alarm0的窗体,若是我把while(1)屏蔽掉,就可以了这是为什么呢?有什么解决办法么?请大家帮忙啊。
// impliment class Main
Main::Main( QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl )
win_alarm0 = new frame(this, "win_alarm");
win_alarm0->setGeometry( QRect( 0, 425, 620, 170 ));
win_alarm0->setFrameShape( QFrame::StyledPanel );
win_alarm0->setFrameShadow( QFrame::Raised );
win_alarm0->setBackgroundColor( Qt::white );
win_alarm0->setLineWidth( 0 );
win_alarm0->hide();
/////////////////////////////////////////////////////////////////////////////////////////
while_timer = new QTimer(this,"while_timer");
connect(while_timer,SIGNAL(timeout()),this,SLOT(while_main()));
while_timer->start(0);
}
void Main::while_main()
{
while_timer->stop();
win_alarm0->show();
while(1)
{
............
}
}
// impliment class Main
Main::Main( QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl )
win_alarm0 = new frame(this, "win_alarm");
win_alarm0->setGeometry( QRect( 0, 425, 620, 170 ));
win_alarm0->setFrameShape( QFrame::StyledPanel );
win_alarm0->setFrameShadow( QFrame::Raised );
win_alarm0->setBackgroundColor( Qt::white );
win_alarm0->setLineWidth( 0 );
win_alarm0->hide();
/////////////////////////////////////////////////////////////////////////////////////////
while_timer = new QTimer(this,"while_timer");
connect(while_timer,SIGNAL(timeout()),this,SLOT(while_main()));
while_timer->start(0);
}
void Main::while_main()
{
while_timer->stop();
win_alarm0->show();
while(1)
{
............
}
}
|
X是客户服务器网络窗口模型,只有进入事件循环窗口才会显示出来。
|
试试QtApplication::flushX
|
void Main::while_main()
{
while_timer->stop();
win_alarm0->show();
while(1)
{
............
}
}
你这里有个while死循环,程序执行总是在这个while_main中,窗口当然不能显示了.
除非你让whie_main执行完,否则窗口得不到显示的机会.
你跑的qt程序是单线程的,就是这个原因.
{
while_timer->stop();
win_alarm0->show();
while(1)
{
............
}
}
你这里有个while死循环,程序执行总是在这个while_main中,窗口当然不能显示了.
除非你让whie_main执行完,否则窗口得不到显示的机会.
你跑的qt程序是单线程的,就是这个原因.