qt编程问题

供稿:hz-xin.com     日期:2025-01-11
qt编程中的问题

是有点拗口,比如说,regexp可以去匹配html的(开)(闭)标签,前提是这2个标签是成对出现的(即英文原文中的“闭合”)。但是,如果标签没有成对出现,即只出现了而没出现,这样regexp在对和进行匹配的时候会出错。

#define unsigned int UInt32应该是这样的吧

1、关联Qt库。如果是分别安装的Qt Creator和Qt库,而不是安装集成Qt Creator和Qt库的SDK,则需要手动关联Qt库。打开工具→选项菜单,然后选择“构建和运行”一项,再进入Qt版本选项卡。点击右上角的“添加”按钮,然后会让选择qmake.exe文件,我们在Qt(不是Qt Creator)安装目录的bin目录中找到该文件并打开。现在已经默认生成了版本信息,我们点击确定按钮即可。

2、关联MinGW。在安装Qt 4.8.6及以后的Qt 4版本时,应该按照安装时的提示来下载相应版本的MinGW,不然编译程序无法运行。如果是Qt4版本,需要使用GCC 4.4,也就是MinGW需要是4.4版本的,其他新的版本均不可用。在Qt 4.8版本,需要下载并指定GDB才能正常调试。下载完MinGW和GDB以后,将其解压到Qt的安装目录中,比如这里都解压到了C:\Qt目录中。打开工具→选项菜单,然后选择“构建和运行”一项,再进入工具链选项卡。点击右上角的“添加”按钮,然后会让选择mingw32-g++.exe文件,我们在MinGW安装目录的bin目录中找到该文件并打开。关联GDB则进入调试器选项卡添加GDB相关exe文件。

如果安装的是集成开发包QtSDK,则不需要手动关联Qt库、MinGW和GDB,由Qt自动关联。

注意:Qt5以后版本默认也包含了所有需要的工具,不存在这里的情况,直接下载安装即可使用!

3、在创建桌面版项目时,最好选中“使用影子构建”,这样编译生成的文件会和源码分别存放,如下图所示。编译完成后会发现多了一个helloworld-build-desktop-Qt_4_8_1__4_8_1____目录,里面存放的就是编译生成的文件。这就是前面创建项目讲到的 “使用影子构建” ,如果没有选中这个,那么生成的文件就会和源码在同一个目录里。

4、补充:如果要给生成的exe可执行文件更换一个自定义图标,可以这样做:
(1)在项目中添加一个myapp.rc(名字可以随意)文件,然后在里面输入下面一行代码:IDI_ICON1               ICON    DISCARDABLE     "appico.ico",这里的appico.ico就是自己的.ico图标文件;

(2)在.pro项目文件中添加下面一行代码:RC_FILE = myapp.rc,

(3)重新编译

如果需要更换新的图标,建议先清理项目的编译文件,再重新编译,否则可能会报错,如下。

“:-1: 错误:No rule to make target `..\helloworld\myapp.rc', needed by `debug/myapp_res.o'.  Stop.”

5、在创建主窗口MainWindow项目后,打开mainwindow.ui文件进入设计模式。在这里可以看到界面左上角的“在这里输入”,我们可以在这里添加菜单。双击“在这里输入”,将其更改为“文件(&F)”,然后按下回车键,效果如下图所示。这里的&F表明将菜单的快捷键设置为了Alt+ F,可以看到,实际的显示效果中&符号是隐藏的。

同样的方法,我们在文件菜单中添加“新建(&N)”子菜单,效果如下图所示。菜单后面的那个加号图标是用来创建下一级菜单的。

Qt中的一个菜单被看做是一个Action,我们在下面的Action编辑器中可以看到刚才添加的“新建”菜单,如下图所示。

双击该条目,会弹出编辑动作对话框,这里可以进行各项设置,比如我们可以设置菜单的快捷键,点击一下快捷键后面的行编辑器,然后按下键盘上的Ctrl + N,这样就可以将该菜单的快捷键设置为Ctrl + N。如下图所示。那么大家可能会问,既然该菜单的快捷键是这么设置的,那么前面设置的“新建(N)”中的N是什么呢?这个可以被称为加速键,就是只有当文件菜单处于激活(显示)状态时,按下N键才会执行新建菜单的功能。

