最近因为配置了VS2022下qt的环境,所以想要试试vs配合qt混合编程,若是想要将qt当做界面库使用,就需要知道QT的一些基本知识。
程序分为前端和后端,想要界面与数据进行交互,数据分为数据来源以及数据处理,而界面负责显示数据,数据来源可以是很多种,但数据需要经过处理才能提供给前端的界面使用,也就是前后端分离。
举个例子,qt的组件lineedit是个输入框,接收来自用户的输入,接收输入的内容是字符串型,也就是QString,在qt中,一些数据结构,都被QT改边,并且冠上独家姓氏,Q。
字符串QString,可变数组的容器 QVector等,用法与标准的cpp并没有什么区别,就是加了一个Q.
在我们写类的构造的时候,我们会留有一些接口,是因为我们需要将后端的数据取出来,拿来给前端做显示。
比如,你想在界面中显示一串字符串,在qt的环境下,提供控件Label显示文本信息。
我们来看一下Qlabel的手册, 首先label作用是显示文本或者图像,留出来的属性接口可以让你自己去构造属于你自己的label的样式,根据方法函数,让你去添加label的动作。
比如,你只希望构造一个label用于显示文本。
那么你后端传过来的数据应该是一个字符串,使用的类型是QString.
我们从手册中找到这个方法来显示字符串
void
setText(const QString &)
Rich text
Pass a QString that contains rich text to setText().
如果数据是死的,那么就是label->setText("hello"),但是如果你需要数据能够变化,那么你需要去改变QString,让它是一个变化的量。
现在我在vs配置的qt环境下,使用编写一个程序。
首先我们来看看项目的布局。
main函数是程序入口,入口需要显示一个窗口,所以main函数的如下:
#include "peo2.h"
#include
#include "FILENAME.h"
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
peo2 w;
w.show();
return a.exec();
}
基本使用的是qt自带的类,程序入口是一个实例化一个Peo2类型的一个窗口,并且显示出来。
那么如何创造Peo2类这个类呢,你的需求很重要。
这里使用了ui文件,并没有采用存代码开发.
我们来看一下,封装的接口以及如何构造这个类。
代码部分:
#pragma once
#include
#include "ui_peo2.h"
#pragma execution_character_set("utf-8")// 该指令仅支持VS环境,解决乱码问题
class peo2 : public QMainWindow
{
Q_OBJECT
public:
peo2(QWidget *parent = nullptr);
~peo2();
private:
Ui::peo2Class ui;
};
在它的构造函数里:
#include "peo2.h"
#include
#include "FILENAME.h"
#include
peo2::peo2(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// ExampleClass obj;
//QString *ums= NULL;
//*ums = "123";
ExampleClass m;
m.setInput("Hello你好");
QString output = m.getOutput();
ui.label->setText(output);
ui.lineEdit->setText("hello,你好");
}
peo2::~peo2()
{
}
后端的数据来源:
#ifndef EXAMPLECLASS_H
#define EXAMPLECLASS_H
#include
using namespace std; // 添加命名空间
class ExampleClass {
public:
QString inputVariable; // 输入变量
QString outputVariable; // 返回变量
public:
ExampleClass(); // 构造函数
QString setInput(const QString& input); // 设置输入变量的函数
QString getOutput(); // 函数
};
#endif
.cpp的文件
#include "FILENAME.h"
ExampleClass::ExampleClass() {
inputVariable = "";
outputVariable = "";
}
QString ExampleClass::setInput(const QString& input) {
inputVariable = input;
return inputVariable;
}
QString ExampleClass::getOutput() {
// 在这里编写处理逻辑,根据输入变量计算返回变量
// 这里只是一个示例,将返回变量设置为输入变量连接两次
outputVariable = inputVariable + inputVariable;
return outputVariable;
}
这只是一个展示的例子。