qt 系列(一)---qt designer设计常用操作

最近转战qt, 主要用qt designer 进行GUI开发,记录下实战经验~

1.前言

qt 是跨平台C++图形用户界面应用程序开发框架,可以使用的IDE工具有 qt creator 和 vs, 这里我主要使用 Visual Studio 2017 工具进行程序开发与编写。

2. 环境配置

只写关键步骤~~

(1)安装vs2017+ qt5.9

[Visual Studio Community] 免费使用,到期之后注册登录下就可以永久使用,下载地址:https://visualstudio.microsoft.com/zh-hans/free-developer-offers/ 。
安装时,选择工作负载勾选使用c++的桌面开发,并将C++/CLI支持勾选。
若是windows8,将Windows8.1 SDK 和 UCRT SDK勾选;
若是windows10,勾选windows10 SDK 、 Windows8.1 SDK 和 UCRT SDK。

qt 下载地址:https://download.qt.io/archive/qt/
安装过程略

(2)vs2017 配置qt

  1. 安装完qt 和 vs之后,需要在vs2017中配置下qt
  2. vs2017 工具–扩展与更新 搜索qt,进行下载与安装Qt VS Tools
  3. 重新启动VS2017,菜单栏会出现 QT VS Tools
  4. Qt VS Tools --Qt Version 中配置qt ,D:\app\Qt\Qt5.9.9\5.9.9\msvc2017_64 改成自己安装的路径
3. 项目导入

3.1 QT VS Tools 导入 .pro 文件

QT VS Tools 中导入 QT 文件是导入.pro文件, 是初始化配置文件;如果新增了.ui /.qrc需要在.pro文件中添加,打开.pro文件时才会默认加载;或者直接通过文件打开.vcxproj, 会加载最新配置。

在这里插入图片描述

3.2 通过.sln 打开解决方案

VS2017 文件–打开–项目/解决方案 , 打开的是 .sln文件

3.3 打开别人的.sln项目时,一般需要配置

  1. 右键项目–选择属性
  2. 常规–Windows SDK版本,选择自己已经安装的sdk版本[10.0.17763.0]
  3. 常规–平台工具集,选择已经安装的平台工具集[Visual Studio 2017 (v141)]
  4. Qt Project Settings–Qt Installation, 选择自己安装的[qt2017_64]
  5. C/C++ --常规,配置相应的附加包含目录(include 和 lib 文件)
  6. 链接器–常规,配置相应的附加库目录
  7. 链接器–输入。配置附加依赖项(lib文件)
4.项目目录结构

在这里插入图片描述

外部依赖项: 自动加载编程中引入的文件,一般不需要修改;
Form Files: 存放 .ui 文件;
Header Files:存放 .h 文件;
Resource Files: 存放资源文件,最常见的是.png文件,用于ui 设计,添加样式表-自定义背景图片;
Source Files: 存放 .cpp 源文件

4.1 UI 界面设置
项目文件中 Form Files 文件中存放 .ui文件, 可以基于此文件在Qt Designer窗口中进行UI设计

(1) .ui文件打不开或闪退的原因:不能使用原来默认的打开方式,打开方式要选择自己安装的qt designer.exe文件。
(2) 修改了ui 文件, vs工程中没有及时同步,可以先选中ui文件进行编译,编译之后在重新生成解决方案就可以使用最新的ui文件了, 若还是不可以,需要重新打开项目。

5.qt designer 设计常用操作