6、Qt中可以使用资源文件将各种类型的文件添加到最终生成的可执行文件中,这样就可以避免使用外部文件可能出现的一些问题。而且,在编译时Qt还会将资源文件进行压缩,我们可能发现生成的可执行文件比我们添加到其中的资源文件还要小。创建完资源文件后会自动打开该资源文件,这里需要先在下面添加前缀,就是点击添加按钮,然后选择前缀,默认的前缀是“/new/prefix1”,这个可以随意修改(不要出现中文字符),我们这里因为要添加图片,所以修改为/myImages。然后再按下添加按钮来添加文件,这里最好将所有要用到的图片放到项目目录中。比如我们这里在项目目录中新建了一个images文件夹,然后将需要的图标文件粘贴进去。添加完文件后,如下图所示。

当添加完资源后,一定要按下Ctrl + S来保存资源文件,不然在后面可能无法显示已经添加的资源。

对于添加的资源文件,在项目目录中可以看到,即myResources.qrc,使用写字板程序将其打开,可以发现它其实就是一个XML文档:

<RCC> 

<qresourceprefix="/myImages">

<file>images/filenew.png</file>

<file>images/fileopen.png</file>

<file>images/filesave.png</file>

<file>images/filesaveas.png</file>

<file>images/find.png</file>

</qresource>

</RCC>

7、使用代码添加菜单时,在构造函数中添加如下代码:

QAction *openAction = new QAction(QString::fromUtf8("&Open"), this);// 创建新的动作 

QIcon icon(":/myImages/images/fileopen.png");// 添加图标 

openAction->setIcon(icon);

openAction->setShortcut(QString::fromUtf8("Ctrl+O"));// 设置快捷键

ui->menu_F->addAction(openAction);// 在文件菜单中设置新的打开动作

这里添加图标时,就是使用的资源文件中的图标。使用资源文件,需要在最开始使用冒号,然后添加前缀,后面是文件的路径。在代码中使用文件菜单,就是使用其objectName。大家现在可以运行程序查看效果,当然这里也可以将Open改为中文。

8、向工具栏添加图标:可以将动作编辑器中的动作拖动到工具栏中作为快捷图标使用;可以在工具栏上点击鼠标右键来添加分隔符。

9、使用垂直布局管理器(QVBoxLayout)布局:部件自动垂直排列,并且进行水平拉伸,无论如何改变布局管理器的大小,按钮总是水平方向变化。

使用垂直分裂器(QSplitter)布局:部件自动垂直排列,但进行放大可以发现,使用分裂器按钮纵向是可以变大的,这就是分裂器和布局管理器的重要区别。

10、快速从头文件声明处创建函数定义的方法:到mainwindow.h文件中,将鼠标定位到showFindText()函数上,然后点击右键,在弹出的菜单中选择“重构”→“在mainwindow.cpp添加声明”,或者直接使用Alt+Enter快捷键,这样就会直接在mainwindow.cpp文件中添加函数定义,并跳转到该函数处。

11、在QtCreator中有几种快速定位函数的方法:

第一种,在函数声明的地方直接跳转到函数定义的地方。

例如我们在mainwindow.h文件的loadFile()函数上点击鼠标右键,在弹出的菜单上选择“在方法声明/定义之间切换”,这时就会自动跳转到mainwindow.cpp文件中该函数的定义处。如下图所示。当然还可以反向使用。

第二种,快速查看一个文件里的所有函数。

可以在编辑器正上方的下拉框里查看正在编辑的文件中所有的函数的列表,点击一个函数就会跳转到指定位置。如下图所示。

第三种,使用类视图或者大纲视图。

在项目列表上面的下拉框中可以更改查看的内容,如果选择为类视图或者大纲,则会显示文件中所有的函数的列表。如下图所示。

第四种,使用查找功能查看函数的所有调用处。 

在一个函数名上点击鼠标右键,然后选择“查找何处被使用”菜单,这时就会在下面的搜索结果栏中显示该函数所有的使用位置。我们可以通过点击一个位置来跳转到该位置。如下图所示。

12、在Action编辑器中,有两个属性toolTip和statusTip,分别为工具栏提示和状态栏提示,如下图

这时运行程序,当光标移动到新建动作上时,在下面的工具栏和状态栏将会出现设置的提示。如下图所示

13、状态信息可以被分为三类:临时信息,如一般的statusTip提示信息,上面讲到的动作提示就是临时信息;正常信息,如显示页数和行号;永久信息,如显示版本号或者日期。可以使用showMessage()函数来显示一个临时消息,它会出现在状态栏的最左边。一般用statusBar->addWidget()函数添加一个QLabel到状态栏上用于显示正常信息,它会生成到状态栏的最左边,可能会被临时消息所掩盖。如果要显示永久信息,要使用statusBar->addPermanentWidget()函数来添加一个如QLabel一样的可以显示信息的部件,它会生成在状态栏的最右端,不会被临时消息所掩盖。

14、关于随机数,在Qt中是使用qrand()和qsrand()两个函数实现的。在使用qrand()函数产生随机数之前,一般要使用qsrand()函数为其设置初值,如果不设置初值,那么每次运行程序,qrand()都会产生相同的一组随机数。为了每次运行程序时,都可以产生不同的随机数,我们要使用qsrand()设置一个不同的初值。



数控车床程序段中的T代码有什么用?
一个程序段只能指定一个T 代码。关于T 地址后可指令的数字位数以及T代码和机床操作之间的对应关系,见机床制造商的说明书。当移动指令和T 代码在同一程序段指令时,按照下面两种方法中的一种执行指令:1. 同时执行移动指令和T 功能指令。2. 在移动指令执行完成时执行T 功能指令。选择哪一种取决于机床...

关于java编程中List<T>.add()的问题
既然是泛型方法,当调用shuJuDuQudd时,T就被替换成bean所表示的类型,list的类型也已经确定,从list取出的类型必然是T额

请问一下各位编程高手,t <<= 1是什么意思?
t<<=1意思是t = t<<1 这个是位运算。。。将t左移一位。。。比如t = 5 二进制表示为101 左移一位就变成1010 转回十进制就是10 希望能帮到你。。。

c语言编程问题,还请大神指点 怎么将t【1】,t【2】,t【3】赋值...
以赋值5,6,7为例:逻辑关系:一、scanf ("%d,%d,%d",&a1,&a2,&a3);在键盘上输入 5,6,7 这样a1=5,a2=6,a3=7;二、InitTriplet(p,a1,a2,a3);status InitTriplet (Triplet &T,int v1, int v2, int v3)这样v1=5,v2=6,v3=7;三、 T[0]=v1;T[1]=v2;T[2]=v3;这...

T机技术原理及应用?T机编程及其优势
1、T机编程的概念 T机编程是一种基于程序控制的自动化技术,它可以实现自动化控制系统的设计、实现和维护。T机编程可以通过编写程序来实现自动化控制系统的设计、实现和维护,它可以提高自动化控制系统的可靠性和稳定性,并且可以提高自动化控制系统的效率和精度。2、T机编程的优势 T机编程具有许多优势,...

t在C语言里表示什么
通常,`t` 的具体含义取决于程序员的编程意图和上下文。例如,在循环中,`t` 可能被用作一个临时变量来存储计算结果或循环的索引;在图形处理中,`t` 可能代表时间(time)变量,用于动画或时间相关的计算;在解决数学问题时,`t` 可能用作表示时间(如微分方程中的时间变量)、温度(temperature)或...

c语言小问题,如图,这样难道不是a[i]=a[i+1]=t?这样有什么意义?
不一样,这个是实现排序,当a[i]大于它的相邻元素a[i+1]时,交换位置,变量t相当于临时空间,t=a[i]是将a[i]的值暂时放到t,a[i]=a[i+1]将a[i+1]的值放到a[i]的位置,a[i+1]=t是将原a[i]的值即t放到a[i+1]位置.实现了交换 ...

t整数部分是什么意思?
在编程中,t整数部分的计算通常使用数值类型转换函数来处理,如C语言中使用int()函数将小数转换为整数类型。需要注意的是,在使用该函数时,需要明确指定四舍五入或向下取整的情况,否则会出现计算结果不准确的问题。同时,t整数部分在计算机图形学、信号处理和控制系统等领域中也是一个非常重要的概念。在...

JAVA 中<t>是什么意思,
JAVA 中<t>是泛型的意思。意思是Tree这个类里面需要用到另外一个类,但是又不能确定要用到的那个类的具体类型,所以暂时用T来代替。当具体的程序知道要用到的那个类型是什么的时候就用那个类型来代替T,例如需要实例化一个Tree类,需要用到的那个类是String,那么就可以这么来实例化Tree<String>()。

c中 t t是什么意思
在C语言编程中,正确使用t非常重要。如果使用的t与变量实际类型不一致,或者没有声明变量的数据类型,会导致编译错误或者运行错误。另外,C语言中t还涉及到内存的分配和释放,如果没有正确使用t,会导致内存泄漏等问题。因此,学习C语言时,需要仔细理解各种t类型的含义及其使用方法,才能写出正确的代码。