Qt一些不起眼但很实用的小技巧汇总

1.QProgressBar(进度条控件)

当将进度条控件的最大值、最小值都设置为0时,可以显示忙碌状态,从而替代百分比表示的进度。这在某些情况下,非常有用,例如:当用QNetworkAccessManager从远端服务器下载某个文件,而不知道文件多大、不知道要下载多久才能下载完成时,设置为忙碌状态就非常适用。如下为进度条忙碌状态:

 实现代码如下:

// m_pProgressBVar为进度条控件
m_pProgressBVar->setMaximum(0);
m_pProgressBVar->setMinimum(0);

2.QLineEdit(编辑框控件)

2.1.setClearButtonEnabled函数

// m_pLineEdit为QLineEdit
m_pLineEdit->setClearButtonEnabled(true);

如上面代码,通过调用单行编辑框控件的setClearButtonEnabled方法,且向该方法传递true参数,当编辑框文本不为空时,则编辑框右边会出现一个圆形叉号,点击该叉号会清除文本;当编辑框没有文本时,右边圆形叉号不会出现。如下:

2.2. setInputMask 函数

通过 setInputMask 函数设置掩码,如设置IP,如下代码可以设置IP:

ipLineEdit->setInputMask("000.000.000.000;0");
maskLineEdit->setInputMask("000.000.000.000;0");
gatewayLineEdit->setInputMask("000.000.000.000;0");
dnsLineEdit->setInputMask("000.000.000.000;0");

 效果如下:

具体参见:利用QLineEdit的setInputMask函数和正则表达式显示IP地址_荆楚闲人的博客-CSDN博客 

 3.利用QMetaObject::Connection和disconnect函数直接断开信号槽

如下为connect函数:

[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

 某些情况下,我们需要断开原来已经连接的信号槽,否则对同一对象的同一信号调用N次connect,则会发送N次信号,也就是槽函数会进入N次,这可能不是我们想要的结果,具体参见:

槽函数会被执行多次的问题原因及解决方法    博文。

调用disconnect函数可以断开原先的信号槽,其是connect的逆函数。disconnect函数有6个,如下:

[static] bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
[static] bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
bool QObject::disconnect(const char *signal = nullptr, const QObject *receiver = nullptr, const char *method = nullptr) const
bool QObject::disconnect(const QObject *receiver, const char *method = nullptr) const
[static] bool QObject::disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
[static] bool QObject::disconnect(const QMetaObject::Connection &connection)

前5个函数的用法,请自行查阅Qt Assist。后面这个用法很方便,参数是从connect函数的返回值,你可以认为是一个唯一id,如下代码就可以取消信号槽连接:

QMetaObject::Connection connectId = QObject::connect(...); // 相关参数,请自行根据自己业务传递
QObject::disconnect(connectId); // 断开连接

未完,待续,后期工作用到后再继续写!

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值