.ui 文件一旦创建,不要随意修改其名称,否则容易报错

  1. 创建ui文件
    选择Form Files–添加–新建项–Qt–Qt MainWindow Form File/Qt Widget Form File/Qt Dialog Form File 创建对应的窗口文件。其中MainWindow Form File自带 菜单栏,工具栏和状态栏,根据需求进行创建。
  2. qt designer 常用工具:属性编辑器, 对象查看器,动作编辑器,信号/槽编辑器,资源浏览器;
  3. 修改窗口名称:属性:windowTitle ;在对象查看器中点击窗口类对象,在属性编辑器中搜索即可找到,可以修改窗口名称;
  4. MainWindow 窗口改变菜单栏/子菜单顺序,直接拖拽;
  5. 改变MainWindow 菜单背景颜色:对象查看器中点击菜单menubar,然后去属性编辑器中进行改变样式表(styleSheet):
    background-color: rgb(34, 68, 102); //背景颜色
    color:rgb(255, 255, 255) //字体颜色
  6. MainWindow 添加工具栏:直接将动作编辑器拖拽到工具栏即可;对象查看器:QToolBar --属性编辑器:toolButtonStyle 选择ToolButtonTextBesideIcon,可以设计图标和文本一起显示;
  7. QToolBar 添加资源图像时要建立.qrc文件导入项目中,否则图标容易加载失败;
  8. layout无法改变样式表,可以先将layout变成Wiget,然后再针对背景\控件添加颜色(改变样式表),
    font: 25 10pt “Microsoft YaHei” ; //字体样式
    font: Bold; // 字体加粗
    color:rgb(144, 187, 255) //颜色
  9. 控件随窗口大小而变化:一开始布局为栅格布局,充满整个窗口, 在栅格布局中进行各种类型的布局,布局完成时选择 栅格布局,控件便可以随窗口变化而变化;
  10. 同一窗口显示不同界面: Container–>Tab Widget/Stacked Widget ,修改tab名称:currentTabText
    border-width:0;border-style:outset 无边框
    font: 25 9pt “Microsoft YaHei UI Light”;
  11. Container–>Scroll area 没有出现滚动条 :scrollArea < scrollAreaWidgetContents; 勾掉widgetResizable
  12. label 字体加粗(样式表): font-weight: bold
  13. LineEdit默认设置垂直策略为Fixed, 所以一定其垂直框中一定加弹簧,不然,界面显示间隔控件很大,很难看
  14. 信号与槽:信号指动作, 槽指函数;
    内置控件函数:可以通过qt designer直接调用: Edit–>编辑信号/槽,可以进行控件内置函数建立信号与槽的连接;
    自定义槽函数,需要先在主文件.h中定义成员函数,然后在.cpp中实现函数功能,最后connect实现跳转。注:函数名不得与类名重复。
xxx.h中:
private slots:void test();
};.cpp中: 需要先引入#include "xxx.h"文件
void XxxWindow::test()
{GuidWidget* guid = new GuidWidget();guid -> show();  //展示某个页面
}//在qt designer中添加信号与槽函数,不可在.c文件中重复添加,否则容易触发两遍
connect(ui->actionGuide, SIGNAL(triggered()), this, SLOT(test()));
6.编程常用语句
  1. 页面切换:stackedWidget 切换页面:ui->stackedWidget->setCurrentIndex(0);获取第一页;
//绑定按钮进行切换
connect(ui->pushButton, &QPushButton::clicked, [this]() {ui->stackedWidget->setCurrentIndex(1); });
  1. 按钮置灰不可点击:
ui->pushButton_2->setEnabled(false);
  1. qt designer Qlabel text 等于lineEdit 值:
ui->label_12->setText(ui->lineEdit_2->text())
  1. qt designer setText()中文乱码 : QString::fromLocal8Bit
setText(QString::fromLocal8Bit("完成"))
  1. if 语句相等判断条件,注意乱码影响 :ui->pushButton_5->text() == QString::fromLocal8Bit(“完成”),如果不这么写,乱码对比,等式永不成立。
  2. lineEdit 值设置为变量(j)+固定值:
QString new_j = QString::number(j) ;  //int 转 QString
lineEdit->setText(QString::fromLocal8Bit("站点" )+ new_j);  //j 也需要是QString类型
  1. QMessageBox: 生成消息对话框
