qt小问题
QT如何实现不点击鼠标就能触发 mouseMoveEvent(QMouseEvent *e):setMouseTracking(true)
QTableView如何实现单击事件:不需要重写单击事件,而是有clicked(QModelIndex),doubleClicked(QModelIndex)等信号
QGraphicsObject如何接收点击信号等:
1 bool GoodItem::sceneEvent(QEvent *event) 2 { 3 if(event->type() == QEvent::GraphicsSceneMousePress) 4 { 5 mousePressEvent((QGraphicsSceneMouseEvent *)event); 6 } 7 else if(event->type() == QEvent::GraphicsSceneMouseRelease) 8 { 9 mouseReleaseEvent((QGraphicsSceneMouseEvent *)event); 10 } 11 else if(event->type() == QEvent::GraphicsSceneMouseMove) 12 { 13 mouseMoveEvent((QGraphicsSceneMouseEvent *)event); 14 } 15 else if(event->type() == QEvent::GraphicsSceneMouseDoubleClick) 16 { 17 mouseDoubleClickEvent((QGraphicsSceneMouseEvent *)event); 18 } 19 return QGraphicsObject::sceneEvent(event); 20 }
QGraphicsItem如何触发重绘:该类存在update函数,注意是函数不是槽。
QT中tcp连接传递一个消息时,另一端完全可能把分成多个消息。
abort可以立即中断一个TCP连接的一端,此时该端既不能发送数据也不能接收数据。如果有数据正在传输中,可能会出问题。
disconnectFromHost可以在传输结束之后中断TCP连接的一端,此时该端既不能发送数据也不能接收数据。
使用同一个tcp连接在几乎同时传输两个字符串,那这两个字符串会不会混合到一起或者连起来,这真是个让人头痛的问题,谁知道求评论告知。通过定时器设置同时两个短字符串发现没有该情况,所以认为多次使用write函数发送字符串不会混合到一起,一次使用write函数发送过长字符串会分成多个。很不幸,最终发现多次发送的会混合到一起,看来以后要少用特例了呀。
new从堆中申请内存,直接申明则是从栈中申请内存,即申明的变量的生存期是在离它最近的{}之间,new出来的对象直到delete或者进程结束才会释放。
1 Widget::Widget(QWidget *parent) 2 : QWidget(parent) 3 { 4 timer = new QTimer(); 5 timer2 = new QTimer(); 6 timer->setSingleShot(true); 7 timer2->setSingleShot(true); 8 timer->start(1000); 9 timer2->start(1200); 10 connect(timer, SIGNAL(timeout()), this, SLOT(slot1())); 11 connect(timer, SIGNAL(timeout()), this, SLOT(slot2())); 12 connect(timer2, SIGNAL(timeout()), this, SLOT(slot1())); 13 } 14 15 void Widget::slot1() 16 { 17 cout << 1 << endl; 18 qint64 i=1e9; 19 while(i--); 20 } 21 22 void Widget::slot2() 23 { 24 cout << 2 << endl; 25 //while(1); 26 }