Qt 小项目中遇到的问题

时间:2021-10-13 16:37:27

目录:

前提:

        因为需求,老的工具虽然很全面,但是不适合我要求,我需要做个新的工具(配牌)来加快效率,又要练习c++,在c++众多gui库中选择qt,只是为了上手便捷,而且文档很详细(应该说我目前见过文档中最详细和方便的),在做这个项目遇到了一些问题,记录以便以后查阅

qt环境:

        qt5.10.1

问题:

1. 中文显示

遇到的情况:

  • 动态显示按钮的中文名称

解决方式:

ui->lineEdit->setText(QString(u8"中文"));
//注:要在 .pro 文件中 添加 CONFIG += C++11

2. QString 与 string 的 转换

遇到的情况:

  • 有些功能(例如解析)是在vs2017上写完,qt要调用这里cpp,其中会涉及到转换
    (添加.cpp,.h 文件 直接加到工程目录后,在qt creator 中添加现有项就行)

解决方式:

//不适合有中文
string s = "hello";
string ss = "中文";
QString str = s.toStdString();
string sss = QString::fromStdString(s);
//要有中文
QString zStr = QString::fromLocal8Bit(ss.data());
QByteArray cData = zStr.toLocal8Bit();
string zS = string(cData);

3. 自定义信号参数

遇到的情况:

  • 在信号发送时,顺便可以传送一些基本类型参数,对于模板,更复杂的数据类型就不能处理,比如 vector< unsigned char > 或 自定义的类,而我需要第二个窗口给第一个窗口传递设置好的牌等数据

解决方式:
用#include< QMetaType> 声明 注册 信号类型

  1. 目录结构
    Qt 小项目中遇到的问题
  2. UI窗口
    Qt 小项目中遇到的问题
    3.代码
    button.h
#ifndef BUTTON_H
#define BUTTON_H

#include <QPushButton>
#include <QMetaType>
#include <vector>

class Button : public QPushButton
{
    Q_OBJECT
public:
    explicit Button(QWidget *parent = nullptr);

signals:
    void MySignal(std::vector<unsigned char>);
public slots:
    void SendMySignal();
};

Q_DECLARE_METATYPE(std::vector<unsigned char>) //声明需要注册的类型

#endif // BUTTON_H

          button.cpp

#include "button.h"

using namespace std;

Button::Button(QWidget *parent) : QPushButton(parent)
{
    connect(this,&QPushButton::clicked,this,&Button::SendMySignal);
}

void Button::SendMySignal()
{
    vector<unsigned char> a;
    a.push_back(1);
    emit MySignal(a);
}

          mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "button.h"
#include <vector>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void DealMySignal(std::vector<unsigned char> d);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

          mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton,&Button::MySignal,this,&MainWindow::DealMySignal);
}

void MainWindow::DealMySignal(vector<unsigned char> d)
{
    qDebug()<<d.at(0);
}

MainWindow::~MainWindow()
{
    delete ui;
}

4.显示效果(点击收到消息)
Qt 小项目中遇到的问题


4. Qt 中的 调试

遇到的情况:

  • 安装完Qt后,有调试按钮,但是其实并不能调试
    弹出
    Qt 小项目中遇到的问题

解决方式:
下载CDB,并且添加到 构建套件 中
Qt 小项目中遇到的问题
安装
Qt 小项目中遇到的问题
Qt 小项目中遇到的问题
Qt设置
Qt 小项目中遇到的问题
选择 构造套件,我用的是vs2017 所以选择vs2017
Qt 小项目中遇到的问题
点击进入,发现调试器是空的
Qt 小项目中遇到的问题
添加调试器
Qt 小项目中遇到的问题
我电脑是x64,所以选择x64的,然后应用
Qt 小项目中遇到的问题
Qt 小项目中遇到的问题
在回到构建套件中,设置调试器到CDB
Qt 小项目中遇到的问题
点击apply,ok,开始调试,注意要在Debug下
Qt 小项目中遇到的问题


5. Qt 中 模块计算机类型“X86”与目标计算机类型“x64”

遇到的情况:

  • 在设置debug时,应该是不小心点错了,出现了这个错误

解决方式:
发现这两个不一样,改为一样,错误消失
Qt 小项目中遇到的问题