QMessageBox::information(this, "Title", QString::fromLocal8Bit("确定删除此项目! "));
  1. setStretch()方法指定了包含在该布局中的行或列所占据的窗口部件在该行或该列中所被拉伸的比例
horizontalLayout_42->setStretch(0, 1); 代表第1列占比1份;0代表第1列/行,1代表占比
  1. 输出变量:qDebug() << a
  2. qt 将内容打印到日志文件:
#include<fstream>
std::ofstream fout("out.log"); //输出到 out.log文件
std::cout.rdbuf(fout.rdbuf());  //初始化
std::cout << "11111111" << std::endl; //输出的内容
  1. QString之simplified() :函数把一个字符串首尾的空格不可见字符全部清除,字符串中间的空格(包括单个空格、多个空格、‘\t’, ‘\n’, ‘\v’, ‘\f’, ‘\r’, and ’ ')都统一转化成一个空格。
例:
QString a =" a b    c  d   "; 
a.simplified(); -->输出 :"a b c d"
  1. 信号与槽
    (1)pushbutton 与 QAction 连接槽函数:
    triggered() 与 clicked() 的区别:
    clicked():一般指点击、按下,用于Button发射的信号;
    triggered():QAction等的触发;
    activated():一般指控件被激活(激活原因可以有很多);
    toggle(): 用于ChekBox,非开即关;在Qt中,checkable按纽或是图标的槽函数应该用toggled()事件来激活。
动作编辑器触发自定义槽函数:
connect(ui->actionSaveAs, SIGNAL(triggered()), this, SLOT(saveProject()));按钮触发自定义槽函数
connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(setSite()));按钮触发内置槽函数
connect(ui->pushButton_5, &QPushButton::clicked, [this]() {});当函数名命名为: on_pushbutton对象名_clicked()时,无需写connect,也可以触发;
  1. 获取QLineEdit更新后的值
    当我们更新了Line Edit控件中的值时,我们希望获取最新的值,可以使用textEdited()信号, 意思是text内容编辑时产生信号。
    例如:当修改Line Edit 内容时,我们获取最新值
connect(QLineEdit_test, SIGNAL(textEdited(const QString&)), this, SLOT(test()));  //可以获取QLineEdit更新后的值
//自定义槽函数
QString  newProject::test() {value_edit = QLineEdit_test->text(); //QLineEdit 为edit控件对象名称return value_edit;
}
  1. 清空horizontalLayout布局内的所有元素
    QLayoutItem *child;while ((child = ui-> horizontalLayout_test->takeAt(0)) != 0)   //ui-> horizontalLayout_test 为对应的horizontalLayout{//setParent为NULL,防止删除之后界面不消失if (child->widget()){child->widget()->setParent(NULL);}delete child;}
  1. 删除Tab Widget的某一页 tab
    int temp_tabCount = ui->tabWidget_test->count() - 1;  //ui->tabWidget_test 为tab控件对象名称,,计算此控件下共有多少Tab页;for (int i = temp_tabCount; i >= 2; i--)  //仅留一页tab{qDebug() << " remove tab: " << i;ui->tabWidget_test->removeTab(i);  //删除tab页}
7. qt 打包成exe 文件发布

qt debug 下的 exe 可以直接运行吗?不能单纯的copy exe文件,需要进一步打包成文件:(有待验证)
(1)将qt release 文件夹下的 .exe文件单独copy到新建文件夹下
(2)打开 Qt5.9.9(MSVC 2015 32-bit ) ,安装qt时自动安装,版本有所不同
(3)Qt5.9.9(MSVC 2015 32-bit ) 切换到新建文件夹目录路径
(4)输入命令 windeployqt 程序名 回车,将所需的库文件copy到exe文件夹下
(5)双击可以运行,可以打包压缩发给其他用户使用

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apriori算法

