Qt 小项目中遇到的问题

目录:

前提:

        因为需求,老的工具虽然很全面,但是不适合我要求,我需要做个新的工具(配牌)来加快效率,又要练习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. 目录结构
    这里写图片描述
  2. UI窗口
    这里写图片描述
    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.显示效果(点击收到消息)
这里写图片描述


4. Qt 中的 调试

遇到的情况:

  • 安装完Qt后,有调试按钮,但是其实并不能调试
    弹出
    这里写图片描述

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


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

遇到的情况:

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

解决方式:
发现这两个不一样,改为一样,错误消失
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zbbzb/article/details/80548987
今日推荐