Qt 工作笔记

本文记录了工作中的QT经验,涵盖PRO工程文件操作,如强制添加文件、查看宏值等;还包括拖拽文件到QT应用的设置,槽函数sender()值为nullptr的原因及解决办法,Qt Assistant风格自定义,以及QTableWidget表头左上角添加文字等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一些工作中的QT经验

有错还望指正 - 勿喷,谢谢

PRO 工程文件

强制添加工程外的文件

QMAKE_CXXFLAGS += /FI"$$PWD/*******.*"

查看宏的值

message(QMAKE_CXXFLAGS)

使用环境变量

$$(ENVI_NAME)

添加第三方库

一般包含库的时候会去掉 前面的 lib (如果有的话), 这个时候可能项目编译不过,
这个时候试着 将 lib 保留, 编译试试
结论 - 工程配置的时候库的名字不要去掉 lib

比如配置了环境变量 BOOST_PATH
BOOST_PATH: boost所在的绝对路径 (目录结构图下图)
win32:LIBS += -L"$$(BOOST_PATH)/lib/x64"
-llibboost_thread-vc142-mt-gd-x64-1_75
! 注意 工程编译不过的时候
在这里插入图片描述
第三方库包含

Release 版本输出日志问题 - 某些宏没有开启

Release版本的输出却没有文件行数等信息。

原因是:文件信息、行数等信息在Release版本默认舍弃。我们只要在.pro文件定义一个宏
**
DEFINES += QT_MESSAGELOGCONTEXT
DEFINES += QT_MESSAGELOGCONTEXT
**
然后,重新qmake,编译(有可能要删除掉之前编译的中间文件),就可以在Release版本中正确输出日志信息

拖拽文件到QT应用

使能拖拽

setAcceptDrops(true);

重写拖拽相关事件

virtual void dragEnterEvent(QDragEnterEvent *event)
{
	if(true/*满足条件*/)
		event->acceptProposedAction(); // 接收后释放鼠标才会触发 dropEvent
	else {
		event->ignore(); // 不接受鼠标事件
	}
}
void dropEvent(QDropEvent *event)
{
	// 干你想干的事
}

槽函数内 sender() 值为 nullptr

出现的原因

  1. 对象被删除, 待确认(但可以往这方面找问题)
  2. connect采用了一下格式
    connect(sendObj, signal, recvObj, slot); // 注意无接收对象。

解决办法

  1. 改用 有接收对象的即可
    connect(sendObj, signal, recvObj, slot); // 注意无接收对象。

Qt Assistant 风格自定义

  1. 准备 qss(可以是.qss, .txt, 或者没有后缀 等等文本 对就是文本) 文件
  2. 打开系统命令 执行 assistant.exe -stylesheet 准备的 ‘qss’ 文件即可

如: qtinstanlldir\assistant.exe -stylesheet dark.qss

QTableWidget 表头(含左上角文字显示)

1. 左上角添加文字

1)QAbstractButton*btn = m_tableWidget->findChild<QAbstractButton*>();
    if (btn)
    {
        btn->setText(QStringLiteral("要添加的文字"));
        btn->installEventFilter(this); // 重要的
    }
2)重写 eventFilter事件
    if (e->type() == QEvent::Paint)
    {
        QAbstractButton *btn = qobject_cast<QAbstractButton*>(o);
        if (btn)
        {
            // paint by hand (borrowed from QTableCornerButton)
            QStyleOptionHeader opt;
            opt.init(btn);
            QStyle::State state = QStyle::State_None;
            if (btn->isEnabled())
                state |= QStyle::State_Enabled;
            if (btn->isActiveWindow())
                state |= QStyle::State_Active;
            if (btn->isDown())
                state |= QStyle::State_Sunken;
            opt.state = state;
            opt.rect = btn->rect();
            opt.text = btn->text(); // this line is the only difference to QTableCornerButton

            opt.position = QStyleOptionHeader::OnlyOneSection;
            opt.textAlignment = Qt::AlignCenter;
            QStylePainter painter(btn);
            painter.drawControl(QStyle::CE_Header, opt);
            return true;
        }
    }
    return false;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值