Qt|QDialog的创建及使用

news2024/11/25 0:21:41

文章目录

  • 创建一个新的类继承QDialog
  • 设置标题
  • 去掉问号,只保留关闭
  • 使窗口在屏幕中心显示
  • 设置窗口大小
  • QDialog没有任务栏窗口图标问题
  • 将窗口永远置于上层可见 不会被遮盖
  • 阻塞除当前窗口之外的所有窗口
  • 添加closeEvent hideEvent同理
  • 调用dialog类接收dialog返回状态(确认或者取消)
  • 解决中文乱码问题
  • dialog整体代码

创建一个新的类继承QDialog

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

设置标题

setWindowTitle("dialog练习");

去掉问号,只保留关闭

// 去掉问号,只保留关闭
setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);

使窗口在屏幕中心显示

// 添加头文件
#include <QGuiApplication>
#include <QScreen>

QScreen *mScreen = QGuiApplication::screens().first();
this->move((mScreen->geometry().width() - this->width()) / 2, (mScreen->geometry().height() - this->height()) / 2);

设置窗口大小

// 设置窗口大小
resize(300,300);

QDialog没有任务栏窗口图标问题

// 需要在头文件将构造函数的父类设置为nullptr 
MyQDialog(QWidget *parent = nullptr);
~MyQDialog();

将窗口永远置于上层可见 不会被遮盖

setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

阻塞除当前窗口之外的所有窗口

setWindowModality(Qt::ApplicationModal);

添加closeEvent hideEvent同理

右键类名,如下图选择。
在这里插入图片描述
勾选closeEvent 点击确认即可。
在这里插入图片描述
也可自己手动添加代码如下:

// 头文件添加
protected:
	virtual void closeEvent(QCloseEvent *event) override;
// cpp添加
void MyQDialog::closeEvent(QCloseEvent *event)
{
	throw std::logic_error("The method or operation is not implemented.");
}

调用dialog类接收dialog返回状态(确认或者取消)

首先创建确认和取消按钮,也可不添加取消按钮关闭窗口默认为取消,创建一个类内全局变量用于记录状态,在按钮的槽函数里改变变量状态。
dialog类内添加代码示例如下:

// dialog头文件添加
void SlotCancelClicked();		// 取消按钮槽函数
void SlotDefineBtnClicked();	// 确定按钮槽函数
QPushButton* define_pushbutton_;		// 确定
QPushButton* cancel_pushbutton_;		// 取消
bool is_accept;
// cpp添加
// 初始化函数里添加
is_accept = false;
QHBoxLayout* button_group_layout = new QHBoxLayout(this);
button_group_layout->addSpacerItem(new QSpacerItem(0, 25, QSizePolicy::Expanding, QSizePolicy::Fixed));
define_pushbutton_ = new QPushButton("确定");
button_group_layout->addWidget(define_pushbutton_);
cancel_pushbutton_ = new QPushButton("取消");
button_group_layout->addWidget(cancel_pushbutton_);


void MyQDialog::InitConnect()
{
	connect(cancel_pushbutton_, &QPushButton::clicked, this, &MyQDialog::SlotCancelClicked);
	connect(define_pushbutton_, &QPushButton::clicked, this, &MyQDialog::SlotDefineBtnClicked);
}

void MyQDialog::SlotCancelClicked()
{
	// dosomething
	close();
}

void MyQDialog::SlotDefineBtnClicked()
{
	is_accept = true;
	// dosomething
	close();
}

void MyQDialog::closeEvent(QCloseEvent *event)
{
	if (is_accept)
		QDialog::accept();
	else
		QDialog::reject();
}

调用类添加代码如下:

// 头文件
std::shared_ptr<MyQDialog> my_dialog_;
// cpp
my_dialog_ = std::make_shared<MyQDialog>(); 
if (my_dialog_->exec() == QDialog::Rejected)
	exit(0);
else
	QMessageBox::information(this, "提示", "即将进入主界面。");

解决中文乱码问题

Qt解决中文乱码几种方法

dialog整体代码

.h

#pragma once

#include <QDialog>

class MyQDialog : public QDialog
{
	Q_OBJECT

public:
	MyQDialog(QWidget *parent = nullptr);
	~MyQDialog();

private:
	void Init();			// 初始化函数
	void InitConnect();		// 连接槽函数
	void SlotCancelClicked();		// 取消按钮槽函数
	void SlotDefineBtnClicked();	// 确定按钮槽函数

	QPushButton* define_pushbutton_;		// 确定
	QPushButton* cancel_pushbutton_;		// 取消
	bool is_accept;
protected:
	virtual void closeEvent(QCloseEvent *event) override;

};

.cpp

