通过c++方法去调用qml方法,获取焦点失败

一口三个汉堡 一口三个汉堡 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有一个项目,用qml写了输入界面,然后添加到了Widget的页面上,这时我需要在Widget的代码中,去让qml的输入框获取到焦点,但是一直获取失败。

import QtQuick 2.0
import QtQuick.Controls 1.3

Rectangle {
function loadFocus() {
edit.forceActiveFocus();
console.log("test");
}
color:"blue";
id:test;
focus: true;
TextInput {
objectName: "edit";
anchors.left: parent.left;
anchors.top: parent.top;
width:100;
height:100;
id:edit;
focus: true;
}
}

这是输入界面的代码,声明了一个方法,让外部调用,方法内调用edit.forceActiveFocus 去让输入框获取焦点


#include "inputwidget.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QDebug>
#include <QTextEdit>
#include <QApplication>
#include <QMouseEvent>
InputWidget::InputWidget(QWidget *parent) : QWidget(parent)
{
m_pQuickView = new QQuickView();
m_pQuickView->setMinimumSize(QSize(200,200));
m_pQuickView->setClearBeforeRendering(false);
m_pQuickView->setResizeMode(QQuickView::SizeRootObjectToView);
m_pQuickView->setSource(QStringLiteral("qrc:/InputWidget.qml"));

QWidget *container = QWidget::createWindowContainer(m_pQuickView, this);
container->setMinimumSize(QSize(200,200));
QPushButton* btn = new QPushButton();
btn->setText("test");
connect(btn,SIGNAL(clicked(bool)),this,SLOT(onClick()));
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget(btn);
layout->addWidget(container);
layout->setMargin(0);
setLayout(layout);
}

void InputWidget::onClick() {
QObject* obj = (QObject*)m_pQuickView->rootObject();
QMetaObject::invokeMethod(obj,"loadFocus");
}


这是widget的代码,将qml的输入框添加进来,并创建一个按钮,当点击按钮的时候,去调用qml中方法,去设置焦点。


但是一直设置失败。

折腾了很久,都没有解决,感觉是自己没有找到一些关键点,例如当通过c++去调用qml的代码是,所处的线程是否为主线程。还有就是输入框需要在怎样的条件下,才能设置成功。

一开始我还模拟一个鼠标事件去让输入框获取焦点,但还是失败。
...全文

相关推荐

使用C++调用Python代码的方法步骤

主要介绍了使用C++调用Python代码的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38599545

Qt开发实战:QML界面+C++逻辑构建串口调试工具

在桌面应用开发中,界面与逻辑的分离程度往往决定项目的维护成本。传统Widgets框架虽功能强大,但面对高频状态变化和自定义界面时,代码冗长且耦合度高;而QML以声明式语法和灵活布局见长,却在复杂业务处理上不如C++稳健。理解两者互补原理后,采用QML构建交互界面、C++承载串口通信与数据解析,通过Qt元对象系统实现属性绑定和信号通信,既保证了开发效率,又提升了程序性能。这种混合架构特别适合串口调试工具、数据监控面板等桌面场景,还能结合qmlcache与多线程优化应对高吞吐数据流。本文从实际项目出发,完整呈现

chuannaoxuan4674

QML +Qt C++一个很好的搜索框

QML +Qt C++一个很好的搜索框,是学习Qml与Qt C++编程的好助手。

北国之岛

c++如何采用com组件的方法直接调用动态库

com组件方法调用dll

w_yqrx123

Python调用C++程序的方法详解

主要介绍了Python调用C++程序的方法,文中通过示例代码介绍的详细,相信对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。

weixin_38562626
评论 4
收藏 已收藏
分享
返回顶部
一口三个汉堡
Qt 21,503 成员 26,693 内容