不起眼但很实用的小技巧汇总"/>
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); // 断开连接
未完,待续,后期工作用到后再继续写!
更多推荐
Qt一些不起眼但很实用的小技巧汇总
发布评论