1.SCP window向linux传文件的时候 无法传:
错误原因
1.是命令理解错误
scp C:\path\to\file.txt username@linux_ip:/home/username/
"C:\path\to\file.txt" 是window的文件的路径
username 需要上传给linux下的那个用户
linux_ip linux的ip 使用ifconfig 可以查到 // 如果不认识这个命令需要安装一下
/home/username/ username用户的文件夹,需要通过pwd获取当前目录,然后填写绝对路径
2.是没启动ssh
1.先检查ssh是否运行(初次安装虚拟机配置linux时,需要注意这个问题)
sudo systemctl status ssh
2.检查是否安装
sudo apt update && sudo apt install openssh-server -y
3.是否启动
sudo systemctl start ssh # 启动 SSH
sudo systemctl enable ssh # 设置开机自启
3. 网络端口没开放
狠人!!!我直接关闭防火墙
2.linux Qt 无法编译:
解决方案
安装后未进行环境变量的配置,需要在.bashrc文件中写
安装完成之后找到Qt 下载的位置找bin的绝对路径
#加入环境变量
sudo vim ~/.bashrc
#加入环境变量末尾加入
export PATH="/opt/Qt5.12.11/Tools/QtCreator/bin:$PATH" # bin的绝对路径
export PATH="/opt/Qt5.12.11/5.12.11/gcc_64:$PATH" #gcc_64的路径
#之后退出在cmd中输入
source ~/.bashrc
#最后
sudo apt-get install -y libxcb-xinerama0 libxcb-cursor0
#这样就可以编译了
3.Image 无法加载到qml的界面上,一直提示找不到
错误原因误解QML相对路径的写法
1.先给图片创建一个单独的文件夹
2.然后添加进Resource文件夹中
3.写入代码 注意绝对路径不是./ 需要调用Qt.resolvedUrl(Path) 函数
直接上代码
Image{
id: myImage
source: Qt.resolvedUrl("Image/open.png")// 使用资源文件系统中的图像
width: parent.width * 0.5 // 设置图像宽度为父元素宽度的一半
height: parent.height * 0.5 // 设置图像高度为父元素高度的一半
fillMode: Image.PreserveAspectFit // 保持图像纵横比适应尺寸
anchors.centerIn: parent
onStatusChanged: {
if (myImage.status === Image.Ready) {
console.log("Image loaded successfully");
} else if (myImage.status === Image.Error) {
console.log("Failed to load image");
}
}
}
4.构建cmake 添加组件
1.首先保证必须已经安装了该模块,本次以serialport 作为例子
2.在cmaketxt 文件的find_package 中加入 SerialPor
find_package(Qt6 REQUIRED COMPONENTS Quick SerialPort)
3.在cmaketxt文件的target_link_libraries中加入 Qt6::SerialPort
target_link_libraries(apptestSerialPort
PRIVATE Qt6::Quick
Qt6::SerialPort
)
4.加入头文件写个代码测试
#include <QtSerialPort/QSerialPort>// 提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo>// 提供系统中存在的串口信息
5.使用Cmake,使qml可以访问C++类属性
之前误解的地方在于在qml中,我直接将C++类属性的名称作为qml属性绑定对象了
如图所示 可以看到,
正确做法
1.先添加一个类对象,必须继承QObject类
2.添加头文件#include <QtQML> 在类内Q_OBJECT 宏下放添加QML_ELEMENT
3.添加属性 然后ALT+加回车
4.在main函数中添加 qmlRegisterType<MyObject>("MyObj",1,0,"MyObject"); 包含MyObject的头文件
MyObject 是类名, MyObj是模块名 ,1版本号,0是此版本号,MyObject是类名
5.QML 部分 中 加入 import MyObj 1.0
6.加入 MyObject{} 就可以正常访问了
6.访问C++类属性实际上是访问函数图例左图qml 右图C++部分
我们实际访问的是ivalue这个函数,和iString 而并非是类私有成员名称
2025.3.28.。。。。。。。。。。