前言:
学完语法想学qt,发现网上的教程全是qt4和qt5。根据推荐用的书籍《Qt Creator》是基于Qt4,和Qt6相差甚远。但天无绝人之路,根据官方文档和零碎的信息,我把书中的知识进行比对记录。之后可能的所有内容仅用于自我参考。
新建空项目
下面的操作都在File里能找到
这里选择MinGW,选MSVC后面会报错main.obj什么的,原因暂且不知。
创建名为main的源文件
编写程序
main文件代码如下:
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog w;
QLabel label(&w);
label.setText("Hello World! 你好Qt!");
w.show();
return a.exec();
}
之前的版本头文件是这样的:
#include <QApplication>
#include <QDialog>
#include <QLabel>
查了一下不知道中哪个版本开始这三个头文件被移植到了QWidgets文件下
运行项目,如果你出现一下错误:
在pro文件下加上:
QT += gui widgets core
来自:
https://blog.youkuaiyun.com/qq_37155036/article/details/91625770
(如果不行,自行搜索)
此时结果如下:
运行完后再把“QT += gui widgets core”删掉或注释,发现项目还是能跑起来,6的。
QApplication类创建一个接受参数的应用程序,用于管理应用程序资源,是Qt GUI程序的必须。
QLabel label用QDialog w作为参数,表明w是label的父窗口。
若不设置父窗口(即默认为空),该组件会独立成一个窗口
设置字符集
一边照着书一边看官方文档改,发现书上用的方法已经被删了,作废。
保留部分以防后期用得到QTextCodec
头文件QTextCodec
这个在Qt5中能直接用,Qt6被删了,我项目用的是qmake,在pro文件中加入:
QT += core5compat
在main中加入:
#include <QTextCodec>
如果是qmake,加入:
find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
或者在头文件中直接指出QtCore5Compat,如下:
#include <QtCore5Compat/QTextCodec>
设置窗口大小
QWidget及其子类都有两个方法,resize()和move(),参数为宽和高。
resize调大小,move调相对父窗口的位置。
函数原型:
voidresize(const QSize &);
void resize(int w, int h);
void move(const QPoint &);
void move(int x, int y);
Qt窗口左上角为原点(0, 0),正右为x轴正方向,正下为y轴正方向
ui设计模式
ui文件
创建ui文件,我这里是默认名字dialog.ui:
双击该文件,即可进入设计模式(Design Mode)
左边拖组件,右下修改属性,右上所有组件,看起来很简单,这里我加了一个标签:
返回编辑模式(Edit Mode),单击ui文件,发现这其实是一个仅设计模式可修改的xml文件。
Projects视图下去掉隐藏生成文件的勾,可以看到ui文件生成的头文件(但内容是hpp文件)
ui头文件内容
前8行注释;
有一个类,类名为Ui_文件名,我这里是Ui_Dialog;
类里面有个QLabel指针的标签,变量名和设计模式里标签的名字一样,根据设计模式自动生成;
setupUi();生成界面,设置大小位置之类的,因为模板选的对话框,所以这里是QDialog类型的
retranslateUi();对窗口里的字符串进行编码转换
创建了一个命名空间,创建了一个与文件同名的类(我的是Dialog)继承Ui_Dialog
使用ui头文件
打开main,把内容都删掉,加入ui的头文件,并输入代码:
#include "ui_dialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog w;
Ui::Dialog ui;
ui.setupUi(&w);
w.show();
return a.exec();
}
虽然代码量和之前比没有少很多,但明显感觉图形化编程简便很多
发布
点开左下角的小电脑,有三个选项,默认用的是Debug,如果想发布,就选择Release选项
项目同级目录会生成一个以build开头Release结尾的文件,和Debug生成的目录比起来小很多。书里说项目文件夹里有个release是用来发布的,但我一直是空的。
打开build开头Release结尾的文件,含有.exe后缀的文件,就是我们的程序。双击开打会动态链接库报错,根据书中和网上各种方法,暂时没有解决