Apriori算法是关联规则挖掘算法&#xff0c;也是最经典的算法。 Apriori算法是一种用于挖掘数据集中频繁项集的算法&#xff0c;进而用于生成关联规则。这种算法在数据挖掘、机器学习、市场篮子分析等多个领域都有广泛的应用。 Apriori算法是为了发现事物之间的联系的算法&am…

弱覆盖栅格图层制作

栅格边界生成及图层制作 栅格边界polygon生成 提取的弱覆盖栅格数据中包含了栅格中心经度和栅格中心维度&#xff0c;我们根据栅格中心经纬度生成对应的栅格边界POLYGON&#xff08;20米*40米&#xff09; 计算公式&#xff1a;polygon(栅格中心经度-0.00017 栅格中心纬度0.00…

详解—数据结构《树和二叉树》

目录 一.树概念及结构 1.1树的概念 1.2树的表示 二.二叉树的概念及结构 2.1概念 2.2二叉树的特点 2.3现实中的二叉树 2.4数据结构中的二叉树 2.5 特殊的二叉树 2.6二叉树的存储结构 2.6.1二叉树的性质 2.6.2 顺序结构 2.6.3链式存储 三. 二叉树的链式结构的遍历 …

【C语言_题库】C语言:编写一个程序,输入一组字符串,将字符串中的小写字母转换为大写字母,其它字符不变,并输出。

把键盘输入的一行字符串的小写字母转换成大写字母,其余字符不变,进行输出,直到遇到回车为止。 具体说明 【问题描述】 从键盘输入一行英文字符串,把所有小写字母变成大写字母,其他字母和字符保持不变。 【输入形式】 输入一行字符串,含大小写。 【输出形式】 输出大写字…

Yusi技术资讯博客wordpress模板

Yusi技术资讯博客wordpress模板&#xff0c;从第一感觉看上去&#xff0c;两栏结构直接将网站的内容展现&#xff0c;以红白灰色调搭配&#xff0c;一种低调协调的风格&#xff0c;喜欢该wordpress主题的朋友可以下载试试。 下载地址&#xff1a;https://bbs.csdn.net/topics/…

图的深度优先遍历的六种应用附Java代码

目录 无向图的连通分量个数 单纯求出了连通分量个数 能具体返回哪几个点是同一个连通分量 路径问题 单源路径问题 从某个顶点到另一个顶点的路径问题 检测无向图中的环 二分图的检测 无向图的连通分量个数 单纯求出了连通分量个数 import java.util.ArrayList;publi…

DoLa:对比层解码提高大型语言模型的事实性

DoLa&#xff1a;对比层解码提高大型语言模型的事实性 摘要1 引言2 方法2.1 事实知识在不同层级上演化2.2 动态早期层选择2.3 预测对比 3 实验3.1 任务3.2 实验设置3.3 多项选择3.3.1 TruthfulQA&#xff1a;多项选择3.3.2 FACTOR&#xff1a;维基、新闻 3.4 开放式文本生成3.4…

SUE3000 1VCF750090R804 REM615面板

SUE3000 1VCF750090R804 REM615面板 蓝色波长激光的特殊特性使扫描仪适用于各种材料的高精度轮廓和尺寸测量&#xff0c;包括闪亮的表面、炽热的发光金属、有机材料(如食品、木材和木质单板)&#xff0c;以及透明或半透明材料&#xff0c;如塑料、玻璃、光学元件和薄膜/基底。…

【波形图】LabVIEW中的波形图和波形图表有什么区别?

波形图和波形图表在显示和更新数据的方式上有所不同。 波形图可接受各种类型的数据阵列&#xff0c;例如数组&#xff0c;波形或动态数据。波形图在接收到数据后将立即绘制所有接收到的数据点 。波形图不接受单点值。当您将包含数据点的数组连接到波形图时&#xff0c;波形图会…

Syntax Error: TypeError: this.getOptions is not a function的解决(Vue)

