1.首先网上的两种方法
window上可行,但是Ubuntu 显示127.0.0.1
QHostInfoa=QHostInfo::fromName(QHostInfo::localHostName());
foreach(const QHostAddress &b, a.addresses()) {
if(b.protocol() == QAbstractSocket::IPv4Protocol) {
qDebug() << __LINE__ << b.toString();
}
}
ubuntu可行,但是window上返回,超过一个的ipadress
foreach(const QHostAddress &a, QNetworkInterface::allAddresses()){
if(a.protocol() == QAbstractSocket::IPv4Protocol && a!=QHostAddress(QHostAddress::LocalHost)){
qDebug() << __LINE__<< a.toString();
}
}
但是没有那种,既可以在双平台可行
后来使用下种方法
QString lds::getLocalIPlike192(bool *ok){
if(ok)*ok = false;foreach(const QHostAddress &a, QNetworkInterface::allAddresses()){if(a.protocol() == QAbstractSocket::IPv4Protocol){if(a.toString().startsWith("192.168")) {//局域网return a.toString();}}}return "";}
仅限局域网
2.关于通过槽函数名执行槽函数的办法
这种逆向思维比较别扭,后来使用一直用的方法就能解决
qDebug() << QMetaObject::invokeMethod(this,"on_clearAll_clicked",Qt::QueuedConnection); 3.QString初始化的意义 一开始对于QString 的isnull没有任何概念, 用的最多的是isempty,在处理mysql addbindvalue的时候才意识 换个观点,如何insert 的时候,插入一个null 的值,那就addbindvalue(QString()) 此时她本身的为isnull