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. Avalonia 实现动态托盘

    先下载一个gif图片,这里提供一个gif图片示例 在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn) 使用这个网站将gif切成单张图片 创建一个Avalonia MVVM的项目,将图片 ...

  2. Jenkins CLI命令行

    Jenkins CLI命令行 jenkins不光可以UI操作还提供了命令行接口 位置 首页->系统管理->工具和动作->Jenkins 命令行接口 在这个界面下载一个jenkins- ...

  3. python线程池等待全部任务结束再继续

    import json import time from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED impor ...

  4. 汉诺塔 Java && Cpp 实现

    不论多少盘,都看成是两个盘在移动,只需要把上面的两个盘移动好就行. public static void hanoiTower(int num,char a,char b ,char c) { if( ...

  5. Spring Cloud 2022.0.1 Spring Cloud Zookeeper4.0

    官网: https://spring.io/ 左侧菜单 向下找到 spring Cloud Zookeeper 所有我们希望看到的都在 Reference Doc 中,点击进入 连接zookeeper ...

  6. 打开MASA Blazor的正确姿势2:组件总览

    官网文档按拼音罗列组件,且部分嵌套组件没有在导航栏内列出,不利于浏览查阅.本篇文章的主要目的,主要是对所有组件按大家习惯的方式进行分类,简要介绍组件,并建立跳转官方文档的链接.   一.导航布局类 1 ...

  7. cannot load "mso.dll" vs2008 web开发问题

    已成功解决办法: ①将VS 2008安装包WCUWebDesignerCoreWebDesignerCore.exe提取并重新安装: ②将C:Program Files/Common Files/Mi ...

  8. C端自动化实现:appium+winappdriver+python

    一. 前言 有小伙伴有办公自动化的需求,特此出一篇C端自动化教程,并附带demo案例.C端的自动化比B端多一个appium,其他的操作大同小异. 二. 环境 appium:exe工具,用于启动服务,官 ...

  9. P3804 【模板】后缀自动机 (SAM) && P6139 【模板】广义后缀自动机(广义 SAM)

    普通 \(\text{SAM Code}\) #include <cstdio> #include <iostream> #include <cstring> #d ...

  10. 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树

    LeetCode 654.最大二叉树 分析1.0 if(start == end) return节点索引 locateMaxNode(arr,start,end) new root = 最大索引对应节 ...