QT自定义控件类,无法获取真实宽度和高度

2023-10-27

问题:

自定义控件类,无法获取真实的高度和宽度。代码如下:

//头文件 
#ifndef ROUNDEDTOOLTIP_H
#define ROUNDEDTOOLTIP_H

#include <QWidget>
#include <QLabel>

class RoundedToolTip : public QWidget {
    Q_OBJECT

public:
    explicit RoundedToolTip(const QString &text, QWidget *parent = nullptr);

private:
    QLabel *m_label;
};

#endif // ROUNDEDTOOLTIP_H



//cpp文件
#include "roundedtooltip.h"

RoundedToolTip::RoundedToolTip(const QString &text, QWidget *parent)
    : QWidget(parent) {
    setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground);

    m_label = new QLabel(this);
    m_label->setText(text);
    m_label->setAlignment(Qt::AlignCenter);

    m_label->setStyleSheet(styleSheet);
}

当我new一个如上的自定义控件类,并设置m_label的text时,然后我尝试获取m_label的宽度。

结果发现,实际宽度和获取的宽度有明显的偏差。

原因:

1、qwidget下面直接放了一个label,没有进行布局,导致的。

针对这个问题,修改后代码如下:

#include <QVBoxLayout>
#include "roundedtooltip.h"


RoundedToolTip::RoundedToolTip(const QString &text, QWidget *parent)
    : QWidget(parent) {
    setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground);

    QVBoxLayout *layout = new QVBoxLayout(this);
    m_label = new QLabel();
    m_label->setText(text);
    m_label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
    m_label->setAlignment(Qt::AlignCenter);
    layout->addWidget(m_label);

    m_label->setStyleSheet(styleSheet);
    this->layout()->setContentsMargins(0,0,0,0);
}

double RoundedToolTip::getActualWidth()
{
    return m_label->width();
}

void RoundedToolTip::setToolTipText(QString tooltip)
{
    m_label->setText(tooltip);
}


对QWidget进行布局,手动添加一个QVBoxLayout。这时获取宽高就能正常了。

2、若还是不行,可以重写qwidget的showEvent事件,然后在触发信号,在接受信号事件中,获取宽度。代码类似这样:

#include <QWidget>
#include <QShowEvent>

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0) : QWidget(parent) {}

protected:
    void showEvent(QShowEvent *event) override {
        QWidget::showEvent(event);
        // 在这里,你可以安全地获取widget的真实尺寸
        int width = this->width();
        emit widgetRendered(width);
    }

signals:
    void widgetRendered(int width);
};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT自定义控件类,无法获取真实宽度和高度 的相关文章

  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • Qt Creator:如何区分 win32 和 win64

    我必须在 pro 文件中执行类似的操作 win32 LIBS L 3rdparty libusb win32 lib msvc llibusb else win64 LIBS L 3rdparty libusb win32 lib msvc
  • 当我尝试构建 Qt 4.7.1 静态库时,“找不到 -ljscore”

    我尝试从最新的源构建静态 Qt 库 但出现以下错误 usr bin ld cannot find ljscore collect2 ld returned 1 exit status 如何解决这个问题呢 这是 Qt 构建系统中自 4 7 0
  • 如何创建QWidget的屏幕截图?

    我在 Qt Creator 中做作业 在其中绘制 QWidget 并且需要保存此 QWdiget 的某些部分 我试图解决这个问题 QPixmap pixmap pixmap copy rectangle rectangle is part
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • GoQt 致命错误:QAbstractAnimation:没有这样的文件或目录

    我尝试编译 Qt 来开发桌面应用程序 我按照 Qt 网站上的官方 wiki 指南的说明进行操作 当我尝试go run示例文件夹中的示例 我收到错误 去运行 home pinkya rabbit workspace go1programs s
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • QToolButton:更改菜单位置

    使用菜单时QToolButton菜单显示在按钮的正下方 有没有办法在按钮的左侧 右侧显示菜单 我知道这个问题不久前已得到回答 但我想为此问题添加新答案 因为接受的答案不再有效 实际上 更改 QToolButton 上的菜单位置非常容易 您需
  • 退出 Qt 程序的正确方法?

    我应该如何退出 Qt 程序 例如在加载数据文件时 发现文件损坏 并且用户需要退出该应用程序或重新启动数据文件 我是不是该 call exit EXIT FAILURE call QApplication quit call QCoreApp
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • QT从QTableWidgetItem继承到Widget并覆盖'<'运算符

    我想要一个QTableWidget具有定制的某些单元QProgressBars 并且我希望能够对包含这些的列进行排序 我的定制QProgressBar继承自两者QProgressBar and QTableWidgetItem 并且我正在覆
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • QML 连接:不推荐使用连接中隐式定义的 onFoo 属性

    升级到 Qt 5 15 时收到以下错误消息 QML Connections Implicitly defined onFoo properties in Connections are deprecated Use this syntax
  • 如何向同一个 QMenu 添加多个 QAction?

    我正在尝试实现 Qt 菜单自定义 并且我提供了一个功能来添加相同的功能QAction在同一个人民币上下文菜单中多次 但是当我尝试这样做时 myMenu gt addAction myAction myMenu gt addAction my
  • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

    我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码