#pragma execution_character_set("utf-8")
#include "MyQDialog.h"
#include <QGuiApplication>
#include <QScreen>
#include <QHBoxLayout>
#include <QPushButton>

MyQDialog::MyQDialog(QWidget *parent)
	: QDialog(parent)
{
	Init();
	InitConnect();
}

MyQDialog::~MyQDialog()
{
}

void MyQDialog::Init()
{
	// 将窗口永远置于上层可见 不会被遮盖
	//setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
	// 阻塞除当前窗口之外的所有窗口
	//setWindowModality(Qt::ApplicationModal);
	// 去掉问号,只保留关闭
	setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);
	// 设置窗口标题
	setWindowTitle("dialog练习");
	// 设置窗口大小
	resize(250,70);
	// 使窗口在屏幕中心显示
	QScreen *mScreen = QGuiApplication::screens().first();
	this->move((mScreen->geometry().width() - this->width()) / 2, (mScreen->geometry().height() - this->height()) / 2);

	is_accept = false;
	QHBoxLayout* button_group_layout = new QHBoxLayout(this);
	button_group_layout->addSpacerItem(new QSpacerItem(0, 25, QSizePolicy::Expanding, QSizePolicy::Fixed));
	define_pushbutton_ = new QPushButton("确定");
	button_group_layout->addWidget(define_pushbutton_);
	cancel_pushbutton_ = new QPushButton("取消");
	button_group_layout->addWidget(cancel_pushbutton_);
}

void MyQDialog::InitConnect()
{
	connect(cancel_pushbutton_, &QPushButton::clicked, this, &MyQDialog::SlotCancelClicked);
	connect(define_pushbutton_, &QPushButton::clicked, this, &MyQDialog::SlotDefineBtnClicked);
}

void MyQDialog::SlotCancelClicked()
{
	// dosomething
	close();
}

void MyQDialog::SlotDefineBtnClicked()
{
	is_accept = true;
	// dosomething
	close();
}

