首页 > 其他 > 详细

Qt Gui 第七章

时间:2020-02-17 16:02:13      阅读:93      评论:0      收藏:0      [点我收藏+]

1、processEvents

该函数用来处理窗口的各种事件,重绘和event

    for (int row = 0; row < RowCount; ++row) {
        for (int column = 0; column < ColumnCount; ++column) {
            QString str = formula(row, column);
            if (!str.isEmpty())
                out << quint16(row) << quint16(column) << str;
        }
        QThread::sleep(1);
        qApp->processEvents(/*QEventLoop::ExcludeUserInputEvents*/);
    }

 

如上,当执行到那个函数的时候,程序会去调用等待执行的窗口事件;但是如果此时咱们再点击保存等按钮的时候程序依旧会被相应,再次调用该函数,重复执行;所以我们添加该参数

QEventLoop::ExcludeUserInputEvents禁止用户的各种输入,包括按键和鼠标;

 

qApp是QApplication类型的全局变量;

#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))

2、QProgressDialog

 Qt自带的进度条;

    QProgressDialog progress(this);
    progress.setLabelText(tr("Saving %1").arg(fileName));
    progress.setRange(0, RowCount);
    progress.setModal(true);
    for (int row = 0; row < RowCount; ++row) {
        progress.setValue(row);
        qApp->processEvents();
        if (progress.wasCanceled()) {
            file.remove();
            return false;
        }
        for (int column = 0; column < ColumnCount; ++column) {
            QString str = formula(row, column);
            if (!str.isEmpty())
                out << quint16(row) << quint16(column) << str;


        }
        QThread::sleep(1);
    }

 

 3、事件过滤器

当不想子类化窗口部件,又要处理该窗口的事件的时候可以通过事件过滤器来执行;

    textEdit = new QTextEdit;
    textEdit->installEventFilter(this);

如上,将textEdit注册了事件过滤,则当textEdit收到消息的时候,会先到this这个窗口的

bool eventFilter(QObject *watched, QEvent *event);

中执行;如下示例所示:

bool MailClient::eventFilter(QObject *watched, QEvent *event)
{
    if (watched == textEdit) {
        if (event->type() == QEvent::KeyPress) {
            QKeyEvent* keyevent = static_cast<QKeyEvent*>(event);
            if (keyevent->key() == Qt::Key_Space) {
                // do what you want
                return true;
            }
        }
    }
    return QMainWindow::eventFilter(watched, event);
}

 

另外qApp也可以注册事件过滤器

qApp->installEventFilter(this);

则窗口所有的事件都会先经过this的eventFilter;可以用来调试等;也可以处理发送给失效窗口部件的鼠标事件;

 

 

 

 

 

 

 

 

Qt Gui 第七章

原文:https://www.cnblogs.com/czwlinux/p/12321109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!