初学QT,发现若个问题请高手解答!
自己写的程序,在运行exec()后,所有普通函数都不运行了,程序停在exec()后不动。
坛子里翻翻帖子后发现,exec()启动后进入QT消息等待机制。
现在问题是:
exec()启动后只有信号和槽才能运行吗?普通函数不能运行吗?如果这样的话自定义信号函数是能运行还是不能运行很困惑呀,有人知道的话麻烦吼一声吧,谢谢!
首先感谢318065268 rqzrqh dbzhang800 3位达人的热心帮助!在我发帖2个小时内居然有3条回复!谢谢,谢谢!
看来是我着急了,没说清楚,浪费大家时间了,不好意思。下面详细说说:
我想做个串口接收数据,然后在QLCDNumber上显示,每次接收数据后,都在QLCDNumber上更新显示的程序,现在的主要问题有:
1、进入exec()后,我不知道如何触发串口发送、接收的消息,好像应该自定义信号。自定义信号的时候最初的触发怎么做呢?我这个应该通过定时器吗?串口发送和接收不能自己触发吗?
2、我的程序是基于两个类的,一个是QT的显示类,一个是linux的串口发送读取数据类,我的信号槽应该分别在这两个类中,这样的话connect怎么写呢?是不是像坛子有人说的在main函数里connect呢?以下是我试着用定时器写的部分程序代码,编译错误说是main.cpp里的“connect”undeclared,具体怎么做呢?怎么moc?我的版本是qt2。用qmake生成的pro和Makefile。
3、moc到底怎么用我看了看参考文献弄得稀里糊涂的,我想是不是用qmake生成Makefile的时候会自动生成moc的链接,所以没有单独用moc,这样行吗?是不是只是在用tmake的时候要单独moc呢?
以下为尝试用定时器写的部分程序代码:
/////////////////main.cpp/////////////////
int main(int argc,char **argv)
{ Q_OBJECT
QApplication app(argc,argv);
Form1 w;
serial s;
s.set();
app.setMainWidget(&w);
connect(w,SIGNAL(timeout()),s,SLOT(loop()));
connect(s,SIGNAL(mysignal(int v)),w,SLOT(change(int v))); w.show();
// app.exec();
return(app.exec());
}
/////////////////////lcd.h///////////////////
class Form1 : public QWidget
{
Q_OBJECT
public:
Form1( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~Form1();
QLCDNumber* LCDNumber1;
QTimer* timer;
public slots:
int change ( int t);};
//////////////////lcd.cpp///////////////////
Form1::Form1( QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl )
{
.......................
timer = new QTimer( this, "timer" );
timer->start(200); int Form1::
change(int t){
LCDNumber1->display(t);
return 0;
}
////////////////////serial.h////////////////////
class serial
{
Q_OBJECT
................
public slots:
void loop();
signals:
void mysignal(int v);.....................
}
//////////////////serial.cpp///////////////////
void serial::loop()
{
...............
nread = read(fd, wbuff, 1); //串口读取数据
emit mysignal(int v);}
[ 此帖被nufang19在2009-10-10 09:37重新编辑 ]