-
資料庫處理一般建議在主執行緒,如果非要在其他執行緒,務必記得打開資料庫也要在那個執行緒,即在那個執行緒使用資料庫就在那個執行緒打開,不能打開資料庫在主執行緒,執行sql在子執行緒,很可能出問題,
-
新版的QTcpServer類在64位版本的Qt下很可能不會進入incomingConnection函式,那是因為Qt5對應的incomingConnection函式引數變了,由之前的int改成了qintptr,改成qintptr有個好處,在32位上自動是quint32而在64位上自動是quint64,如果在Qt5中繼續寫的引數是int則在32位上沒有問題在64位上才有問題,所以為了兼容Qt4和Qt5,必須按照不一樣的引數寫,
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
void incomingConnection(qintptr handle);
#else
void incomingConnection(int handle);
#endif
-
Qt支持所有的界面控制元件比如QPushButton、QLineEdit自動關聯 on_控制元件名_信號(引數) 信號槽,比如按鈕的單擊信號 on_pushButton_clicked(),然后直接實作槽函式即可,
-
QWebEngineView控制元件由于使用了opengl,在某些電腦上可能由于opengl的驅動過低會導致花屏或者各種奇奇怪怪的問題,比如showfullscreen的情況下滑鼠右鍵失效,需要在main函式啟用軟體opengl渲染,
#if (QT_VERSION > QT_VERSION_CHECK(5,4,0))
//下面兩種方法都可以,Qt默認采用的是AA_UseDesktopOpenGL
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
//QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
#endif
QApplication a(argc, argv);
另外一個方法解決 全屏+QWebEngineView控制元件一起會產生右鍵選單無法彈出的bug,需要上移一個像素
QRect rect = qApp->desktop()->geometry();
rect.setY(-1);
rect.setHeight(rect.height());
this->setGeometry(rect);
- QStyle內置了很多方法用處很大,比如精確獲取滑動潭訓鼠按下處的值,
QStyle::sliderValueFromPosition(minimum(), maximum(), event->x(), width());
- 用QFile讀寫檔案的時候,推薦用QTextStream檔案流的方式來讀寫檔案,速度快很多,基本上會有30%的提升,檔案越大性能區別越大,
//從檔案加載英文屬性與中文屬性對照表
QFile file(":/propertyname.txt");
if (file.open(QFile::ReadOnly)) {
//QTextStream方法讀取速度至少快百分之30
#if 0
while(!file.atEnd()) {
QString line = file.readLine();
appendName(line);
}
#else
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
appendName(line);
}
#endif
file.close();
}
- 用QFile.readAll()讀取QSS檔案默認是ANSI格式,不支持UTF8,如果在QtCreator中打開qss檔案來編輯保存,這樣很可能導致qss加載以后沒有效果,
void frmMain::initStyle()
{
//加載樣式表
QString qss;
//QFile file(":/qss/psblack.css");
//QFile file(":/qss/flatwhite.css");
QFile file(":/qss/lightblue.css");
if (file.open(QFile::ReadOnly)) {
#if 1
//用QTextStream讀取樣式檔案不用區分檔案編碼 帶bom也行
QStringList list;
QTextStream in(&file);
//in.setCodec("utf-8");
while (!in.atEnd()) {
QString line;
in >> line;
list << line;
}
qss = list.join("\n");
#else
//用readAll讀取默認支持的是ANSI格式,如果不小心用creator打開編輯過了很可能打不開
qss = QLatin1String(file.readAll());
#endif
QString paletteColor = qss.mid(20, 7);
qApp->setPalette(QPalette(QColor(paletteColor)));
qApp->setStyleSheet(qss);
file.close();
}
}
- QString內置了很多轉換函式,比如可以呼叫toDouble轉為double資料,但是當你轉完并列印的時候你會發現精確少了,只剩下三位了,其實原始資料還是完整的精確度的,只是列印的時候優化成了三位,如果要保證完整的精確度,可以呼叫 qSetRealNumberPrecision 函式設定精確度位數即可,
QString s1, s2;
s1 = "666.5567124";
s2.setNum(888.5632123, 'f', 7);
qDebug() << qSetRealNumberPrecision(10) << s1.toDouble() << s2.toDouble();
- 用QScriptValueIterator決議資料的時候,會發現總是會多一個節點內容,并且內容為空,如果需要跳過則增加一行代碼,
while (it.hasNext()) {
it.next();
if (it.flags() & QScriptValue::SkipInEnumeration)
continue;
qDebug() << it.name();
}
- setPixmap是最糟糕的貼圖方式,一般只用來簡單的不是很頻繁的貼圖,頻繁的建議painter繪制,默認雙緩沖,在高級點用opengl繪制,利用GPU,
Qt開發經驗開源主頁(持續更新):
- https://gitee.com/feiyangqingyun/qtkaifajingyan
- https://github.com/feiyangqingyun/qtkaifajingyan
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277431.html
標籤:其他