报错信息&#xff1a; TypeError: this.getOptions is not a function 这个是在运行项目是遇到的问题 这个报错是类型错误&#xff0c;this.getOptions 不是一个函数 。这个错误一般就是less-loader库里的错误。 主要是less-loader版本太高&#xff0c;不兼容this.getOptions…

AntDB数据库荣获 “2023年信创物联网优秀服务商”

日前&#xff0c;在2023世界数字经济大会暨第十三届智博会 2023京甬信创物联网产融对接会上&#xff0c;AntDB数据库再获殊荣&#xff0c;获评“2023年信创物联网优秀服务商”。 图1&#xff1a;2023年信创物联网优秀服务商颁奖现场 信创物联网是信息技术应用创新与物联网的结…

高并发和存储之间的关系是什么?

文章目录 &#x1f50a;博主介绍&#x1f916;博主的简介&#x1f4e5;博主的目标 &#x1f964;本文内容&#x1f34a; 一、高并发对存储的压力&#x1f34a; 二、存储的性能和可扩展性 &#x1f4e2;总结 &#x1f50a;博主介绍 &#x1f4d5;我是廖志伟&#xff0c;一名Java…

【C语言初学者周冲刺计划】2.2用选择法对10个整数从小到大排序

目录 1解题思路&#xff1a; 2代码如下&#xff1a; 3运行结果: 4总结&#xff1a; 1解题思路&#xff1a; 首先利用一维数组和循环语句输入10个整数&#xff0c;然后利用双循环的嵌套进行比较大小&#xff0c;最后输出结果&#xff1b; 2代码如下&#xff1a; #include&…

[SWPUCTF 2021 新生赛]hardrce_3 无字母rce 自增

这里是过滤了 取反等符号 所以考虑自增 <?php header("Content-Type:text/html;charsetutf-8"); error_reporting(0); highlight_file(__FILE__); if(isset($_GET[wllm])) {$wllm $_GET[wllm];$blacklist [ ,\^,\~,\|];foreach ($blacklist as $blackitem){if …

一个小妙招从Prompt菜鸟秒变专家!加州大学提出PromptAgent,帮你高效使用ChatGPT!

夕小瑶科技说 原创 作者 | 谢年年、王二狗 有了ChatGPT、GPT4之后&#xff0c;我们的工作学习效率得到大大提升&#xff08;特别在凑字数方面୧(๑•̀◡•́๑)૭&#xff09;。 作为一个工具&#xff0c;有人觉得好用&#xff0c;自然也有人觉得难用。 要把大模型用得6&am…

Linux Spug自动化运维平台公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

群晖上搭建teamspeak3语音服务器

什么是 TeamSpeak &#xff1f; TeamSpeak &#xff08;简称 TS&#xff09;是一款团队语音通讯工具&#xff0c;但比一般的通讯工具具有更多的功能而且使用方便。它由服务器端程序和客户端程序两部分组成&#xff0c;如果不是想自己架设 TS 服务器&#xff0c;只需下载客户端程…

linux后台运行python脚本

前言 我们在运行程序时&#xff0c;有的程序花费时间较多&#xff0c;但我们总不能一直看着程序运行&#xff0c;所以我在这里记录一下&#xff0c;Linux服务器如何后台运行我们的脚本程序 实现后台运行程序 我们登录到服务器&#xff0c;切换至目录到我们所要运行的程序下 …

基于SSM的航空订票系统

基于SSM的航空订票系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 用户界面 管理员界面 摘要 基于SSM的航空订票系统是一款面向旅客、航空公司和旅…

org.springframework.cloud:spring-cloud-starter-openfeign:jar is missing详解

openfeign无法导入的问题 我感觉最近带的好几个新人在搭建springCloud基础框架的时候&#xff0c;会犯一个非常小的错误&#xff0c;导致进度卡住了。 这个错误就是Feign导入的错误&#xff1a; ‘dependencies.dependency.version’ for org.springframework.cloud:spring-c…