Qt自动调整窗口尺寸

之前写过,方法就是:

QTimer::singleShot(0, this, [this]{ this->adjustSize(); });

重复记录一下。

如何把一个Modal的窗口放到QMainWindow的中心显示

也挺有意思。其实就是

auto* dlg = new MyDialog(nullptr); // 这里最好是设置为nullptr,后面记得delete掉。
dlg->setModal(true);
dlg->show(); // 关键就是这里。先show一下,然后下面去move
dlg->move(mainWindow->frameGeometry().center() - dlg->rect().center());

关于子窗口,如果是要设置为FrameLess的,如果子窗口还有parent,显示上就会有问题。所以,我觉得设置为nullptr更好用一些。

Qt多线程的一些问题

都是热乎的。

QThread::create

利用QThread::create可以很方便的创建一个异步调用的函数。简单的示例如下:

auto* thread = QThread::create([]{
for (int i=0; i<100; ++i) {
// do something
QThread::msleep(100);
}
});
connect(thread, &QThread::finished, &Qbject::deleteLater); // 记得释放掉
thread->start(); // qt文档特别声明:只调用1次start

connect有意思的地方

connect(thread, &Thread::finished, [thread]{qDebug() << QThread::currentThreadId(); thread->deleteLater(); });
connect(thread, &Thread::finished, this, [thread]{qDebug() << QThread::currentThreadId(); thread->deleteLater(); });

运行一下就能看到,上面的connect是在thread线程内执行的;而下面的则是在this所在的线程执行的(this多半是QMainWindow)。

加载进度窗

当然,如果只是上面这点东西,不值得记录下来。举个实际的例子。在QMainWindow内,我们想要实现一个加载文件的action,然后加载文件的期间可能会比较慢,在这期间放置一个加载窗在哪里摇啊摇。

首先是加载的窗口:

WaitingDialog::WaitingDialog(QWidget *parent) : QDialog(parent), ui(new Ui::WaitingDialog)
{
ui->setupUi(this); this->setModal(true);
this->setWindowFlags(Qt::FramelessWindowHint); // 设置窗口无边框
this->setAttribute(Qt::WA_TranslucentBackground); // 窗口的背景透明。如果gif是透明的更好 // 用movie来播放动画
auto *movie = new QMovie(ui->label);
movie->setFileName(":/res/waiting.gif");
ui->label->setMovie(movie); // UI文件就是放了一个QLabel
movie->start();
}

然后我们就可以开始加载操作了:

// 首先显示一个WaitingDialog
auto *dlg = new WaitingDialog(nullptr);
dlg->show();
dlg->move(this->frameGeometry().center() - dlg->rect().center()); // 创建一个线程,异步调用LoadFile的操作。
auto *thread = QThread::create([this] {
this->loadFile(); // 不可出现ui相关的操作,qt不允许子线程操作ui的。
}); // 记得加上结束后的回调,放到主线程执行。主线程可以处理UI。
connect(thread, &QThread::finished, this, [this, dlg, thread] {
this->updateUI();
dlg->close();
dlg->deleteLater(); // 别忘了删掉等待窗口
thread->deleteLater(); // 别忘了删掉线程
}); // 最关键的别忘了start。一次就好。
thread->start();

memoの关于Qt的一些用法记录的更多相关文章

  1. pt-kill 用法记录

    pt-kill 用法记录 # 参考资料Percona-Toolkit系列之pt-kill杀会话利器http://www.fordba.com/percona-toolkit-pt-kill.html ...

  2. Qt开发的应用记录读取用户习惯设置的方法

    Qt开发的应用记录读取用户习惯设置的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/w ...

  3. CURL 用法记录

    CURL 用法记录 在工作中经常需要用到curl 命令,记录一下常用的场景 Send a POST Request with JSON Data curl -d '{"login" ...

  4. Qt on_pushButton_clicked()的用法【worldsing笔记】

    在Qt里按钮控件默认对应一个on_pushButton_clicked()成员,如果想用点击信号,在代码中实现on_pushButton_clicked()成员即可. 最近看了一段代码,里面并没有co ...

  5. python 一些函数和类用法记录

    这一篇主要用来记录在学习过程中遇到的一些觉得有意思的函数或者类的用法,有一些用法感觉很炫酷. 1.collections.defaultdict from collections import def ...

  6. Qt 格式转换问题 记录(好多方法)

    用Qt经常头痛于一些格式不能通用的问题 在此记录备用 1 (20120112)QString转为Char * QString *str; char *a; str="hello word ! ...

  7. jqueryui / accordion的用法记录

    jqueryui 的 widget 中包含了基本上我们都需要的ui组件, 除了那个unslider. 参考地址是: www.jqueryui.com. 要能够看懂/并使用/ 完全掌握的话, 就要使用其 ...

  8. Qt学习之路(1)------Qt常用类用法说明

    Qt常用类 向控制台输出文本 第一个例子,我们采用STL的方式: console.cpp #include <iostream> int main() { std::cout <&l ...

  9. QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

    QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...

  10. asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录

    一.前台显示 备注:一次性取出所有节点 function loadTreeData() { $.ajax({ type: 'POST', url: '@(Html.UrlHref("Scri ...

随机推荐

  1. 服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP))

    服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP)) 第一步.更换阿里云 yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo  ...

  2. 学习ASP.NET Core Blazor编程系列二十三——登录(3)

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  3. QQ、微信、微博、空间等分享链接接入

    一.HTMl代码 1.隐藏标签用于获取信息 <img style="display:none" id="coverImage" src="@it ...

  4. cnpm : 无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 1

    出现问题原因: 使用vscode终端powershell控制台查看cnpm版本或者运行cnpm的相关命令时提示如标题错误(cmd控制台提示:'cnpm' 不是内部或外部命令,也不是可运行的程序或批处理 ...

  5. 软件设计师考试备考之UML

    UML 统一建模语言是面向对象软件的标准化建模语言. 事务 结构事务 UML模型中的名称,它们通常是模型的静态部分,描述概念或物理元素 图形表示: 行为事务 UML模型中的动态部分.它们是模型中的动词 ...

  6. JWT的原理及使用

    目录 JWT的原理及使用 一.什么是JWT? 二.签发认证流程 三.使用方法 1.设置登录接口 2.设置过期事件 3.定制返回格式 4.配置认证类和权限类 5.写登录逻辑 5.配路由 JWT的原理及使 ...

  7. Android  JetPack~ ViewModel (一)   介绍与使用

      Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发 Android  JetPack~ DataBinding(数据绑定)(一)    集成与使用 Android ...

  8. 使用springboot cache + redis缓存时使用gzip压缩以提升性能

    背景 在高并发的场景中,我们通常会使用缓存提升性能.在使用springboot cache时,我们通常会使用基于JSON的序列化与反序列化. JSON具有可读性强,结构简单的特点,使用灵活. 但是JS ...

  9. windows server backup 无法使用或wbadmin.msc致命错误解决方法

    因为黑群辉断电无法自动引导进系统,我也找不到很好的办法,所以决定使用windows server来做NAS服务器,虽然都解决了内网穿透的问题,但是数据安全还在找方案,目前已经解决: 1.购买了一张pc ...

  10. Moonraker

    Moonraker 目录 Moonraker 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.3 目录分析 1.3.1 /services/ 1.3.2 /svc-inq/salesmoon ...