随机推荐

  • WebGL射线拾取模型——八叉树优化

    经过前面2篇WebGL射线拾取模型的文章 相信大家对射线和模型面片相交的原理已经有所了解 那么今天我们再深入探究关于射线拾取的一个问题 那就是遍历场景中的所有与射线相交的模型的优化问题 首先我们来复习一下射线拾取模型的原理 请看下图 我们从
  • ELK 日志系统收集K8s中日志

    容器特性给日志采集带来的困难 K8s弹性伸缩性 导致不能预先确定采集的目标 容器隔离性 容器的文件系统与宿主机是隔离 导致日志采集器读取日志文件受阻 日志按体现方式分类 应用程序日志记录体现方式分为两类 标准输出 输出到控制台 使用kube
  • 人工智能算法 上市公司,人工智能算法公司排名

    人工智能上市公司龙头股票有哪些 一 科大讯飞 002230 属于人工智能稀缺标的 多领域布局苦尽甘来 业绩拐点临近 二 浪潮信息 000977 人工智能基础设施提供商 目前具备业界最全CPU服务器产品线 三 中科曙光 603019 含着金钥
  • 第十二章 内中断

    引言 本书主要讲解硬件中断 12 1 内中断的产生 12 2 中断处理程序 12 3 中断向量表 中断向量表在内存中存放 对于8086PC机 中断向量表指定存放在内存地址0处 从内存0000 0000到0000 03FF的1024个单元中存
  • 微信小程序npm构建

    步骤 一 初始化 npm init y 自动生成生成package json文件 二 project config js配置项 packNpmManually false packNpmRelationList packageJsonPat
  • error: No rule to make target ‘...‘. Stop. 解决方案

    一 error 二 解决方案 第一步 删除 xxx pro 文件中的 RESOURCES xxx qrc 然后 CTRL S 保存文件 第二步 重新添加资源文件 注 文件名不要使用中文 以避免未知的错误 三 环境
  • 类成员函数创建线程

    include
  • iOS--伪后台(安卓与iOS区别)

    1 后台机制方面的区别 提到后台 大家应该会很容易想到安卓的真后台了吧 所谓真后台 就是像PC一样 将应用保留在RAM中 当你使用HOME键退出应用 程序实际上并没有完全退出 而是被系统挂在了后台 比如一些聊天软件 之所以关闭后依然能够收到
  • 注意力机制详述

    学习本部分默认大家对RNN神经网络已经深入理解了 这是基础 同时理解什么是时间序列 尤其RNN的常用展开形式进行画图 这个必须理解了 这篇文章整理有关注意力机制 Attention Mechanism 的知识 主要涉及以下几点内容 1 注意
  • Django 项目使用 Bootstrap 的导入方式

    Django 项目中导入 Bootstrap 是固定的 补充 1 Django 项目的 html 文件中必须先写 meta 再引入其他内容 并且对于导入 JS 的先后顺序有比较严格的要求 补充 2 Django 项目表单中使用POST的方法
  • C++ 对象模型

    C 对象模型 虚函数机制 实现执行器绑定 虚基类机制 实现多继承体系中只有一个共享实体 非静态数据成员放在 object 之中 静态数据成员放在 object 之外 静态和非静态成员函数都放在 object 之外 每个类会产生一堆指向虚函数
  • 表单--form对象

    在Javascript 中 页面上的每一对
  • AAAI 2021

    作者 孙宇冲 单位 中国人民大学 多模态学习旨在使计算机拥有处理不同来源信息的能力 近年来成为了人工智能领域的研究热点 多模态学习将不同模态信息进行融合 学习不同模态信息之间的关联 人类对信息的处理其实也是多模态的 如人可以同时利用视觉和听
  • 爬虫的原理(基本流程,Request与Response,怎么解决JavaScript渲染的问题,怎么保存数据)

    什么是爬虫 爬虫就是请求网站并提取数据的自动化程序 爬虫基本流程 1 发起请求 通过HTTP库向目标站点发起请求 即发送一个Request 请求可以包含额外的headers等配置信息 等待服务器响应 2 获取响应内容 如果服务器能正常响应
  • SilverLight通过Net.TCP(NetTCPBinding)方式调用WCF服务

    在SilverLight中通过标准的BasicHttpBinding来调用WCF服务是非常容易的 只要通过VS的添加服务引用功能添加一下就直接能用了 但是通过net tcp绑定来调用则相当麻烦 一 创建解决方案 首先在VS中创建一个新的Si
  • 消息队列之RabbitMQ介绍与运用

    RabbitMQ 说明 本章 我们主要从RabbitMQ简介 RabbitMQ安装 RabbitMQ常用命令 RabbitMQ架构模式 RabbitMQ使用 Quick RabbitMQPlus的使用和RabbitMQ总结这几个方面对Rab
  • 实变函数与泛函分析(一)集合论

    文章目录 为什么需要实变函数 集合论 集合的表示与运算 上极限 下极限集合 对等与基数 伯恩斯坦 定理可数 不可数集合 度量空间与欧氏空间 聚点内点界点 开集闭集 为什么需要实变函数 对于微积分 其有一个非常明显的不足 黎曼意义下可积函数的
  • vintage、迁移率、滚动率、入催率等概念——看完你就懂了

    随着互联网金融的发展 对数据分析的需求越来越大 数据分析的目的其实是为了找到风险和收益的平衡点 高收益伴随着高风险 而低风险的回报又如同鸡肋 所以 太高的风险 太低的收益都不行 平衡点通俗来讲就是风险在控制范围之中 收益也可以接受 为了找到
  • ebay的api开发技术说明,有点乱

    使用eBay API的基本步骤引入 开始eBay API 例如 以下基本步骤需要 1 注册开发者账号 https developer ebay com join Default aspx 2 选择API类型 eBay有大约6种API 开发语
  • QT自定义控件类,无法获取真实宽度和高度

    问题 自定义控件类 无法获取真实的高度和宽度 代码如下 头文件 ifndef ROUNDEDTOOLTIP H define ROUNDEDTOOLTIP H include