QT使用教程及常见问题

编程入门 行业动态 更新时间:2024-10-28 19:32:43

QT使用教程及<a href=https://www.elefans.com/category/jswz/34/1769387.html style=常见问题"/>

QT使用教程及常见问题

目录

  • 一、根据自定义的文件目录结构新建工程
  • 二、QML与CPP通信
    • 1.CPP调用qml组件的function
    • 2.QML调用CPP
    • 3. QML与CPP 信号和槽 相互调用
  • 一、添加常用第三方库
    • 1.FFTW
    • 2. 提示 error: cannot find -llibfftw3-3
    • 3.qt发送自定义signal,直接调用也可以,不使用emit
    • 4.重写mouseMoveEvent 后鼠标移动需要按住才响应
  • 四 Quick / QML
      • 1. 注意Page 与 Window 的区别
      • 2. tbaleview 不同版本Control之间用法差别很大

一、根据自定义的文件目录结构新建工程


2.新建文件夹

3.将main.cpp剪切到src
main.qml剪切到qml文件夹
4.右键添加现有文件

5.更改pro工程文件中main.cpp路径
main.cpp中的main.qml路径



编译运行即可

二、QML与CPP通信

1.CPP调用qml组件的function

QML

import QtQuick 2.12
import QtQuick.Window 2.12
import QrQuick.Controls 2.5 as ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello Qml && CPP")controls.Lable {objectName: 'labelinQml'text: 'QML && CPP'function getText() {return text}}
}

CPP

#include <QGuiApplication>
#include <QQmlApplicationEngin>#include <QMetaObject>  //调用QML function 引入int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)QCoreApplication::setAttrbute(Qt::AA_EnableHihgDpiScaling);
#endifQGuiApplication app(argc, argv);QQmlApplicationEngine engine;const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine,&QQmlApplicationEngine::objectCreated,&app,[url](QObject *obj,const QUrl &objUrl) {if(!obj && url == objUrl)QCoreApplication::exit(-1);		},Qt::QueuedConnection);engin.load(url);//调用Qml Label的getText 函数  //实际很少使用到这种方法auto root = engine.rootObjects();auto labelQml = root.first()->findChild<QObject*>("labelinQml");QVriant ret;//无参QMetaObject::invokeMethod(labelQml, "getText", Q_RETURN_ARG(QVariant, ret));qDebug() << ret.toString();// 有参// 	QMetaObject::invokeMethod(labelQml, "getText", Q_RETURN_ARG(QVariant, ret), Q_ARG(QVariant, "test"));return app.exec();
}

2.QML调用CPP

CPP

#include <QGuiApplication>
#include <QQmlApplicationEngin>#include <QMetaObject>  //调用QML function 引入int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)QCoreApplication::setAttrbute(Qt::AA_EnableHihgDpiScaling);
#endifQGuiApplication app(argc, argv);Person person("test",80)QQmlApplicationEngine engine;//注入实例到engin中auto context = engine.rootContext(); //获取根上下文context->setContextProperty("Person", &person);   //设置上下文属性const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine,&QQmlApplicationEngine::objectCreated,&app,[url](QObject *obj,const QUrl &objUrl) {if(!obj && url == objUrl)QCoreApplication::exit(-1);		},Qt::QueuedConnection);engin.load(url);return app.exec();
}

QML

import QtQuick 2.12
import QtQuick.Window 2.12
import QrQuick.Controls 2.5 as ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello Qml && CPP")controls.Button {text: 'click'onClicked: {Person.showInfo();  //调用CPP方法}}
}

3. QML与CPP 信号和槽 相互调用

一、添加常用第三方库

参考链接

1.FFTW

FFTW是开源的dft / idft库,具有高效率易移植的特点。遵守GPL协议,具有商业付费服务。

windows下安装库

在网站 .html 下载压缩包
使用Visual studio的命令行工具lib,根据需要的版本生成.lib文件lib /def:libfftw3-3.def将.lib文件以及对应的.dll文件放入工程目录中
编辑.pro文件加入.lib文件及.dll路径win32: LIBS += ../kc_sdr/thirdPartLib/fftw3/libfftw3-3.dll
win32: LIBS += -L../kc_sdr/thirdPartLib/fftw3/ -llibfftw3-3
注意:
-L后紧跟路径名,不能有空格
-l后紧跟.lib文件名不能带后缀添加头文件#include "thirdPartLib/fftw3/fftw3.h"

2. 提示 error: cannot find -llibfftw3-3

将前面的

win32: LIBS += ../kc_sdr/thirdPartLib/fftw3/libfftw3-3.dll
win32: LIBS += -L../kc_sdr/thirdPartLib/fftw3/ -llibfftw3-3

更改为

win64: LIBS += ../kc_sdr/thirdPartLib/fftw3/libfftw3-3.dll
win64: LIBS += -L../kc_sdr/thirdPartLib/fftw3/ -llibfftw3-3

编译通过

3.qt发送自定义signal,直接调用也可以,不使用emit

上下两种写法,效果相同

 	signal closed()emit closed();closed();

4.重写mouseMoveEvent 后鼠标移动需要按住才响应

需要勾选mouseTracking

四 Quick / QML

1. 注意Page 与 Window 的区别

Page 可以加Header 不能用menuBar

2. tbaleview 不同版本Control之间用法差别很大

可通过别名方式加载旧版本tableview 其他用新版本

import QtQuick.Controls 1.4 as QC14
import QtQuick.Controls.Styles 1.4 as QCS14
import QtQuick.Controls 2.1QC14.TableView {}

更多推荐

QT使用教程及常见问题

本文发布于:2024-02-16 23:51:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691869.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:常见问题   教程   QT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!