QT-事件
冷月醉雪
这个作者很懒,什么都没留下…
展开
-
QEvent整理归纳:140种类型,29个继承类,7个函数,3种事件来源
目录 140种事件类型29个事件继承类7个事件自带函数几个关键的事件处理函数140种事件类型QEvent::None QEvent::AccessibilityDescription QEvent::AccessibilityHelp QEvent::AccessibilityPrepare QEvent::ActionAdded QEvent::Actio...原创 2018-07-23 10:25:07 · 1103 阅读 · 0 评论 -
QObject::deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象
程序编译运行过程很顺利,测试的时候也没发现什么问题。但后来我随手上传了一个1G大小的文件,发现每次文件上传到70%左右的时候程序就崩溃了,小文件就没这个问题。急忙打开任务管理器,这才发现上传文件的时候,程序内存占用会随着上传进度的增加而增加,上传1G文件的时候内存最多会吃到1.5G,这时候程序申请不到更多内存了,我又没做检查,当然就会崩溃掉。 限制上传文件大小这种事我是不会...原创 2018-07-14 17:40:04 · 2596 阅读 · 1 评论 -
QWidget 键盘事件 焦点(QApplication源码)
在Qt中,键盘事件和QWidget的focus密不可分:一般来说,一个拥有焦点(focus)的QWidget或者grabKeyboard()的QWidget才可以接受键盘事件。键盘事件派发给谁? 如何确定谁来接收键盘事件,不妨看一点点QApplication的源码:X11下QETWidget *keywidget=0; bool grabbed=fals...原创 2018-07-14 17:20:45 · 1625 阅读 · 0 评论 -
双击时不运行单击事件——加延时判断
思路很简单,就是加一个延时,判断在特定时间内是否有第二个鼠标事件#ifndef TQT_H_ #define TQT_H_ #include <QtGui> #include <QtCore> class ClickedLabel : public QLabel { Q_OBJECT private: int...原创 2018-07-19 21:04:01 · 754 阅读 · 0 评论 -
通过全局设置过滤器,就能让所有窗口都可移动,而不是都要继承指定QDialog
#include "appinit.h"#include <QMouseEvent>#include <QApplication>#include <QWidget>AppInit::AppInit(QObject *parent) : QObject(parent){ mousePressed = false; qApp->i...原创 2018-07-13 21:58:08 · 346 阅读 · 0 评论 -
Qt自定义事件的实现(军队真正干活,但要增加监军,大平台通知事件,事件内容自定义)
1.Qt中定义事件的长官:QEvent QEvent的任务就是定义一些事件类型Type,它们都定义在了一个enum里。这就是教程中告诉我们的要子类化QEvent,派生出MyEvent,然后在MyEvent中定义事件类型QEvent::Type。 我们子类化的时候模仿一个QEvent就好了,而且是继承,好些都不用子类做了,看一下QEvent类中的成员变量和成员函数,就这些东...原创 2018-07-22 12:04:07 · 82 阅读 · 0 评论 -
QDialog 模态对话框与事件循环
QDialog 对话框非模态QDialog * dlg = new QDialog()dlg->show(); 当然,这儿用指针(即分配到heap中)不是必须的。 (有疑问?或者有时发现窗口一闪而过?那么你需要了解C、C++中变量的作用域和生存周期)。模态QDialog dlg;dlg.exec(); 这种情况下,我们一般都是将对象分...原创 2018-07-20 20:47:26 · 1285 阅读 · 0 评论 -
局部QEventLoop帮助QWidget不消失(也就是有一个局部事件循环始终在运行,导致程序被卡住那里,但仍可以接受事件。说白了就是有一个while语句死活不肯退出,直到收到退出信号)
QEventLoop Manual 中说的很简洁 At any time, you can create a QEventLoop object and call exec() on it to start a local event loop. From within the event loop, calling exit() will force exec() to retu...原创 2018-07-12 10:43:54 · 898 阅读 · 0 评论 -
线程给主窗口发事件(消息),传递字符串
#ifndef CUSTOMEVENT_H#define CUSTOMEVENT_H#include <QEvent>#include <QString>class CustomEvent : public QEvent // 自定义事件{public: CustomEvent(const QString & msg); stat...原创 2018-07-17 19:41:07 · 1028 阅读 · 0 评论 -
QWidget标题栏双击事件(QWidget::event里拦截NonClientAreaMouseButtonDblClick)
widget.hvirtual bool event(QEvent *event);widget.cppbool Widget::event(QEvent *event){ if (event->type() == QEvent::NonClientAreaMouseButtonDblClick) qDebug() << ...原创 2018-07-12 10:13:32 · 2457 阅读 · 0 评论 -
QEventLoop源码
/******************************************************************************** Copyright (C) 2015 The Qt Company Ltd.** Contact: http://www.qt.io/licensing/**** This file is part of the QtCor...原创 2018-07-12 11:16:48 · 1371 阅读 · 0 评论 -
QDialog在hide()之后,就被销毁的原因
int QDialog::exec(){ Q_D(QDialog); if (d->eventLoop) { qWarning("QDialog::exec: Recursive call detected"); return -1; } bool deleteOnClose = testAttribute(Qt::...原创 2018-07-12 11:21:26 · 2179 阅读 · 1 评论 -
isHiden和isVisible的区别(可是有nativeEvent进行设置)
1、isHiden只是返回部件的隐藏属性,并不能表示部件当前的真实状态。比如A部件有个子部件B,而A处于隐藏状态,子部件B必然也不可见,但子部件B本身的isHiden还是为false。 2、判断部件是否可见应该用isVisible属性。 3、对于一个顶层窗口来说,虽然可以不用考虑以上两条,但还是建议使用isVisible来判断可见性。 还有值得注意...原创 2018-07-13 21:24:46 · 4510 阅读 · 0 评论 -
QDialog之屏蔽Esc键(简单深刻,要么重写keyPressEvent然后break忽略此事件,要么重写eventFilter然后return,都是为了忽略此事件)
源码分析 通过查看QDialog的源码,我们很容易会发现keyPressEvent事件中,当按下Esc键时,会默认执行reject()。void QDialog::keyPressEvent(QKeyEvent *e){ // Calls reject() if Escape is pressed. Simulates a button // click ...原创 2018-07-13 12:26:16 · 2211 阅读 · 0 评论 -
QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)
常用事件 因为所有和界面相关的类都是继承自QWidget类,所以QWidget类有的时间和方法,在每个界面相关的类中都有,最常用的一些事件如下:// bool event(QEvent *); // virtual void mousePressEvent(QMouseEvent *); // virtual void mouseReleaseEven...原创 2018-07-18 21:50:39 · 2076 阅读 · 0 评论 -
QEventLoop等待另外一个事件的停止
void MyWidget::SendRequest(QString strUser){ network_manager = new QNetworkAccessManager(); connect(network_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(ReadXML(QNetworkReply*)));...原创 2018-07-18 21:41:28 · 984 阅读 · 0 评论 -
用QFileSystemWatcher来监视文件和目录的改变(内部还是使用了timer)
Qt提供了QFileSystemWatcher类来监视文件和目录的改变。addPath/addPaths: 设置需要监视的文件和目录removePath/removePaths: 移除不需要监视的目录. Signals: 当监视的文件被修改或删除时,产生一个fileChanged()信号。 如果被监视的目录被改变或删除,产生 dire...原创 2018-07-18 21:35:35 · 713 阅读 · 0 评论