void MyQDialog::closeEvent(QCloseEvent *event)
{
	if (is_accept)
		QDialog::accept();
	else
		QDialog::reject();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 JavaScript 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

一、题目描述 跳房子&#xff0c;也叫跳飞机&#xff0c;是一种世界性的儿童游戏。 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格&#xff0c;然后获得一次选房子的机会&#xff0c;直到所有房子都被选完&#xff0c;房子最多的人获胜。 跳房子的过程中&…

XGBoost超参数调优指南

本文将详细解释XGBoost中十个最常用超参数的介绍&#xff0c;功能和值范围&#xff0c;及如何使用Optuna进行超参数调优。 对于XGBoost来说&#xff0c;默认的超参数是可以正常运行的&#xff0c;但是如果你想获得最佳的效果&#xff0c;那么就需要自行调整一些超参数来匹配你的…

jupyter lab升级或者安装插件后编译失败

错误回显 报错提示&#xff1a;please run ‘jupyter lab build’ on the server for full output&#xff0c;那么就进入prompt执行一下jupyter lab build 继续接着报错 If you dont already have a jupyter_config.py file, you can create one by adding a blank file of th…

线下实体衰落,真是电商惹祸?实是贪婪以及服务理念落后所致

网上时不时就有人指责电商的兴起导致了线下实体衰落&#xff0c;然而如果各位比较了线下实体与电商的差异&#xff0c;就会明白导致如此结果完全是咎由自取&#xff0c;因为线下实体太贪婪以及服务理念落后于时代。 笔者最近就购买了某款国产手机&#xff0c;在该国产手机品牌的…

集显独显并存,ubuntu安装显卡驱动的坑

一、安装和启动黑屏卡死 1、怎么办&#xff1f;显示器先接集显&#xff0c;完成驱动安装。 &#xff08;1&#xff09;屏蔽nouveau驱动 只要是安装过NVIDIA显卡驱动的&#xff0c;nouveau一般都被禁止了。可以通过命令&#xff1a; lsmod | grep nouveau 查看。如果没有任…

实现设备的延时控制

1. 引言 当搭建IoT管理后台后&#xff0c;APP、设备、云端三端就可以实现交互&#xff1b;当点击APP中的控制按钮&#xff0c;其控制指令就可以经过云端转发到设备执行&#xff0c;当设备执行后将设备的状态上报到云端&#xff0c;APP通过轮训可以取到设备此时的状态&#xff0…

Spring Boot 优雅集成 Spring Security 5.7(安全框架)

Spring Boot 集成 Spring Security &#xff08;安全框架&#xff09; 本章节将介绍 Spring Boot 集成 Spring Security 5.7&#xff08;安全框架&#xff09;。 &#x1f916; Spring Boot 2.x 实践案例&#xff08;代码仓库&#xff09; 介绍 Spring Security 是一个能够为基…

为行业变革注入新动能,行易道入选“高工智能汽车智驾榜单”

6月8日到9日&#xff0c;2023高工智能汽车开发者大会在上海成功举行。与会期间&#xff0c;北京行易道科技有限公司&#xff08;以下简称“行易道”&#xff09;营销副总裁袁泽雁带来了以“车载毫米波雷达进入成像时代”主题演讲&#xff0c;为大家分享了4D毫米波雷达如何以“新…

Java网络开发(Tomcat异步分页+增删改查)——从同步到异步 从jsp 到 js + axios + vue 实现 数据分页显示 数据增删改查

目录 引出一些固定的东西1.固定的响应格式2.name 变成 v-model 进行双向绑定3.下拉框选中--:value"type.id" v-model"companyDb.typeId"4.vue导包固定写法5.script固定写法6.axios的get请求7.axios的post请求---let params new URLSearchParams()8.前端美…

MYSQL 在优化器缺陷在次验证,与MYSQL 熄火了 还是 成熟了??

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

聊聊我做 NeRF-3D重建性能优化经历

我们新推出大淘宝技术年度特刊《长期主义&#xff0c;往往从一些小事开始——工程师成长总结专题》&#xff0c;专题收录多位工程师真诚的心路历程与经验思考&#xff0c;覆盖终端、服务端、数据算法、技术质量等7大技术领域&#xff0c;欢迎一起沟通交流。 本文为此系列第四篇…

飞桨携手第二届GitLink开源夏令营,邀你参与顶尖开源项目!

想参与顶尖开源项目开发&#xff1f; 想熟悉开源社区参与流程&#xff1f; 想获得资深导师指导和丰厚现金奖励&#xff1f; 机会来啦&#xff01; 2016年9月&#xff0c;飞桨框架正式开源&#xff0c;其兼备易用性、高效性、灵活性和可扩展性等特点。如今&#xff0c;百度飞桨在…

软件工程:说透软件5种常见的部署策略

hi&#xff0c;我是熵减&#xff0c;见字如面。 在软件工程中&#xff0c;最终的价值交付&#xff0c;都是要通过软件的部署上线来完成的。 那如何将新的或改进的软件功能交付给用户&#xff0c;同时还要确保高质量、稳定性和用户体验&#xff0c;选择适当的部署策略变得至关重…

数字中国,开鸿见日

讲个小故事&#xff0c;《晋书乐广传》记载&#xff0c;西晋名士乐广&#xff0c;请大文学家潘岳替自己写一篇文章。潘岳让乐广把意思完完整整告诉他&#xff0c;再由他来动笔&#xff0c;最终写成了名扬当时的《呈太尉辞河南尹表》。时人看过这篇文章&#xff0c;评价乐广是“…

WPF开发txt阅读器5:书籍管理系统,文件夹对话框

文章目录 书柜类文件夹对话框验证 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定 书柜类 任何小说阅读器&#xff0c;都免不了要有一个书架功能&#xff0c;而所谓书架&#xff0c;其实就是一个文件夹&#xff0c;通过对…

postgre查询今天,昨天的数据

昨天数据 SELECT* FROMsys_device WHERE age(current_date,to_timestamp(substring(update_time FROM 1 FOR 10),yyyy-MM-dd)) 1 days; 今天数据 SELECT* FROMsys_device WHERE to_char(update_time:: DATE, yyyy-MM-DD hh 24: mi :s) to_char(CURRENT_DATE:: DATE, …

nodejs+vue+mysql汽车新闻资讯网站jtw43

本汽车资讯网站有管理员和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;汽车品牌管理&#xff0c;价格分类管理&#xff0c;经销商管理&#xff0c;汽车信息管理&#xff0c;留言板管理&#xff0c;系统管理等。用户可以查看各种汽车信息&#xff0c;还可以进行…

无人机上仅使用CPU实时运行Yolov5(OpenVINO实现)(上篇)

Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台&#xff0c;如Jetson Tx2&#xff0c;NX。而Nvidia平台在运行深度学习算法方面具有很大优势&#xff0c;两种平台各有利弊。但是&#xff0c;Intel OpenVINO的推出允许NUC平台实时运行深度学习模型&#xff0c;如目前…

Zookeeper 3.5.7

文章目录 1、Zookeeper 入门1.1 概述1.2 特点1.3 数据结构1.4 应用场景 2、本地安装2.1 本地模式安装2.2 配置参数解读 3、集群操作3.1 集群操作3.1.1 集群安装3.1.2 选举机制&#xff08;面试重点&#xff09;3.1.3 集群启停脚本 3.2 客户端命令行操作3.2.1 命令行语法3.2.2 z…