Qt笔记(十七)cmake编译Qt项目

Qt笔记(十七)cmake编译Qt项目

  • [1. 文件内容与文件结构](#1. 文件内容与文件结构)
    • 1.1.文件目录
    • [1.2. CMakeLists.txt内容](#1.2. CMakeLists.txt内容)
    • [1.3. main.cpp文件](#1.3. main.cpp文件)
    • [1.4. mouseevent.h](#1.4. mouseevent.h)
    • [1.5. mouseevent.cpp](#1.5. mouseevent.cpp)
    • [1.6. 生成Visual Studio项目后编译报错](#1.6. 生成Visual Studio项目后编译报错)
    • [1.7. 界面显示中文乱码问题](#1.7. 界面显示中文乱码问题)

1. 文件内容与文件结构

1.1.文件目录

文件夹下文件,其中CMakeLists.txt是我新添加的。

bash 复制代码
MouseEvent
        CMakeLists.txt
        main.cpp
        mouseevent.cpp
        mouseevent.h

1.2. CMakeLists.txt内容

bash 复制代码
cmake_minimum_required(VERSION 3.5)

project(mouseEvent LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

include_directories(
    ${PROJECT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_BINARY_DIR}
)

# 由于采用set(CMAKE_AUTOUIC ON)的方式处理ui文件,编译时会报错找不到ui文件。
# 需要将ui文件夹加入AUTOUIC的搜索目录,这样AUTOUIC处理时才能找到ui文件。
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_SOURCE_DIR}/ui)

file(GLOB PRO_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB PRO_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
file(GLOB PRO_UI ${CMAKE_CURRENT_SOURCE_DIR}/*.ui)
file(GLOB PRO_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.qrc)

add_executable(mouseEvent
    ${PRO_SRC}
    ${PRO_INCLUDE}
    ${PRO_UI}
    ${PRO_RESOURCES}
)

target_link_libraries(mouseEvent PRIVATE Qt5::Widgets)

1.3. main.cpp文件

cpp 复制代码
#include "mouseevent.h"
#include <QApplication>

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

    return a.exec();
}

1.4. mouseevent.h

cpp 复制代码
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H

#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>
class MouseEvent : public QMainWindow
{
    Q_OBJECT

public:
    MouseEvent(QWidget *parent = 0);
    ~MouseEvent();
protected:
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);
    void mouseDoubleClickEvent(QMouseEvent *e);
private:
    QLabel *statusLabel;
    QLabel *MousePosLabel;
};

#endif // MOUSEEVENT_H

1.5. mouseevent.cpp

cpp 复制代码
#include "mouseevent.h"

MouseEvent::MouseEvent(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr(u8"鼠标事件"));					//设置窗体的标题
    statusLabel = new QLabel;						//(a)
    statusLabel->setText(tr(u8"当前位置:"));
    statusLabel->setFixedWidth(100);
    MousePosLabel = new QLabel;						//(b)
    MousePosLabel->setText(tr(""));
    MousePosLabel->setFixedWidth(100);
    statusBar()->addPermanentWidget(statusLabel);	//(c)
    statusBar()->addPermanentWidget(MousePosLabel);
    this->setMouseTracking(true);					//(d)
    resize(400,200);
}

void MouseEvent::mousePressEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")";														//(a)
    if(e->button()==Qt::LeftButton)
    {
        statusBar()->showMessage(tr(u8"左键:")+str);
    }
    else if(e->button()==Qt::RightButton)
    {
        statusBar()->showMessage(tr(u8"右键:")+str);
    }
    else if(e->button()==Qt::MidButton)
    {
        statusBar()->showMessage(tr(u8"中键:")+str);
    }
}

void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
    MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
}

void MouseEvent::mouseReleaseEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")";
    statusBar()->showMessage(tr(u8"释放在:")+str,3000);
}

void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e){}

MouseEvent::~MouseEvent()
{

}

1.6. 生成Visual Studio项目后编译报错

bash 复制代码
warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

解决办法:warning C4819 解决方案 warning C4819: The file contains a character that cannot be represented in the cu_warning c4819 the file contains a character that c-CSDN博客

修改编码方式为:打开出现warning的文件,Ctrl+A全选,然后在文件菜单:file->advanced save options (高级保存选项),在弹出的选项中选择新的编码方式为:UNICODE codepage 1200 ,点击确定,问题就解决了。

1.7. 界面显示中文乱码问题

如下,在中文前添加u8。(上面列出的代码是修改后的代码)

cpp 复制代码
statusBar()->showMessage(tr(u8"左键:")+str);

运行结果如下:

相关推荐
HappyAcmen29 分钟前
1.3 古典概型和几何概型
笔记·概率论·学习方法
普宁彭于晏1 小时前
CSS3相关知识点
前端·css·笔记·学习·css3
qq_336411752 小时前
【笔记】Chrome浏览器的性能调试(performance)工具使用和代码优化
前端·chrome·笔记
fen_fen2 小时前
学习笔记(25):线性代数,矩阵-矩阵乘法原理
笔记·学习·线性代数
要努力啊啊啊2 小时前
强化学习基础概念图文版笔记
论文阅读·人工智能·笔记·深度学习·语言模型·自然语言处理
IT英语写作研习社2 小时前
英语写作中“不少于(小于)”no less than替代no fewer than的用法
笔记
张哈大3 小时前
【 java 集合知识 第二篇 】
java·开发语言·笔记·哈希算法
抠脚学代码5 小时前
Ubuntu18.6 学习QT问题记录以及虚拟机安装Ubuntu后的设置
qt·学习·ubuntu
love530love12 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust