memoの关于Qt的一些用法记录
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的一些用法记录的更多相关文章
- pt-kill 用法记录
pt-kill 用法记录 # 参考资料Percona-Toolkit系列之pt-kill杀会话利器http://www.fordba.com/percona-toolkit-pt-kill.html ...
- Qt开发的应用记录读取用户习惯设置的方法
Qt开发的应用记录读取用户习惯设置的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/w ...
- CURL 用法记录
CURL 用法记录 在工作中经常需要用到curl 命令,记录一下常用的场景 Send a POST Request with JSON Data curl -d '{"login" ...
- Qt on_pushButton_clicked()的用法【worldsing笔记】
在Qt里按钮控件默认对应一个on_pushButton_clicked()成员,如果想用点击信号,在代码中实现on_pushButton_clicked()成员即可. 最近看了一段代码,里面并没有co ...
- python 一些函数和类用法记录
这一篇主要用来记录在学习过程中遇到的一些觉得有意思的函数或者类的用法,有一些用法感觉很炫酷. 1.collections.defaultdict from collections import def ...
- Qt 格式转换问题 记录(好多方法)
用Qt经常头痛于一些格式不能通用的问题 在此记录备用 1 (20120112)QString转为Char * QString *str; char *a; str="hello word ! ...
- jqueryui / accordion的用法记录
jqueryui 的 widget 中包含了基本上我们都需要的ui组件, 除了那个unslider. 参考地址是: www.jqueryui.com. 要能够看懂/并使用/ 完全掌握的话, 就要使用其 ...
- Qt学习之路(1)------Qt常用类用法说明
Qt常用类 向控制台输出文本 第一个例子,我们采用STL的方式: console.cpp #include <iostream> int main() { std::cout <&l ...
- QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)
QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...
- asp.net 第三方UI控件 Telerik KendoUI 之 TreeVIew 的用法记录
一.前台显示 备注:一次性取出所有节点 function loadTreeData() { $.ajax({ type: 'POST', url: '@(Html.UrlHref("Scri ...
随机推荐
- java入门与进阶P-2.3
判断 if语句 一个基本的if语句由一个关键字if开头,跟上在括号里的表示条件的逻辑表达式, 然后是一对大括号"{}"之间的若干条语句.如果表示条件的逻辑表达式的结果为true,那 ...
- .NET与大数据
前言 当别人做大数据用Java.Python的时候,我使用.NET做大数据.数据挖掘,这确实是值得一说的事. 写的并不全面,但都是实际工作中的内容. .NET在大数据项目中,可以做什么? 写脚本(使用 ...
- 【随笔记】T507 ADC SGM58031 16BIT 4Channel 调试记录
文章介绍 本文主要描述在 T507 Android 10 Linux 4.9 平台下,调试 SGM58031 芯片的记录,实现单芯片实时采集外部四通道的电压数值. 芯片介绍 SGM58031 是一款低 ...
- Docker容器使用 (入门到精通)
Docker容器 CentOS安装Docker Docker 分为 CE 和 EE 两大版本.CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月. D ...
- 12月7日内容总结——jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解
目录 一.jQuery查找标签 基本选择器 层级选择器 基本筛选器 属性选择器 表单筛选器 筛选器方法 二.操作标签 样式操作(class操作) 位置操作 尺寸 文本操作 创建标签 属性操作 文档处理 ...
- 六、python基础知识之变量常量、索引取值和PEP8规范
目录 一.变量与常量 1.什么是变量? 2.什么是常量? 变量的基本使用 变量使用的语法结构与底层原理 变量名的命名规范和命名风格 变量的命名风格 常量的基本使用 二.索引取值 三.PEP8规范 1. ...
- CesiumJS PrimitiveAPI 高级着色入门 - 从参数化几何与 Fabric 材质到着色器 - 上篇
目录 0. 基础 0.1. 坐标系基础 0.2. 合并批次 1. 参数化几何 1.1. 几何类清单 1.2. 举例 1.3. 纯手搓几何 1.4. *子线程异步生成几何 2. 使用材质 2.1. 外观 ...
- 一个比 Redis 性能更强的数据库
给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程.内存效率和高吞吐量.除了性能改进外,KeyDB还提供主动复制.闪存和子密钥过期等功能.KeyDB ...
- 微信小程序wxs封装使用以及公共js组件封装
wxs封装 wxs可以直接写在wxml页面中,并且在对应的位置调用,比如在{{ xxx.xxx() }}调用wxs的函数 <view> <view>第{{m1.getMax(1 ...
- JZOJ 1082. 【GDOI2005】选址
\(\text{Problem}\) 很久以前,在世界的某处有一个形状为凸多边形的小岛,岛上的居民们决定建一个祭坛,居民们任务祭坛的位置离岛的顶点处越远越好. 你的任务是求凸多边形内一点,使其与各顶点 ...