VS 与Qt的混合编程

       最近因为配置了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 <QtWidgets/QApplication>
#include "FILENAME.h"
#include<QString>
#include<QDebug>
#include<string>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    
    
    peo2 w;
    w.show();

   
      
    
    
    
    return a.exec();
}

 基本使用的是qt自带的类,程序入口是一个实例化一个Peo2类型的一个窗口,并且显示出来。

那么如何创造Peo2类这个类呢,你的需求很重要。

这里使用了ui文件,并没有采用存代码开发.

我们来看一下,封装的接口以及如何构造这个类。

代码部分:

#pragma once

#include <QtWidgets/QMainWindow>
#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<QString>
#include "FILENAME.h"
#include<QStringLiteral>

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 <QString>

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;
}

 这只是一个展示的例子。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值