老司机夜插-理伦理片-理伦片免费-理伦片免费观看-理伦片免费看-理伦日韩-理论福利片-理论片第一页-理论片电影-理论片理论

金喜正规买球

跨平臺C++開發(fā):10年Qt開發(fā)經(jīng)驗覆蓋100多個Qt開發(fā)技巧!

轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2020-11-12 11:45:36.807|閱讀 1611 次

概述:本文主要介紹了100多個Qt開發(fā)經(jīng)驗。比如qss的ANSI編碼、嵌套窗口中主窗口無法接收鼠標移動事件等,又比如我用qss設(shè)置窗口樣式,但是項目每次重新構(gòu)建以后,樣式表就會不生效等問題,也花了自己不少時間去解決,所以在這里轉(zhuǎn)發(fā)大神的經(jīng)驗,留作以后參考和逐條的研究,也分享給更多正在學習Qt或者正在使用Qt進行程序開發(fā)的朋友們。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺式機操作系統(tǒng)以及移動操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M的試用版。趕快點擊下載Qt最新試用版>>

Qtitan組件集

  • QtitanRibbon| 下載試用: 遵循Microsoft Ribbon UI Paradigm for Qt技術(shù)的Ribbon UI組件,致力于為Windows、Linux和Mac OS X提供功能完整的Ribbon組件。
  • QtitanChart | 下載試用 : 是一個C ++庫,代表一組控件,這些控件使您可以快速地為應(yīng)用程序提供漂亮而豐富的圖表。并且支持所有主要的桌面操作系統(tǒng)。
  • QtitanDataGrid| 下載試用 : 適用于Qt的商業(yè)化DataGrid 組件,使得表格數(shù)據(jù)可以直接面向終端用戶完全集成了QtDesigner,極易適應(yīng)其他相似開發(fā)環(huán)境,保證100%兼容Qt GUI。

本文主要介紹了100多個Qt開發(fā)經(jīng)驗。比如qss的ANSI編碼、嵌套窗口中主窗口無法接收鼠標移動事件等,又比如我用qss設(shè)置窗口樣式,但是項目每次重新構(gòu)建以后,樣式表就會不生效等問題,也花了自己不少時間去解決,所以在這里轉(zhuǎn)發(fā)大神的經(jīng)驗,留作以后參考和逐條的研究,也分享給更多正在學習Qt或者正在使用Qt進行程序開發(fā)的朋友們。


1. 當編譯發(fā)現(xiàn)大量錯誤的時候,從第一個看起,一個一個的解決,不要急著去看下一個錯誤,往往后面的錯誤都是由于前面的錯誤引起的,第一個解決后很可能都解決了。

2. 定時器是個好東西,學會好使用它,有時候用QTimer::singleShot可以解決意想不到的問題。

3. 打開creator,在構(gòu)建套件的環(huán)境中增加MAKEFLAGS=-j8,可以不用每次設(shè)置多線程編譯。珍愛時間和生命。新版的QtCreator已經(jīng)默認就是j8。

4. 如果你想順利用QtCreator部署安卓程序,首先你要在AndroidStudio 里面配置成功,把坑全部趟平。

5. 很多時候找到Qt對應(yīng)封裝的方法后,記得多看看該函數(shù)的重載,多個參數(shù)的,你會發(fā)現(xiàn)不一樣的世界,有時候會恍然大悟,原來Qt已經(jīng)幫我們封裝好了。

6. 可以在pro文件中寫上標記版本號+ico圖標(Qt5才支持)

  1. VERSION = 2020.10.25
  2. RC_ICONS = main0.ico


7. 管理員運行程序,限定在MSVC編譯器

  1. QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' uiAccess='false'" #以管理員運行
  2. QMAKE_LFLAGS += /SUBSYSTEM:WINDOWS,"5.01" #VS2013 在XP運行


8. 運行文件附帶調(diào)試輸出窗口

CONFIG += console pro

9. 繪制平鋪背景QPainter::drawTiledPixmap,繪制圓角矩形QPainter::drawRoundedRect(),而不是QPainter::drawRoundRect();

10. 移除舊的樣式


  1. //移除原有樣式

  2. style()->unpolish(ui->btn);

  3. //重新設(shè)置新的該控件的樣式。

  4. style()->polish(ui->btn);


11. 獲取類的屬性

const QMetaObject *metaobject = object->metaObject();

int count = metaobject->propertyCount();

for (int i = 0; i < count; ++i) {

QMetaProperty metaproperty = metaobject->property(i);

const char *name = metaproperty.name();

QVariant value = object->property(name);

qDebug() << name << value;

}


12. Qt內(nèi)置圖標封裝在QStyle中,大概七十多個圖標,可以直接拿來用。

  1. SP_TitleBarMenuButton,
  2. SP_TitleBarMinButton,
  3. SP_TitleBarMaxButton,
  4. SP_TitleBarCloseButton,
  5. SP_MessageBoxInformation,
  6. SP_MessageBoxWarning,
  7. SP_MessageBoxCritical,
  8. SP_MessageBoxQuestion,

  9. ...


13. 根據(jù)操作系統(tǒng)位數(shù)判斷加載


  1. win32 {

  2. contains(DEFINES, WIN64) { DESTDIR = $${PWD}/../../bin64

  3. } else { DESTDIR = $${PWD}/../../bin32 }

  4. }


14. Qt5增強了很多安全性驗證,如果出現(xiàn)setGeometry: Unable to set geometry,請將該控件的可見移到加入布局之后。

15. 可以將控件A添加到布局,然后控件B設(shè)置該布局,這種靈活性大大提高了控件的組合度,比如可以在文本框左側(cè)右側(cè)增加一個搜索按鈕,按鈕設(shè)置圖標即可。

  1. QPushButton *btn = new QPushButton;
  2. btn->resize(30, ui->lineEdit->height());
  3. QHBoxLayout *layout = new QHBoxLayout(ui->lineEdit);
  4. layout->setMargin(0);
  5. layout->addStretch();
  6. layout->addWidget(btn);


16. 對QLCDNumber控件設(shè)置樣式,需要將QLCDNumber的segmentstyle設(shè)置為flat。

17. 巧妙的使用findChildren可以查找該控件下的所有子控件。findChild為查找單個。


  1. //查找指定類名objectName的控件

  2. QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>("widgetname");

  3. //查找所有QPushButton

  4. QList<QPushButton *> allPButtons = parentWidget.findChildren<QPushButton *>();

  5. //查找一級子控件,不然會一直遍歷所有子控件

  6. QList<QPushButton *> childButtons = parentWidget.findChildren<QPushButton *>(QString(), Qt::FindDirectChildrenOnly);


18. 巧妙的使用inherits判斷是否屬于某種類。


  1. QTimer *timer = new QTimer; // QTimer inherits QObject

  2. timer->inherits("QTimer"); // returns true

  3. timer->inherits("QObject"); // returns true

  4. timer->inherits("QAbstractButton"); // returns false


19. 使用弱屬性機制,可以存儲臨時的值用于傳遞判斷。可以通過widget->dynamicPropertyNames()列出所有弱屬性名稱,然后通過widget->property("name")取出對應(yīng)的弱屬性的值。

20. 在開發(fā)時, 無論是出于維護的便捷性, 還是節(jié)省內(nèi)存資源的考慮, 都應(yīng)該有一個 qss 文件來存放所有的樣式表, 而不應(yīng)該將 setStyleSheet 寫的到處都是。如果是初學階段或者測試階段可以直接UI上右鍵設(shè)置樣式表,正式項目還是建議統(tǒng)一到一個qss樣式表文件比較好,統(tǒng)一管理。

21. 如果出現(xiàn)Z-order assignment: is not a valid widget.錯誤提示,用記事本打開對應(yīng)的ui文件,找到<zorder></zorder>為空的地方,刪除即可。

22. 善于利用QComboBox的addItem的第二個參數(shù)設(shè)置用戶數(shù)據(jù),可以實現(xiàn)很多效果,使用itemData取出來。

23. 如果用了webengine模塊,發(fā)布程序的時候帶上QtWebEngineProcess.exe+translations文件夾+resources文件夾。

24. 默認Qt是一個窗體一個句柄,如果要讓每個控件都擁有獨立的句柄,設(shè)置下 a.setAttribute(Qt::AA_NativeWindows);

25. Qt+Android防止程序被關(guān)閉。


  1. #if defined(Q_OS_ANDROID)

  2. QAndroidService a(argc, argv);

  3. return a.exec()

  4. #else

  5. QApplication a(argc, argv);

  6. return a.exec();

  7. #endif


26. 可以對整體的指示器設(shè)置樣式,例如 *::down-arrow,*::menu-indicator{} *::up-arrow:disabled,*::up-arrow:off{}。

27. 可以執(zhí)行位置設(shè)置背景圖片。


  1. QMainWindow > .QWidget {

  2. background-color: gainsboro;

  3. background-image: url(:/images/pagefold.png);

  4. background-position: top right;

  5. background-repeat: no-repeat

  6. }


28. 嵌入式linux運行Qt程序 Qt4寫法:./HelloQt -qws & Qt5寫法:./HelloQt --platform xcb

29. Qtcreator軟件的配置文件存放在:C:\Users\Administrator\AppData\Roaming\QtProject,有時候如果發(fā)現(xiàn)出問題了,將這個文件夾刪除后打開creator自動重新生成即可。

30. QMediaPlayer是個殼,依賴本地解碼器,視頻這塊默認基本上就播放個MP4,如果要支持其他格式需要下載k-lite或者LAV Filters安裝即可(WIN上,其他系統(tǒng)上自行搜索)。如果需要做功能強勁的播放器,初學者建議用vlc、mpv,終極大法用ffmpeg。

31. 判斷編譯器類型、編譯器版本、操作系統(tǒng)。


  1. //GCC編譯器

  2. #ifdef __GNUC__

  3. #if __GNUC__ >= 3 // GCC3.0以上


  4. //MSVC編譯器

  5. #ifdef _MSC_VER

  6. #if _MSC_VER >=1000 // VC++4.0以上

  7. #if _MSC_VER >=1100 // VC++5.0以上

  8. #if _MSC_VER >=1200 // VC++6.0以上

  9. #if _MSC_VER >=1300 // VC2003以上

  10. #if _MSC_VER >=1400 // VC2005以上

  11. #if _MSC_VER >=1500 // VC2008以上

  12. #if _MSC_VER >=1600 // VC2010以上

  13. #if _MSC_VER >=1700 // VC2012以上

  14. #if _MSC_VER >=1800 // VC2013以上

  15. #if _MSC_VER >=1900 // VC2015以上


  16. //Borland C++

  17. #ifdef __BORLANDC__


  18. //Cygwin


  19. #ifdef __CGWIN__


  20. #ifdef __CYGWIN32__


  21. //mingw


  22. #ifdef __MINGW32__


  23. //windows


  24. #ifdef _WIN32 //32bit


  25. #ifdef _WIN64 //64bit


  26. #ifdef _WINDOWS //圖形界面程序


  27. #ifdef _CONSOLE //控制臺程序


  28. //Windows(95/98/Me/NT/2000/XP/Vista)和Windows CE都定義了


  29. #if (WINVER >= 0x030a) // Windows 3.1以上


  30. #if (WINVER >= 0x0400) // Windows 95/NT4.0以上


  31. #if (WINVER >= 0x0410) // Windows 98以上


  32. #if (WINVER >= 0x0500) // Windows Me/2000以上


  33. #if (WINVER >= 0x0501) // Windows XP以上


  34. #if (WINVER >= 0x0600) // Windows Vista以上


  35. //_WIN32_WINNT 內(nèi)核版本


  36. #if (_WIN32_WINNT >= 0x0500) // Windows 2000以上


  37. #if (_WIN32_WINNT >= 0x0501) // Windows XP以上


  38. #if (_WIN32_WINNT >= 0x0600) // Windows Vista以上


32. 在pro中判斷Qt版本及構(gòu)建套件位數(shù)


  1. #打印版本信息

  2. message(qt version: $$QT_VERSION)


  3. #判斷當前qt版本號

  4. QT_VERSION = $$[QT_VERSION]

  5. QT_VERSION = $$split(QT_VERSION, ".")

  6. QT_VER_MAJ = $$member(QT_VERSION, 0)

  7. QT_VER_MIN = $$member(QT_VERSION, 1)


  8. #下面是表示 Qt5.5

  9. greaterThan(QT_VER_MAJ, 4) {

  10. greaterThan(QT_VER_MIN, 4) {

  11. #自己根據(jù)需要做一些處理

  12. }

  13. }


  14. #QT_ARCH是Qt5新增的,在Qt4上沒效果

  15. #打印當前Qt構(gòu)建套件的信息

  16. message($$QT_ARCH)


  17. #表示arm平臺構(gòu)建套件

  18. contains(QT_ARCH, arm) {}


  19. #表示32位的構(gòu)建套件

  20. contains(QT_ARCH, i386) {}


  21. #表示64位的構(gòu)建套件

  22. contains(QT_ARCH, x86_64) {}


33. Qt最小化后恢復(fù)界面假死凍結(jié),加上代碼


  1. void showEvent(QShowEvent *e)

  2. {

  3. setAttribute(Qt::WA_Mapped);

  4. QWidget::showEvent(e);

  5. }


34. 獲取標題欄高度:style()->pixelMetric(QStyle::PM_TitleBarHeight); PM_TitleBarHeight點進去你會發(fā)現(xiàn)新大陸。

35. 設(shè)置高分屏屬性以便支持2K4K等高分辨率,尤其是手機app。必須寫在main函數(shù)的QApplication a(argc, argv);的前面。


  1. #if (QT_VERSION > QT_VERSION_CHECK(5,6,0))

  2. QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

  3. #endif


36. 如果運行程序出現(xiàn) Fault tolerant heap shim applied to current process. This is usually due to previous crashes. 錯誤。

辦法:打開注冊表,找到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\,選中Layers鍵值,從右側(cè)列表中刪除自己的那個程序路徑即可。

37. Qt內(nèi)置了QFormLayout表單布局用于自動生成標簽+輸入框的組合的表單界面。

38. qml播放視頻在linux需要安裝 sudo apt-get install libpulse-dev。

39. 可以直接繼承QSqlQueryModel實現(xiàn)自定義的QueryModel,比如某一列字體顏色,占位符,其他樣式等,重寫QVariant CustomSqlModel::data(const QModelIndex &index, int role) const。

40. Qt5以后提供了類QScroller直接將控件滾動。


  1. //禁用橫向滾動條

  2. ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


  3. //禁用縱向滾動條

  4. ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


  5. //設(shè)置橫向按照像素值為單位滾動

  6. ui->listWidget->setHorizontalScrollMode(QListWidget::ScrollPerPixel);


  7. //設(shè)置縱向按照像素值為單位滾動

  8. ui->listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel);


  9. //設(shè)置滾動對象以及滾動方式為鼠標左鍵拉動滾動

  10. QScroller::grabGesture(ui->listWidget, QScroller::LeftMouseButtonGesture);


  11. //還有個QScrollerProperties可以設(shè)置滾動的一些參數(shù)


41. 如果使用sqlite數(shù)據(jù)庫不想產(chǎn)生數(shù)據(jù)庫文件,可以創(chuàng)建內(nèi)存數(shù)據(jù)庫。


  1. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

  2. db.setDatabaseName(":memory:");


42. 清空數(shù)據(jù)表并重置自增ID,sql = truncate table table_name。

43. Qtchart模塊從Qt5.7開始自帶,最低編譯要求Qt5.4。在安裝的時候記得勾選,默認不勾選。使用該模塊需要引入命名空間。


  1. #include <QChartView>

  2. QT_CHARTS_USE_NAMESPACE

  3. class CustomChart : public QChartView


44. QPushButton左對齊文字,需要設(shè)置樣式表QPushButton{text-align:left;}

45. QLabel有三種設(shè)置文本的方法,掌握好Qt的屬性系統(tǒng),舉一反三,可以做出很多效果。


  1. ui->label->setStyleSheet("qproperty-text:hello;");

  2. ui->label->setProperty("text", "hello");

  3. ui->label->setText("hello");


46. 巧妙的用QEventLoop開啟事件循環(huán),可以使得很多同步獲取返回結(jié)果而不阻塞界面。QEventLoop內(nèi)部新建了線程執(zhí)行。


  1. QEventLoop loop;

  2. connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

  3. loop.exec();


47. 多種預(yù)定義變量 #if (defined webkit) || (defined webengine),去掉生成空的debug和release目錄 CONFIG -= debug_and_release。

48. 新版的Qtcreator增強了語法檢查,會彈出很多警告提示等,可以在插件列表中關(guān)閉clang打頭的幾個即可,Help》About Plugins。也可以設(shè)置代碼檢查級別,Tools》Options 》C++ 》Code Model。

49. QSqlTableModel的rowCount方法,默認最大返回256,如果超過256,可以將表格拉到底部,會自動加載剩余的,每次最大加載256條數(shù)據(jù),如果需要打印或者導(dǎo)出數(shù)據(jù),記得最好采用sql語句去查詢,而不是使用QSqlTableModel的rowCount方法。不然永遠最大只會導(dǎo)出256條數(shù)據(jù)。

如果數(shù)據(jù)量很小,也可以采用如下方法:


  1. //主動加載所有數(shù)據(jù),不然獲取到的行數(shù)<=256

  2. while(model->canFetchMore()) {

  3. model->fetchMore();

  4. }


50. 如果需要指定無邊框窗體,但是又需要保留操作系統(tǒng)的邊框特性,可以自由拉伸邊框,可以使用

setWindowFlags(Qt::CustomizeWindowHint);

51. 在某些http post數(shù)據(jù)的時候,如果采用的是&字符串連接的數(shù)據(jù)發(fā)送,中文解析亂碼的話,需要將中文進行URL轉(zhuǎn)碼。


  1. QString content = "測試中文";

  2. QString note = content.toUtf8().toPercentEncoding();


52. Qt默認不支持大資源文件,比如添加了字體文件,需要pro文件開啟。

CONFIG += resources_big

53. Qt中繼承QWidget之后,樣式表不起作用,解決辦法有三個。強烈推薦方法一。

- 方法一:設(shè)置屬性 this->setAttribute(Qt::WA_StyledBackground, true);

- 方法二:改成繼承QFrame,因為QFrame自帶paintEvent函數(shù)已做了實現(xiàn),在使用樣式表時會進行解析和繪制。

- 方法三:重新實現(xiàn)QWidget的paintEvent函數(shù)時,使用QStylePainter繪制。


  1. void Widget::paintEvent(QPaintEvent *)

  2. {

  3. QStyleOption option;

  4. option.initFrom(this);

  5. QPainter painter(this);

  6. style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this);

  7. }


54. 有時候在界面上加了彈簧,需要動態(tài)改變彈簧對應(yīng)的拉伸策略,對應(yīng)方法為changeSize,很多人會選擇使用set開頭去找,找不到的。

55. 在使用QFile的過程中,不建議頻繁的打開文件寫入然后再關(guān)閉文件,比如間隔5ms輸出日志,IO性能瓶頸很大,這種情況建議先打開文件不要關(guān)閉,等待合適的時機比如析構(gòu)函數(shù)中或者日期變了需要重新變換日志文件的時候關(guān)閉文件。不然短時間內(nèi)大量的打開關(guān)閉文件會很卡,文件越大越卡。

56. 在很多網(wǎng)絡(luò)應(yīng)用程序,需要自定義心跳包來保持連接,不然斷電或者非法關(guān)閉程序,對方識別不到,需要進行超時檢測,但是有些程序沒有提供心跳協(xié)議,此時需要啟用系統(tǒng)層的保活程序,此方法適用于TCP連接。


  1. int fd = tcpSocket->socketDescriptor();

  2. int keepAlive = 1; //開啟keepalive屬性,缺省值:0(關(guān)閉)

  3. int keepIdle = 5; //如果在5秒內(nèi)沒有任何數(shù)據(jù)交互,則進行探測,缺省值:7200(s)

  4. int keepInterval = 2; //探測時發(fā)探測包的時間間隔為2秒,缺省值:75(s)

  5. int keepCount = 2; //探測重試的次數(shù),全部超時則認定連接失效,缺省值:9(次)

  6. setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));

  7. setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));

  8. setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));

  9. setsockopt(fd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));


57. 如果程序打包好以后彈出提示 This application failed to start because it could not find or load the Qt platform plugin 一般都是因為platforms插件目錄未打包或者打包錯了的原因?qū)е碌摹?

58. 非常不建議tr中包含中文,盡管現(xiàn)在的新版Qt支持中文到其他語言的翻譯,但是很不規(guī)范,也不知道TMD是誰教的,tr的本意是包含英文,然后翻譯到其他語言比如中文,現(xiàn)在大量的初學者濫用tr,如果沒有翻譯的需求,禁用tr,tr需要開銷的,Qt默認會認為他需要翻譯,會額外進行特殊處理。

59. 很多人Qt和Qt Creator傻傻分不清楚,經(jīng)常問Qt什么版本結(jié)果發(fā)一個Qt Creator的版本過來,Qt Creator是使用Qt編寫的集成開發(fā)環(huán)境IDE,和宇宙第一的Visual Studio一樣,他可以是msvc編譯器的(WIN對應(yīng)的Qt集成安裝環(huán)境中自帶的Qt Cerator是msvc的),也可以是mingw編譯的,還可以是gcc的。如果是自定義控件插件,需要集成到Qt Creator中,必須保證該插件的動態(tài)庫文件(dll或者so等文件)對應(yīng)的編譯器和Qt版本以及位數(shù)和Qt Creator的版本完全一致才行,否則基本不大可能集成進去。特別注意的是Qt集成環(huán)境安裝包中的Qt版本和Qt Creator版本未必完全一致,必須擦亮眼睛看清楚,有些是完全一致的。

60. 超過兩處相同處理的代碼,建議單獨寫成函數(shù)。代碼盡量規(guī)范精簡,比如 if(a == 123) 要寫成 if (123 == a),值在前面,再比如 if (ok == true) 要寫成 if (ok),if (ok == false) 要寫成 if (!ok)等。

61. 很多人問Qt嵌入式平臺用哪個好,這里統(tǒng)一回答(當前時間節(jié)點2018年):imx6+335x比較穩(wěn)定,性能高就用RK3288 RK3399,便宜的話就用全志H3,玩一玩可以用樹莓派香橙派。

 62. 對于大段的注釋代碼,建議用 #if 0 #endif 將代碼塊包含起來,而不是將該段代碼選中然后全部 // ,下次要打開這段代碼的話,又需要重新選中一次取消,如果采用的是 #if 0則只要把0改成1即可,效率大大提升。

63. Qt打包發(fā)布,有很多辦法,Qt5以后提供了打包工具windeployqt(linux上為linuxdeployqt,mac上為macdeployqt)可以很方便的將應(yīng)用程序打包,使用下來發(fā)現(xiàn)也不是萬能的,有時候會多打包一些沒有依賴的文件,有時候又會忘記打包一些插件尤其是用了qml的情況下,而且不能識別第三方庫,比如程序依賴ffmpeg,則對應(yīng)的庫需要自行拷貝,終極大法就是將你的可執(zhí)行文件復(fù)制到Qt安裝目錄下的bin目錄,然后整個一起打包,挨個刪除不大可能依賴的組件,直到刪到正常運行為止。

64. Qt中的動畫,底層用的是QElapsedTimer定時器來完成處理,比如產(chǎn)生一些指定規(guī)則算法的數(shù)據(jù),然后對屬性進行處理。

65. 在繪制無背景顏色只有邊框顏色的圓形時候,可以用繪制360度的圓弧替代,效果完全一致。


  1. QRect rect(-radius, -radius, radius * 2, radius * 2);

  2. //以下兩種方法二選一,其實繪制360度的圓弧=繪制無背景的圓形

  3. painter->drawArc(rect, 0, 360 * 16);

  4. painter->drawEllipse(rect);


66. 不要把d指針看的很玄乎,其實就是在類的實現(xiàn)文件定義了一個私有類,用來存放局部變量,個人建議在做一些小項目時,沒有太大必要引入這種機制,會降低代碼可讀性,增加復(fù)雜性,新手接受項目后會看的很懵逼。

67. 很多人在繪制的時候,設(shè)置畫筆以為就只可以設(shè)置個單調(diào)的顏色,其實QPen還可以設(shè)置brush,這樣靈活性就提高不知道多少倍,比如設(shè)置QPen的brush以后,可以使用各種漸變,比如繪制漸變顏色的進度條和文字等,而不再是單調(diào)的一種顏色。

68. 很多控件都帶有viewport,比如QTextEdit/QTableWidget/QScrollArea,有時候?qū)@些控件直接處理的時候發(fā)現(xiàn)不起作用,需要對其viewport()設(shè)置才行,比如設(shè)置滾動條區(qū)域背景透明,需要使用scrollArea->viewport()->setStyleSheet("background-color:transparent;");而不是scrollArea->setStyleSheet("QScrollArea{background-color:transparent;}");

69. 有時候設(shè)置了鼠標跟蹤setMouseTracking為真,如果該窗體上面還有其他控件,當鼠標移到其他控件上面的時候,父類的鼠標移動事件MouseMove識別不到了,此時需要用到HoverMove事件,需要先設(shè)置 setAttribute(Qt::WA_Hover, true);

70. Qt封裝的QDateTime日期時間類非常強大,可以字符串和日期時間相互轉(zhuǎn)換,也可以毫秒數(shù)和日期時間相互轉(zhuǎn)換,還可以1970經(jīng)過的秒數(shù)和日期時間相互轉(zhuǎn)換等。


  1. QDateTime dateTime;

  2. QString dateTime_str = dateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss");

  3. //從字符串轉(zhuǎn)換為毫秒(需完整的年月日時分秒)

  4. datetime.fromString("2011-09-10 12:07:50:541", "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();

  5. //從字符串轉(zhuǎn)換為秒(需完整的年月日時分秒)

  6. datetime.fromString("2011-09-10 12:07:50:541", "yyyy-MM-dd hh:mm:ss:zzz").toTime_t();

  7. //從毫秒轉(zhuǎn)換到年月日時分秒

  8. datetime.fromMSecsSinceEpoch(1315193829218).toString("yyyy-MM-dd hh:mm:ss:zzz");

  9. //從秒轉(zhuǎn)換到年月日時分秒(若有zzz,則為000)

  10. datetime.fromTime_t(1315193829).toString("yyyy-MM-dd hh:mm:ss[:zzz]");


71. 在我們使用QList、QStringList、QByteArray等鏈表或者數(shù)組的過程中,如果只需要取值,而不是賦值,強烈建議使用 at() 取值而不是 [] 操作符,在官方書籍《C++ GUI Qt 4編程(第二版)》的書中有特別的強調(diào)說明,此教材的原作者據(jù)說是Qt開發(fā)的核心人員編寫的,所以還是比較權(quán)威,至于使用 at() 與使用 [] 操作符速度效率的比較,網(wǎng)上也有網(wǎng)友做過此類對比。原文在書的212頁,這樣描述的:Qt對所有的容器和許多其他類都使用隱含共享,隱含共享是Qt對不希望修改的數(shù)據(jù)決不進行復(fù)制的保證,為了使隱含共享的作用發(fā)揮得最好,可以采用兩個新的編程習慣。第一種習慣是對于一個(非常量的)向量或者列表進行只讀存取時,使用 at() 函數(shù)而不用 [] 操作符,因為Qt的容器類不能辨別 [] 操作符是否將出現(xiàn)在一個賦值的左邊還是右邊,他假設(shè)最壞的情況出現(xiàn)并且強制執(zhí)行深層賦值,而 at() 函數(shù)則不被允許出現(xiàn)在一個賦值的左邊。

72. 如果是dialog窗體,需要在exec以后還能讓其他代碼繼續(xù)執(zhí)行,請在dialog窗體exec前增加一行代碼,否則會阻塞窗體消息。


  1. QDialog dialog;

  2. dialog.setWindowModality(Qt::WindowModal);

  3. dialog.exec();


73. 安全的刪除Qt的對象類,強烈建議使用deleteLater而不是delete,因為deleteLater會選擇在合適的時機進行釋放,而delete會立即釋放,很可能會出錯崩潰。如果要批量刪除對象集合,可以用qDeleteAll,比如 qDeleteAll(btns);

74. 在QTableView控件中,如果需要自定義的列按鈕、復(fù)選框、下拉框等其他模式顯示,可以采用自定義委托QItemDelegate來實現(xiàn),如果需要禁用某列,則在自定義委托的重載createEditor函數(shù)返回0即可。自定義委托對應(yīng)的控件在進入編輯狀態(tài)的時候出現(xiàn),如果想一直出現(xiàn),則需要重載paint函數(shù)用drawPrimitive或者drawControl來繪制。

75. 將 QApplication::style() 對應(yīng)的drawPrimitive、drawControl、drawItemText、drawItemPixmap等幾個方法用熟悉了,再結(jié)合QStyleOption屬性,可以玩轉(zhuǎn)各種自定義委托,還可以直接使用paint函數(shù)中的painter進行各種繪制,各種牛逼的表格、樹狀列表、下拉框等,絕對屌炸天。QApplication::style()->drawControl 的第4個參數(shù)如果不設(shè)置,則繪制出來的控件不會應(yīng)用樣式表。

76. 心中有坐標,萬物皆painter,強烈建議在學習自定義控件繪制的時候,將qpainter.h頭文件中的函數(shù)全部看一遍、試一遍、理解一遍,這里邊包含了所有Qt內(nèi)置的繪制的接口,對應(yīng)的參數(shù)都試一遍,你會發(fā)現(xiàn)很多新大陸,會大大激發(fā)你的繪制的興趣,猶如神筆馬良一般,策馬崩騰遨游代碼繪制的世界。

77. 在使用setItemWidget或者setCellWidget的過程中,有時候會發(fā)現(xiàn)設(shè)置的控件沒有居中顯示而是默認的左對齊,而且不會自動拉伸填充,對于追求完美的程序員來說,這個可不大好看,有個終極通用辦法就是,將這個控件放到一個widget的布局中,然后將widget添加到item中,這樣就完美解決了,而且這樣可以組合多個控件產(chǎn)生復(fù)雜的控件。


  1. //實例化進度條控件

  2. QProgressBar *progress = new QProgressBar;

  3. //增加widget+布局巧妙實現(xiàn)居中

  4. QWidget *widget = new QWidget;

  5. QHBoxLayout *layout = new QHBoxLayout;

  6. layout->setSpacing(0);

  7. layout->setMargin(0);

  8. layout->addWidget(progress);

  9. widget->setLayout(layout);

  10. ui->tableWidget->setCellWidget(0, 0, widget);


78. 很多時候需要在已知背景色的情況下,能夠清晰的繪制文字,這個時候需要計算對應(yīng)的文字顏色。


  1. //根據(jù)背景色自動計算合適的前景色

  2. double gray = (0.299 * color.red() + 0.587 * color.green() + 0.114 * color.blue()) / 255;

  3. QColor textColor = gray > 0.5 ? Qt::black : Qt::white;


79. 對QTableView或者QTableWidget禁用列拖動。


  1. #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))

  2. ui->tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);

  3. #else

  4. ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);

  5. #endif


80. 從Qt4轉(zhuǎn)到Qt5,有些類的方法已經(jīng)廢棄或者過時了,如果想要在Qt5中啟用Qt4的方法,比如QHeadVew的setMovable,可以在你的pro或者pri文件中加上一行即可:DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0

81. Qt中的QColor對顏色封裝的很完美,支持各種轉(zhuǎn)換,比如rgb、hsb、cmy、hsl,對應(yīng)的是toRgb、toHsv、toCmyk、toHsl,還支持透明度設(shè)置,顏色值還能轉(zhuǎn)成16進制格式顯示。


  1. QColor color(255, 0, 0, 100);

  2. qDebug() << color.name() << color.name(QColor::HexArgb);

  3. //輸出 #ff0000 #64ff0000


82. QVariant類型異常的強大,可以說是萬能的類型,在進行配置文件的存儲的時候,經(jīng)常會用到QVariant的轉(zhuǎn)換,QVariant默認自帶了toString、toFloat等各種轉(zhuǎn)換,但是還是不夠,比如有時候需要從QVariant轉(zhuǎn)到QColor,而卻沒有提供toColor的函數(shù),這個時候就要用到萬能辦法。


  1. if (variant.typeName() == "QColor") {

  2. QColor color = variant.value<QColor>();

  3. QFont font = variant.value<QFont>();

  4. QString nodeValue = color.name(QColor::HexArgb);

  5. }


83. Qt中的QString和const char *之間轉(zhuǎn)換,最好用toStdString().c_str()而不是toLocal8Bit().constData(),比如在setProperty中如果用后者,字符串中文就會不正確,英文正常。

 84. Qt的信號槽機制非常牛逼,也是Qt的獨特的核心功能之一,有時候我們在很多窗體中傳遞信號來實現(xiàn)更新或者處理,如果窗體層級比較多,比如窗體A的父類是窗體B,窗體B的父類是窗體C,窗體C有個子窗體D,如果窗體A一個信號要傳遞給窗體D,問題來了,必須先經(jīng)過窗體B中轉(zhuǎn)到窗體C再到窗體D才行,這樣的話各種信號關(guān)聯(lián)信號的connect會非常多而且管理起來比較亂,可以考慮增加一個全局的單例類AppEvent,公共的信號放這里,然后窗體A對應(yīng)信號綁定到AppEvent,窗體D綁定AppEvent的信號到對應(yīng)的槽函數(shù)即可,干凈清爽整潔。

85. QTextEdit右鍵菜單默認英文的,如果想要中文顯示,加載widgets.qm文件即可,一個Qt程序中可以安裝多個翻譯文件,不沖突。

86. Qt中有個全局的焦點切換信號focusChanged,可以用它做自定義的輸入法。Qt4中默認會安裝輸入法上下文,比如在main函數(shù)打印a.inputContext會顯示值,這個默認安裝的輸入法上下文,會攔截兩個牛逼的信號QEvent::RequestSoftwareInputPanel和QEvent::CloseSoftwareInputPanel,以至于就算你安裝了全局的事件過濾器依然識別不到這兩個信號,你只需要在main函數(shù)執(zhí)行a.setInputContext(0)即可,意思是安裝輸入法上下文為空。

87. 在Qt5.10以后,表格控件QTableWidget或者QTableView的默認最小列寬改成了15,以前的版本是0,所以在新版的qt中,如果設(shè)置表格的列寬過小,不會應(yīng)用,取的是最小的列寬。所以如果要設(shè)置更小的列寬需要重新設(shè)置ui->tableView->horizontalHeader()->setMinimumSectionSize(0);

88. Qt源碼中內(nèi)置了一些未公開的不能直接使用的黑科技,都藏在對應(yīng)模塊的private中,比如gui-private widgets-private等,比如zip文件解壓類QZipReader、壓縮類QZipWriter就在gui-private模塊中,需要在pro中引入QT += gui-private才能使用。


  1. #include "QtGui/private/qzipreader_p.h"

  2. #include "QtGui/private/qzipwriter_p.h"


  3. QZipReader reader(dirPath);

  4. QString path("");

  5. //解壓文件夾到當前目錄


  6. reader.etractAll(path);


  7. //文件夾名稱


  8. QZipReader::FileInfo fileInfo = reader.entryInfoAt(0);


  9. //解壓文件


  10. QFile file(filePath);


  11. file.open(QIODevice::WriteOnly);


  12. file.write(reader.fileData(QString::fromLocal8Bit("%1").arg(filePath)));


  13. file.close();


  14. reader.close();


  15. QZipWriter *writer = new QZipWriter(dirPath);


  16. //添加文件夾


  17. writer->addDirectory(unCompress);


  18. //添加文件


  19. QFile file(filePath);


  20. file.open(QIODevice::ReadOnly);


  21. writer->addFile(data, file.readAll());


  22. file.close();


  23. writer->close();


89. 理論上串口和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)都是默認異步的,操作系統(tǒng)自動調(diào)度,完全不會卡住界面,網(wǎng)上那些說收發(fā)數(shù)據(jù)卡住界面主線程的都是扯幾把蛋,真正的耗時是在運算以及運算后的處理,而不是收發(fā)數(shù)據(jù),在一些小數(shù)據(jù)量運算處理的項目中,一般不建議動用線程去處理,線程需要調(diào)度開銷的,不要什么東西都往線程里邊扔,線程不是萬能的。只有當真正需要將一些很耗時的操作比如編碼解碼等,才需要移到線程處理。

90. 在構(gòu)造函數(shù)中獲取控件的寬高很可能是不正確的,需要在控件首次顯示以后再獲取才是正確的,控件是在首次顯示以后才會設(shè)置好正確的寬高值,記住是在首次顯示以后,而不是構(gòu)造函數(shù)或者程序啟動好以后,如果程序啟動好以后有些容器控件比如QTabWidget中的沒有顯示的頁面的控件,你去獲取寬高很可能也是不正確的,萬無一失的辦法就是首次顯示以后去獲取。

91. 數(shù)據(jù)庫處理一般建議在主線程,如果非要在其他線程,務(wù)必記得打開數(shù)據(jù)庫也要在那個線程,即在那個線程使用數(shù)據(jù)庫就在那個線程打開,不能打開數(shù)據(jù)庫在主線程,執(zhí)行sql在子線程,很可能出問題。

92. 新版的QTcpServer類在64位版本的Qt下很可能不會進入incomingConnection函數(shù),那是因為Qt5對應(yīng)的incomingConnection函數(shù)參數(shù)變了,由之前的int改成了qintptr,改成qintptr有個好處,在32位上自動是quint32而在64位上自動是quint64,如果在Qt5中繼續(xù)寫的參數(shù)是int則在32位上沒有問題在64位上才有問題,所以為了兼容Qt4和Qt5,必須按照不一樣的參數(shù)寫。


  1. #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))

  2. void incomingConnection(qintptr handle);

  3. #else

  4. void incomingConnection(int handle);

  5. #endif


93. Qt支持所有的界面控件比如QPushButton、QLineEdit自動關(guān)聯(lián) on_控件名_信號(參數(shù)) 信號槽,比如按鈕的單擊信號 on_pushButton_clicked(),然后直接實現(xiàn)槽函數(shù)即可。

94. QWebEngineView控件由于使用了opengl,在某些電腦上可能由于opengl的驅(qū)動過低會導(dǎo)致花屏或者各種奇奇怪怪的問題,比如showfullscreen的情況下鼠標右鍵失效,需要在main函數(shù)啟用軟件opengl渲染。


  1. #if (QT_VERSION > QT_VERSION_CHECK(5,4,0))

  2. //下面兩種方法都可以,Qt默認采用的是AA_UseDesktopOpenGL

  3. QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);

  4. //QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);

  5. #endif

  6. QApplication a(argc, argv);


 另外一個方法解決 全屏+QWebEngineView控件一起會產(chǎn)生右鍵菜單無法彈出的bug,需要上移一個像素


  1. QRect rect = qApp->desktop()->geometry();

  2. rect.setY(-1);

  3. rect.setHeight(rect.height());

  4. this->setGeometry(rect);


95. QStyle內(nèi)置了很多方法用處很大,比如精確獲取滑動條鼠標按下處的值。

QStyle::sliderValueFromPosition(minimum(), maximum(), event->x(), width());

96. 用QFile讀寫文件的時候,推薦用QTextStream文件流的方式來讀寫文件,速度快很多,基本上會有30%的提升,文件越大性能區(qū)別越大。


  1. //從文件加載英文屬性與中文屬性對照表

  2. QFile fle(":/propertyname.txt");


  3. if (file.open(QFile::ReadOnly)) {


  4. //QTextStream方法讀取速度至少快30%


  5. #if 0


  6. while(!file.atEnd()) {


  7. QString line = file.readLine();


  8. appendName(line);


  9. }


  10. #else


  11. QTextStream in(&file);


  12. while (!in.atEnd()) {


  13. QString line = in.readLine();


  14. appendName(line);


  15. }


  16. #endif


  17. file.close();


  18. }


97. 用QFile.readAll()讀取QSS文件默認是ANSI格式,不支持UTF8,如果在QtCreator中打開qss文件來編輯保存,這樣很可能導(dǎo)致qss加載以后沒有效果。


  1. void frmMain::initStyle()

  2. {

  3. //加載樣式表

  4. QString qss;

  5. //QFile file(":/qss/psblack.css");

  6. //QFile file(":/qss/flatwhite.css");

  7. QFile file(":/qss/lightblue.css");

  8. if (file.open(QFile::ReadOnly)) {

  9. #if 1

  10. //用QTextStream讀取樣式文件不用區(qū)分文件編碼 帶bom也行

  11. QStringList list;

  12. QTextStream in(&file);

  13. //in.stCodec("utf-8");


  14. while (!in.atEnd()) {


  15. QString line;


  16. in >> line;


  17. list << line;


  18. }


  19. qss = list.join("\n");


  20. #else


  21. //用readAll讀取默認支持的是ANSI格式,如果不小心用creator打開編輯過了很可能打不開


  22. qss = QLatin1String(file.readAll());


  23. #endif


  24. QString paletteColor = qss.mid(20, 7);


  25. qApp->setPalette(QPalette(QColor(paletteColor)));


  26. qApp->setStyleSheet(qss);


  27. file.close();


  28. }


  29. }


98. QString內(nèi)置了很多轉(zhuǎn)換函數(shù),比如可以調(diào)用toDouble轉(zhuǎn)為double數(shù)據(jù),但是當你轉(zhuǎn)完并打印的時候你會發(fā)現(xiàn)精確少了,只剩下三位了,其實原始數(shù)據(jù)還是完整的精確度的,只是打印的時候優(yōu)化成了三位,如果要保證完整的精確度,可以調(diào)用 qSetRealNumberPrecision 函數(shù)設(shè)置精確度位數(shù)即可。


  1. QString s1, s2;

  2. s1 = "666.5567124";

  3. s2.setNum(888.5632123, 'f', 7);

  4. qDebug() << qSetRealNumberPrecision(10) << s1.toDouble() << s2.toDouble();


99. 用QScriptValueIterator解析數(shù)據(jù)的時候,會發(fā)現(xiàn)總是會多一個節(jié)點內(nèi)容,并且內(nèi)容為空,如果需要跳過則增加一行代碼。


  1. while (it.hasNext()) {

  2. it.next();

  3. if (it.flags() & QScriptValue::SkipInEnumeration)

  4. continue;

  5. qDebug() << it.name();

  6. }


100. setPixmap是最糟糕的貼圖方式,一般只用來簡單的不是很頻繁的貼圖,頻繁的建議painter繪制,默認雙緩沖,在高級點用opengl繪制,利用GPU。

101. 如果需要在尺寸改變的時候不重繪窗體,則設(shè)置屬性即可 this->setAttribute(Qt::WA_StaticContents, true); 這樣可以避免可以避免對已經(jīng)顯示區(qū)域的重新繪制。

102. 默認程序中獲取焦點以后會有虛邊框,如果看著覺得礙眼不舒服可以去掉,設(shè)置樣式即可:setStyleSheet("*{outline:0px;}");

103. Qt表格控件一些常用的設(shè)置封裝,QTableWidget繼承自QTableView,所以下面這個函數(shù)支持傳入QTableWidget。


  1. void QUIHelper::initTableView(QTableView *tableView, int rowHeight, bool headVisible, bool edit)

  2. {

  3. //奇數(shù)偶數(shù)行顏色交替

  4. tableView->setAlternatingRowColors(false);

  5. //垂直表頭是否可見

  6. tableView->verticalHeader()->setVisible(headVisible);

  7. //選中一行表頭是否加粗

  8. tableView->horizontalHeader()->setHighlightSections(false);

  9. //最后一行拉伸填充

  10. tableView->horizontalHeader()->setStretchLastSection(true);

  11. //行標題最小寬度尺寸

  12. tableView->horizontalHeader()->setMinimumSectionSize(0);

  13. //行標題最大高度

  14. tableView->horizontalHeader()->setMaximumHeight(rowHeight);

  15. //默認行高

  16. tableView->verticalHeader()->setDefaultSectionSize(rowHeight);

  17. //選中時一行整體選中

  18. tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

  19. //只允許選擇單個

  20. tableView->setSelectionMode(QAbstractItemView::SingleSelection);

  21. //表頭不可單擊

  22. #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))

  23. tableView->horizontalHeader()->setSectionsClickable(false);

  24. #else

  25. tableView->horizontalHeader()->setClickable(false);

  26. #endif

  27. //鼠標按下即進入編輯模式

  28. if (edit) {

  29. tableView->setEditTriggers(QAbstractItemView::CurrentChanged | QAbstractItemView::DoubleClicked);

  30. } else {

  31. tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

  32. }

  33. }


104. 在一些大的項目中,可能嵌套了很多子項目,有時候會遇到子項目依賴其他子項目的時候,比如一部分子項目用來生成動態(tài)庫,一部分子項目依賴這個動態(tài)庫進行編譯,此時就需要子項目按照順序編譯。


  1. TEMPLATE = subdirs

  2. #設(shè)置ordered參數(shù)以后會依次編譯 demo designer examples

  3. CONFIG += ordered

  4. SUBDIRS += demo

  5. SUBDIRS += designer

  6. SUBDIRS += examples


105. MSVC編譯器的選擇說明

- 如果是32位的Qt則編譯器選擇x86開頭的

- 如果是64位的Qt則編譯器選擇amd64開頭的

- 具體是看安裝的Qt構(gòu)建套件版本以及目標運行平臺的系統(tǒng)位數(shù)和架構(gòu)

- 一般現(xiàn)在的電腦默認以64位的居多,選擇amd64即可

- 如果用戶需要兼容32位的系統(tǒng)則建議選擇32位的Qt,這樣即可在32位也可以在64位系統(tǒng)運行

- 諸葛大佬補充:x86/x64都是編譯環(huán)境和運行環(huán)境相同,沒有或。帶下劃線的就是交叉編譯,前面是編譯環(huán)境,后面是運行環(huán)境。

| 名稱 | 說明 |

| ------ | ------ |

|x86|32/64位系統(tǒng)上編譯在32/64位系統(tǒng)上運行|

|x86_amd64|32/64位系統(tǒng)上編譯在64位系統(tǒng)上運行|

|x86_arm|32/64位系統(tǒng)上編譯在arm系統(tǒng)上運行|

|amd64|64位系統(tǒng)上編譯在64位系統(tǒng)上運行|

|amd64_x86|64位系統(tǒng)上編譯在32/64位系統(tǒng)上運行|

|amd64_arm|64位系統(tǒng)上編譯在arm系統(tǒng)上運行|

106. 很多時候用QDialog的時候會發(fā)現(xiàn)阻塞了消息,而有的時候我們希望是后臺的一些消息繼續(xù)運行不要終止,此時需要做個設(shè)置。


  1. QDialog dialog;

  2. dialog.setWindowModality(Qt::WindowModal);


107. 很多初學者甚至幾年工作經(jīng)驗的人,對多線程有很深的誤解和濫用,尤其是在串口和網(wǎng)絡(luò)通信這塊,什么都往多線程里面丟,一旦遇到界面卡,就把數(shù)據(jù)收發(fā)啥的都搞到多線程里面去,殊不知絕大部分時候那根本沒啥用,因為沒找到出問題的根源。

- 如果你沒有使用wait***函數(shù)的話,大部分的界面卡都出在數(shù)據(jù)處理和展示中,比如傳過來的是一張圖片的數(shù)據(jù),你需要將這些數(shù)據(jù)轉(zhuǎn)成圖片,這個肯定是耗時的;

- 還有就是就收到的數(shù)據(jù)曲線繪制出來,如果過于頻繁或者間隔過短,肯定會給UI造成很大的壓力的,最好的辦法是解決如何不要頻繁繪制UI比如合并數(shù)據(jù)一起繪制等;

- 如果是因為繪制UI造成的卡,那多線程也是沒啥用的,因為UI只能在主線程;

- 串口和網(wǎng)絡(luò)的數(shù)據(jù)收發(fā)默認都是異步的,由操作系統(tǒng)調(diào)度的,如果數(shù)據(jù)處理復(fù)雜而且數(shù)據(jù)量大,你要做的是將數(shù)據(jù)處理放到多線程中;

- 如果沒有嚴格的數(shù)據(jù)同步需求,根本不需要調(diào)用wait***之類的函數(shù)來立即發(fā)送和接收數(shù)據(jù),實際需求中大部分的應(yīng)用場景其實異步收發(fā)數(shù)據(jù)就足夠了;

- 有嚴格數(shù)據(jù)同步需求的場景還是放到多線程會好一些,不然你wait***就卡在那邊了;

- 多線程是需要占用系統(tǒng)資源的,理論上來說,如果線程數(shù)量超過了CPU的核心數(shù)量,其實多線程調(diào)度可能花費的時間更多,各位在使用過程中要權(quán)衡利弊;

108. 在嵌入式linux上,如果設(shè)置了無邊框窗體,而該窗體中又有文本框之類的,發(fā)現(xiàn)沒法產(chǎn)生焦點進行輸入,此時需要主動激活窗體才行。


  1. //這種方式設(shè)置的無邊框窗體在嵌入式設(shè)備上無法產(chǎn)生焦點

  2. setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);

  3. //需要在show以后主動激活窗體

  4. w->show();

  5. w->activateWindow();


109. QString的replace函數(shù)會改變原字符串,切記,他在返回替換后的新字符串的同時也會改變原字符串,我的乖乖!

110. QGraphicsEffect類的相關(guān)效果很炫,可以實現(xiàn)很多效果比如透明、漸變、陰影等,但是該類很耗CPU,如果不是特別需要一般不建議用,就算用也是要用在該部件后期不會發(fā)生頻繁繪制的場景,不然會讓你哭暈在廁所。

111. 在不同的平臺上文件路徑的斜杠也是不一樣的,比如linux系統(tǒng)一般都是 / 斜杠,而在windows上都是 \\ 兩個反斜杠,Qt本身程序內(nèi)部無論在win還是linux都支持 / 斜杠的路徑,但是一些第三方庫的話可能需要轉(zhuǎn)換成對應(yīng)系統(tǒng)的路徑,這就需要用到斜杠轉(zhuǎn)換,Qt當然內(nèi)置類方法。


  1. QString path = "C:/temp/test.txt";

  2. path = QDir::toNativeSeparators(path);

  3. //輸出 C:\\temp\\test.txt

  4. QString path = "C:\\temp\\test.txt";

  5. path = QDir::toNativeSeparators(path);

  6. //輸出 C:/temp/test.txt


112. 巧用QMetaObject::invokeMethod方法可以實現(xiàn)很多效果,包括同步和異步執(zhí)行,比如有個應(yīng)用場景是在回調(diào)中,需要異步調(diào)用一個public函數(shù),如果直接調(diào)用的話會發(fā)現(xiàn)不成功,此時需要使用 QMetaObject::invokeMethod(obj, "fun", Qt::QueuedConnection); 這種方式來就可以。invokeMethod函數(shù)有很多重載參數(shù),可以傳入返回值和執(zhí)行方法的參數(shù)等。

113. Qt5中的信號是public的,可以在需要的地方直接emit即可,而在Qt4中信號是protected的,不能直接使用,需要定義一個public函數(shù)來emit。

114. Qt5.15版本開始官方不再提供安裝包,只提供源碼,可以自行編譯或者在線安裝,估計每次編譯各種版本太麻煩,更多的是為了統(tǒng)計收集用戶使用信息比如通過在線安裝,后期可能會逐步加大商業(yè)化力度。

(點這,也可點擊)

轉(zhuǎn)載自:飛揚青春Gitee主頁


標簽:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn


為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
国产在线不卡 | 日本一区二区高清免费不卡 | 久草在在线免在线观看视频 | 骚妇的水真多让我插她 | 麻婆豆传媒一区二区三 | 亚洲一卡2卡二卡4卡乱码 | 一起探恋爱综艺在线观看第八期 | 2018天天干天天操 | 中文版在线乱码在线看 | 女人被添全过程A片久久AV | 人妻满熟妇AV无码区国产 | 久久大香伊蕉在人线国产昨爱 | 欧美 日韩 国产在线 | 天天射天天操天天干 | 中文字幕在线视频网 | 午夜福利18禁视频 | 久久午夜影院 | 成人丝袜射| 国产精品v欧美精品v日本精品动漫 | 五十六十熟女猛烈交尾A片一 | 国产一区二区三区在线视频 | 性盈盈网站久久久久忘忧草 | 国产黄色免费观看 | 女人潮抽搐动态图gif后 | 日本亚洲一区二区三区 | 欧美与黑人午夜性猛交久久久 | 日本无码精品一区二区三 | 亚拍自拍| 99精品久久久久久久 | 亚洲国产精品无码成人A片小说 | 99国产精品久久人妻无码 | 婷婷五月久久精品国产亚洲 | 亚洲黄业 | 黄色网址免费在线观看 | 最近免费观看高清韩国日本电影 | 做爰高潮A片在线播放 | 女人18毛片a级毛片一区二区 | 国产日本一区二区三区 | 人妻被粗大猛进猛出69国产 | 丰满大码熟女在线播放 | 人妻无码一区二区三区欧美熟妇 | 欧美特黄99久久毛片免费 | 亚洲综合丁香 | 搡老熟女老女人一区二区 | 日本a在线视频 | 狠狠色噜噜狠狠狠狠2021天天 | 婷婷综合 | 校园刺激全黄H全肉细节文 校园激情人妻古典武侠 | 99精品免费在线 | 爽吗你个小浪货叫大声点 | 韩国精品一区二区三区 | 国产免费A片好硬好爽好深小说 | 欧美黑人乱大交 | 欧美成熟毛茸茸复古 | 国产精品久久久久久人妻香蕉 | 狠狠狠狠狠狠干 | 午夜精品亚洲 | 欧美色成人tv在线播放 | aaak7美国发布站 | 欧美激情91| 午夜男女爽爽羞羞影院在线观看 | 欧美黄色一级视频 | 搡女人真爽免费视频大全 | 永久免费在线观看视频 | caoporn视频| 国产又爽又大又黄A片图片 国产又爽又大又黄A片小说 | 国精品人妻无码一区二区三区性色 | 成人精品国产亚洲AV久久 | 永久午夜福利视频一区在线观看 | 无码日本亚洲一区久久精品 | 国产一性一交一伦一A片小说 | 日韩电影免费在线观看中文字幕 | 亚洲AV综合色一区二区三区 | 韩国伦理电影在线伦理 | 国产成+人欧美+综合在线观看 | 日韩精品在线视频观看 | 午夜电影播放器 | 99热久久爱五月天婷婷 | 精品AV国产一区二区三区四区 | 日本国产成人精品无码区在线网站 | 好男人免费影院www神马 | 夜夜摸夜夜操 | 日本一区二区在线看 | 3d 肉 蒲 团 3d人肉蒲团之极乐 3d肉 蒲团 | 亚洲综合色五月久久婷婷 | 最近最新2019中文在线观看 | 成年电人电影免费网站 | 一体验区试看120秒 一体一道久久88色合综合网 | 免费电影在线看 | 四虎影视国产精品永久在线 | 熟妇的荡欲色综合亚洲图片 | 国产自产v一区二区三区c | 一级毛片一级毛片免费毛片 | 激情五月婷婷 | 人人看人人看 | 国产一在线精品一区在线观看 | 纯h超级大尺度小黄文 | 午夜片神马影院福利 | 国产三级在线播放不卡 | 波多野结衣中文字幕教师 | 花唇扒开(H)双性 | 成熟妇人A片免费看网站 | 国产淫语对白在线 | 97天天干| 美女被C污黄网站免费观看 美女被抽插舔B到哭内射视频免费 | 99爱视频免费高清在线观看 | 成人做爰高潮A片免费视频 成人做爰片免费网站 | 婷婷四房色播 | 国产九九九九九九九A片 | 希岛爱理中文字幕 | 日韩一级视频免费观看 | 国产美女啪啪 | 黄色激情网址 | 久久毛片免费看一区二区三区 | 成年网站在线观看播放 | 无码精品一区二区三区在线A片 | 亚洲精品久中文字幕 | 精品国产乱码久久久久久软件大全 | 中文字乱码电影在线播放 | 色噜噜噜色噜噜噜色琪琪 | 2024毛片 | 国产中文字幕乱码免费 | 成人精品国产 | 中国疯狂做爰XXXX高潮 | 无码人妻深夜拍拍AAA片 | 家庭教师 波多野结衣 | 97视频在线观看播放 | 国产精品色无码AV在线观看 | 欧美色贴图 | 亚VA芒果乱码一二三四区别 | A片好大好紧好爽视频免费 A片女女女女女女BBBB | 最近免费中文字幕完整版在线看 | 一区二区三区欧美日韩 | 综合玖玖 | 午夜精品视频在线观看美女 | 99热手机在线观看 | 国产精品 同事 在线 视频 | 97在线视频免费人妻 | 久久精品极品盛宴观看 | 彩色h中文漫画 | 天天干夜夜草 | 国产美女视频免费观看的网站 | 无码乱人伦一区二区亚洲一 | 波多野吉衣一区 | 久久九九视频 | 鲁在线 | 免费一级片视频 | 在线视频一区二区三区在线播放 | 国产午夜男女爽爽爽爽爽 | 亚洲A片一区日韩精品无码 亚洲H成年动漫在线观看不卡 | 7777色 | 色偷偷影院 | 波多野吉衣 免费一区 | 天天综合网久久 | 中文字幕日本久久2019 | 岛国三级| 国产精品人妻一区二区高 | 一区二区三区四区在线 | 国产高潮抽搐在线观看 | 女人18毛毛片兔费码A片 | 黄色免费网站在线 | 日本久久久久久久 | 久久特级毛片 | 真实国产熟女人妻AV17P | 免费无码毛片一区二区三区A片 | 囯精品人妻无码一区二区三区99 | 国产成人91高清精品免费 | 黄色网址视频在线播放 | 拔插拔插永久免费 | 亚洲精品无码成人A片在线漫画 | 久久老色鬼天天综合网观看 | 国产在线观看www | 四虎影视最新网站在线播放 | 黄页视频在线 | 激情综合丁香婷婷色五月 | 国产精品香蕉在线一区二区 | 欧美午夜视频在线观看 | 亚洲三级免费 | 卡一卡二新区无人区 | 久久国内精品视频 | 亚洲一卡二新区乱码绿踪林 | www.av免费| 国产精品人人爽人人做我的可爱 | 精品视自拍视频在线观看 | 青草视频在线免费 | 国产999在线观看 | 成人瑟瑟 | 91香蕉嫩草 | 午夜刺激爽爽视频免费观看 | 国产精品反差婊在线观看 | 校园春色另类小说 | 国产成人高清精品免费软件 | 把女人弄爽特黄A大片片 | 深夜福利成人 | 色婷婷色综合激情国产日韩 | 国产成人亚洲精品91专区高清 | 亚洲精品久久无码AV片银杏 | 五月丁香啪啪丁香花 | 亚洲乱码国产乱码精华 | 91精品全国免费观看青青 | 97国产在线视频 | 麻豆传媒新剧国产30部 | 漂亮的丰年轻的继坶3在线 漂亮的丰年轻的继坶3在线观看 | 欧美亚洲另类丝袜自拍动漫 | 麻豆传媒在线完整视频免费 | 十九天未删减在线观看 | 97人妻超在线观看免费 | 最大胆裸体人体牲交666 | 国内自拍 在线 亚洲 欧美 | 国产91青青成人a在线 | 四虎紧急自动转跳在线视频 | 在线永久免费观看黄网站 | 人人看网| 欧美一区二区三区精品 | 熟女人妻精品一区二区三 | 国产亚洲精品久久久久久国 | 国产凸凹视频熟女A片 | 久久精品中文字幕第一页 | 少妇被又大又粗又爽A片 | 高清视频在线观看WWW | 99re6在线播放| 国产又色又爽又黄刺激在线视频 | 精品福利资源在线导航网址 | 色哟哟免费精品网站入口 | 韩国三级日本三级 | 国产伦精品一区二区免费 | 日本A片成人片免费视频生活片 | 久久久欧美国产精品人妻噜噜 | www.黄色片网站 | 97sese图片| 久久久99精品免费观看精品 | 黄色搞逼| 女人18毛多水多A片视频 | 国产手机在线观看精品视频 | 麻豆久久婷婷综合五月国产 | 摸摸美女全身 | 亚洲制服丝袜中文字幕 | 免费观看黄视频网站 | 色在线视频网站 | 日本免费一曲二曲三曲 | 亚洲欧美日韩v中文在线 | 日本韩国欧美在线观看 | 亚洲成A人片在线播放器 | 日本女人下面毛茸茸 | 丁香花免费观看高清电影 | 色吧最新网址 | 激情综 | 伊人久久综在合线亚洲不卡 | 无码欧美毛片一区二区三在线视频 | 小说H全肉一对一 | 亚洲无人区码一码二码三码的区 | 艳妇臀荡乳欲伦1 | 日韩精品一 | 糙汉猛H1v1她想被C | 乳色吐息在线观看全集免费观看 | 99re久久精品在线播放 | 在线观看免费国产成人软件 | 色伦专区97中文字幕 | 国产在线观看免费视频在线 | 丁香婷婷开心激情深爱五月 | 国产精品久久久久久亚洲影视 | 一区二区三区内射美女毛片 | 开心婷婷色| 欧美兽交少妇XXX | 揄拍自拍日韩精品 | 国产精品人妻一区夜夜爱 | 人人影视网 | 91亚洲国产成人久久精品网站 | 97无码人妻精品1国产精东影业 | 久久久久伊人 | 国产激情在线观看 | 亚洲欧美一区二区成人片色欲AV | 2018高清一日本道国产 | 日本高清免费视频毛片 | 久久国产精品偷 | 综合久久久久综合97色 | 樱井莉亚torrent | 终结的炽天使动漫免费观看第一季 | 成人乱码一区二区三区A片 成人乱人乱一区二区三区 成人区人妻精品一区二欧美毛片 | 国产欧美综合在线观看第七页 | 亚洲午夜在线观看 | 嫩草院一区二区乱码 | 久久精品久久精品久久精品 | 狠狠色婷婷综合天天久久丁香 | 成年18网站免费视频网站 | 大香伊人网 | 狠很撸| 小婉和小娇243 | 十九天漫画在线观看免费 | i91.media果冻传媒 | 视频在线观看大片 | 最刺激的刮伦小说冢庭 | 九月丁香婷婷亚洲综合色 | 在线看片av免费观看 | 国产91免费 | 三级国产在线 | 国产又粗又猛又爽又黄A片漫画 | 工口里番全彩全彩无遮挡 | 国产人妖在线视频 | 亚洲AV成人影视综合网 | 国产成人精品亚洲精品一区色欲 | 无套内谢少妇毛片A片999 | BL肉YIN荡NP公厕肉便男男 | 国产123区在线视频观看 | 日本三级韩国三级三级a级按摩 | 免费看黄色一级 | 日产精品卡2卡三卡乱码网站 | 免费不卡毛片 | 欧美性猛交aa一级 | 最新国产精品自拍 | 韩国羞羞秘密教学子开车漫书 | 久久综合香蕉 | 人妻精品久久无码区新狼窝 | 99在线视频观看 | 国产精品第12页 | 精品1卡2卡三卡4卡乱码 | 欧美乱妇色情大片在线观看免费 | 日本免费观看的视频在线 | 内射女校花一区二区三区 | 大地影院_日本骚妇 | 强姧美女动态图片大全 | 亚洲精品久久无码AV片麻豆 | 伊人网在线观看 | 澳门永久av免费网站 | 涩涩视频在线播放 | 色姑娘综合网久久 | 成都影院手机在线高清 | 成人午夜精品网站在线观看 | 在线视频 91| 国产特黄特色a级在线视频 国产素人自拍 | 激情区小说区偷拍区图片区 | 国产精品免费综合一区视频 | 国产亚洲精品一区二三区 | 久久只有这里有精品4 | 欧美色xxxx | 日本99久久九九精品无码 | 日韩亚洲欧美日本精品va | 吉泽明步 超m自缚痴女 | 精品无码国产自产野外拍在线 | 狠狠躁天天躁小说 | 亚洲欧洲日本在线观看 | YASEE亚瑟中文网 | jizz亚洲日本| 诱人的女邻居BD在线观看 | 国产成人精品亚洲精品一区色欲 | 欧美韩国日本一区 | 亚洲小说在线图片色 | 久久2017国产视频 | 97碰在线看片免费视频 | 欧美一级视频精品观看 | 97人妻超在线观看免费 | 北条麻妃 中文字幕 | 欧美性爽交A片大全 | 一本色道久久88一综合 | 国产熟人AV一二三区 | 乱码AV午夜噜噜噜噜 | 天天射天天干天天操 | 99久久香蕉国产综合影院 | 久久99精品久久久久久园产越南 | 亚洲国产成人九九综合 | 免费A级毛片无码鲁大师 | h片免费观看 | 免费日韩精品 | 色偷偷亚洲女人天堂观看欧 | 韩国日本三级在线播放 | 国自产拍偷拍精品啪啪 | 亚洲AV无码A片在线观看蜜桃 | 国内卡一卡二卡三免费网站 | 韩国伦理片在线2018 | BL年下猛烈顶弄H | 日本一本在线播放 | 不卡国产00高中生在线视频 | 精品淑女少妇AV久久免费 | 亚洲va视频 | 最好看最新中文视频在线观看 | 一区二区三区不卡视频 | 日韩精品色情AV无码一区 | 玖玖操| 97久久超碰中文字幕 | 欧美黑人乱大交灬太大了视频 | 久久99国产精一区二区三区 | 国产嫖妓一区二区三区无码 | WWW成人国产高清内射 | 欧美片免费观看网址 | 在线婷婷 | 天天做天天干 | 特级 毛片 | 国产护士一区二区三区 | 黄色片网站观看 | 自拍视频在线观看亚洲福利 | 每日最新avhd101天天看新片 | 高清欧美不卡一区二区三区 | 91尤物国产尤物福利在线 | 国产ts在线视频 | v片在线观看 | 香蕉人人超人人超免费看视频 | 人妻熟女制服师生中文字幕 | bl全肉np双性受 | 韩国三日本三级中文字幕 | 欧美亚洲春色系列 | 日本三级在线观影 | 在线资源天堂www | 色哟哟最新在线观看入口 | 国产电影一区二区三区爱妃记 | 日本一区二区三区在线观看网站 | 午夜视频91 | 丁香花在线影院观看在线播放 | 香港黄页精品视频在线 | 中文无码字慕在线观看 | 2019精品国产品在线18年网 | 国产日韩精品欧美一区视频 | 天堂а√中文最新版地址 | 国产精品玖玖玖影院 | 老师你下面太紧进不去小黄文 | 精品人妻无码一区二区三区GIF | 無码一区中文字幕少妇熟女网站 | 性夜黄A片爽爽免费视频 | 三级毛片免费看 | 最近中文免费字幕在线播放 | 干色网 | 99精品电影一区二区免费看 | 国产精品日本免费视频 | 久久久久久久国产免费看 | 国产AV一区二区三区最新精品 | 黑人大战亚裔美女 | 无码区国产区在线播放 | 成人一区视频 | 真人做人试看120分钟 | 九九精品免视频国产成人 | 免费国产黄色片 | 午夜影院先看看 | 麻豆影视剧大全 | 国产精品黄在线观看免费网站 | 亚洲精品久久国产高清情趣 | 欧美一级日韩一级亚洲一级va | 操 美女视频 免费网站 | 亚洲午夜无码毛片AV久久 | 亚洲a视频在线观看 | 荡乳尤物3HP1V5 | 快播av种子 | 午夜亚洲国产 | 我的yin荡女佳佳第18章 | 成熟妇女免费看A片视频 | 日本无码人妻一区二区免费不卡 | 久久国产一级毛片一区二区 | 国产大片线上免费观看 | 久久国语精品 | 一个人看免费视频www在线观看 | 亚洲日本欧美产综合在线 | 一二三四日本高清无吗 | 波多野结衣在线免费 | 桃子视频免费观看播放 | 人人射人人爱 | 欧美AAAA级A片又粗又硬 | 春色校园综合网 | 欧美成熟毛茸茸复古 | HEYZO无码中文字幕人妻 | 抖抈app免费 | 久久综合亚洲色综合 | 美女裸体黄网站18禁免费看影站 | 香港黄页精品视频在线 | 国产香蕉视频在线播放 | 人妻被下春药中文字幕 | 李宗瑞性侵照片全集 | 亚洲1卡2卡三卡3卡4卡网站 | a级欧美| 在线看不卡日本AV | 热99这里有精品综合久久 | 欧美精品xxx | 最新毛片网站 | 四虎影在线影 | 国产99精品一区二区三区免费 | 91综合久久久久婷婷 | 丁香花在线影院观看在线播放 | 理论片午午伦夜理片2021 | 午夜播放器在线观看 | 久久在线 | 天天综合在线视频 | 亚洲精品在线观看91 | 国产一区二区三区四区五在线观看 | J8又粗又硬又大又爽又长A片 | 成人视品 | 日本免费在线 | 国产成人午夜精品免费视频 | 日韩高清免费观看 | 黑人操中国女人 | 播九公社 | 天美传媒在线观看 | 被黑人做的白浆直流 | 免费无码又爽又刺激A片软软件 | 亚洲欧美二区三区久本道 | 精品人妻无码一区二区三区绿 | 国语乱码中文字幕 | 欧美阿v天堂视频在99线 | 菊色宫快播电影 | 亚洲人成色20242024老人头 | 久草在线新免久费观看视频 | 综合天天色 | 永久免费看啪啪网址入口 | 在线观看免费高清电影网站 | 视频二区 调教中字 知名国产 | 亚洲最大日夜无码中文字幕 | 人妻少妇69式99偷拍 | 一个人看的视频在线观看高清 | 五月亭亭六月丁香 | 日本A片特黄久久免费观看 日本A片中文字幕精华液 | 嗯啊HH禁忌翁公 | 激情综合欧美 | 亚洲精品国产不卡在线观看 | 精品无人区乱码一区二区三区手机 | 性欧美精品xxxx | 欧美乱性| 91在线激情在线观看 | 国产 欧美 亚洲 日韩视频 | 最近韩国日本免费观看百度 | 99re最新地址| 看草逼 | 久久一本色道综合 | 欧美午夜特黄AAAAAA片 | 国产亚洲精品久久孕妇呦呦你懂 | 韩国伦理在线观看 | 成人日韩熟女高清视频一区 | 成人女人A级毛片免费软件 成人片AV | 影音先锋 全部资源 | 蜜桃臀在线成人亚洲 | 一色影院| 欧美视频一区在线 | 狠狠色婷婷丁香综合久久韩国 | 中文字幕在线视频播放 | 波多野结衣在线免费播放 | 无码精品一区二区三区视频色欲网 | 婷婷成人亚洲 | 欧美一级精品高清在线观看 | 天天色综合网站 | 欧美疯狂做受xxxxx喷水 | 丁香五月情 | 正能量免费网站WWW正能量免费 | 亚洲精品亚洲人成人网裸体艺术 | 思思99re66在线精品免费观看 | 黄网在线观看视频 | 亚欧毛片 | 四虎影业 | 日韩你懂的 | 区产品乱码芒果精品综合 | 欲妇荡岳丰满少妇A片 | 强壮公次次弄得我高潮A片视频 | 色偷拍亚洲偷自拍 | 国产精品高潮呻吟AV久久动漫 | 伊人久久大香线蕉亚洲 | 久久国产精品国语对白 | 成人免费黄网站 | 91精品国产91久久久久久最新 | 亚洲日本激情 | 久久99国产精品久久99软件 | 亚洲免费视频日本一区二区 | 色播亚洲视频在线观看 | 国产亚洲精品久久久久久无码网站 | 成人 网 | 亚洲精品无码A片一区二区三区 | 97伦理97伦理2018最新 | 欧美精品一区二区蜜臀亚洲 | 中文字幕在线不卡视频 | 成年人黄视频在线观看 | 成年妇女免费播放 | 久久久久免费 | 天噜啦精品免费视频日本免费视频 | 亚洲国产中文在线视频免费 | 激情6月丁香婷婷色综合 | 欧美性A片人喾交 | 久久草在线视频国产一 | 日本欧美国产 | 日本不卡视频在线观看 | 丁香六月激情 | 要狠狠撸 | 99视频在线精品 | 国语对白清晰好大好白在线 | 最近中文字幕MV在线视频看 | 毛片基地看看成人免费 | 小莹的性荡生活45章最新章节 | 中国黄色一级 | 影音先锋资源站yyxf2 | 国产香蕉视频在线播放 | 2024四虎永久在线影院 | 韩国日本不卡高清免费视频 | HEZYO加勒比 一本高手机在线 | 护士毛片 | 欧美色交 | 日韩三级精品 | 麻豆精品新区乱码卡 | 日本高清无日本高清视频 | 乱码视频午夜在线观看 | 香港日本三级在线播放 | 奇米影视20247久久精品人人爽 | 少妇高潮灌满白浆毛片免费看 | 苍井空v免费视频 | 丁香婷婷久久 | 久久精品亚洲热综合一本 | 黄色链接在线观看 | 又大又粗成人A片免费看 | 夜夜噜2024最新 | 亚洲精品口国自一产A片 | 免费视频国产在线观看 | 啪啪内射少妇20241028 | 免费的又色又爽又黄的视频软件 | 黑人巨大进入白人美女视频 | 中文字幕乱码熟妇五十中出 | 欧美大肥婆大肥BBBBB | 精品人妻无码一区二区三区牛牛 | 中文字幕一区二区在线观看 | 亚洲国产35p | 青草青草久热精品视频在线网站 | 色妞网站 | 亚洲精品无码高潮喷水A片在线 | 国产精品国产香蕉在线观看网 | 午夜爱爱免费视频体验区 | 免费的成人性视频网站 | 欧洲-级毛片内射 | 免费观看又色又爽又黄的小说一 | 国产黄色福利 | 苍井空无码播放电车 | 91香蕉成人| 99精品免费久久久久久久久蜜桃 | 日韩精品一区二区三区国语自制 | 欧美久久久久久 | 人妻体内射精一区二区 | 国产在线拍揄自揄视频菠萝 | 2022年亚洲午夜一区二区福利 | 日本xxx在线观看免费播放 | 在线黄色.com | 日本在线看 | 伦韩国理论片琪琪在线观看 | 无码人妻丰满熟妇啪啪区日韩久久 | 毛茸茸xxx | 青草视频免费在线观看 | 又硬又粗进去好爽A片免费视频 | 春雨电影大全免费观看在线播放 | a久久99精品久久久久久不 | 噜噜噜在线观看播放视频 | 97久久影院 | 一区二区三区在线 | 草莓.combo2.1深夜释放自己污在线观看 | 亚洲网站大全 | 毛片在线观看地址 | 中年国产丰满熟女乱子正在播放 | 亚洲欧美自拍另类图片色 | 日本一区二区高清免费不卡 | 日韩经典中文字幕 | 日韩av片免费播放 | 国产精品免费露脸视频 | 污视频下载| 美国巨根 | 99视频国产精品免费观看app | 大菠萝福利中心app 大尺度很黄很肉的小说 | 日韩福利视频高清免费看 | 风雨送春归免费观看 | 亚洲精品偷拍的自拍的 | 精品国产一区二区三区四区精华液 | 国产亚洲自拍一区 | 天天干天天爽天天操 | 小明精品国产一区二区三区 | 中文文字幕文字幕亚洲色 | 日韩中文字幕在线播放 | 亚洲精品久久久久久久观小说 | 97丨九色丨国产人妻熟女 | 一区二区三区四区在线播放 | 在线观看播放理论片 | 成年视频xxxxxx在线 | 一级做a爱过程免费观看 | 成人a在线 | 国精产品999永久中国有限公司 | 狠狠躁天天躁 | 天美传媒 高清 | 亚洲偷自拍国综合 | 久久成年片色大黄全免费网站 | 黄网站免费在线 | 视频区国产亚洲.欧美 | 中文字幕亚洲乱码熟女在线萌芽 | 五十六十熟女猛烈交尾A片一 | 益日韩欧群交P片内射中文 樱花草无码专区日本 | 大香区一二三四区2024 | 亚洲免费视频日本一区二区 | 日本在线观看一级高清片 | 国产经典自拍 | 波多野吉衣一区二区 | 国产精品久久久久久永久牛牛 | 日韩免费播放 | 波多野中文字幕s | 四川一级片 | 斯大林格勒战役免费高清观看 | 美国毛片免费一级 | 三妻四妾高清完整版在线观看免费 | 国产黄色在线播放 | 免费的精品一区二区三区A片 | 久久国产免费观看精品1 | 丰满少妇69激情啪啪无码 | 色的视频在线观看免费播放 | 亚洲精品蜜桃久久久久久 | 黄色免费在线观看网站 | 最近中文字幕在线中文视频 | 香蕉网站狼人久久五月亭亭 | 双性少爷挨脔日常H惩罚H | 香蕉视频在线免费播放 | 国产精品av免费观看 | 特级毛片内射WWW无码 | 内射老阿姨1区2区3区4区 | 免费无码一线A片AAA片 | 亚洲精品久久久久久久观看 | 精品日韩在线 | 国产激情视频在线 | 五月天专辑 | 国产麻豆放荡AV剧情演绎 | 永久免费在线观看视频 | 精品一区二区在线观看 | 亚洲视频色色王国 | 久久视频在线视频观看 99 | 日本久久久 | 亚洲国产日韩欧美视频二区 | 要狠狠撸| 欧美成人免费在线观看 | 无码高潮又爽又黄A片软件 无码激情做A爰片毛片A片日本 | 邻座的艾琳同学第一季 | 黄页视频在线观看 | 真实乱视频国产免费观看 | 医生护士一级毛片 | 欧美色成人tv在线播放 | 日本三级网址 | 日韩美女乱淫试看屁视频网站 | 欧美高清日本三级人妇 | 亚洲AVAV天堂AV在线网爱情 | 四虎永久在线观看免费网站网址 | 性一交一乱一伦一色一情孩交 | 九九99热久久999精品 | 精品人妻伦九区久久AAA片 | 提枪进洞风云涌玉门迎 | 欧美亚洲另类丝袜自拍动漫 | 欧美xxxx性| 97视频在线观看免费 | 亚洲日本香蕉视频观看视频 | 国产黄网在线观看 | 欧美白虎逼| 九九国产在线 | 毛片a级三毛片免费播放 | 黑人vs亚洲人在线播放 | 日本 片 成人 在线 日本 欧美 国产 | 久久桃花综合 | 99久久精品免费看国产一区二区三区 | 亚洲精品久久久久久久蜜臀老牛 | 天天操天天干天天插 | 国产精品_卡2卡三卡4卡 | 中文无码有码亚洲 欧美 | 国产JK白丝喷白浆一区二区 | 在线亚洲自拍 | 91综合网 | videos欧美成人| 在线一二三区国产色情无码电影 | 日本a在线| 国产精品久久久久久久免费大片 | 一区二区中文字幕在线观看 | 蜜桃日本MV免费观看 | 一区二区三区波多野结衣 | 狠狠躁日日躁夜夜躁A片小说 | 欧美日韩一区二区不卡三区 | 美国毛片免费一级 | 久久丝袜视频 | 奇米色777欧美一区二区 | 91.com在线观看 | 嗨电影网| 午夜一级做a爰片久久毛片 午夜亚洲视频 | 久久免视频 | 最近最新中文字幕大全免费版下载 | 樱花草无码专区日本 | 午夜性福利视频 | 国产精品日日做人人爱 | 2020国产成人久久精品 | 蜜臀91丨九色丨蝌蚪 | 日韩三级伦理 | 日本jzjzjz大全 | 国偷自产AV一区二区三区健身房 | 最近中文字幕免费视频 | 97在线免费观看视频 | 海角社区2024入口地址 | 欧美在线观看 cao38 | 成人久久18免费游戏网站 | 宝贝乘把腿张开让我添动态图 | 亚洲乱妇老熟女爽到高潮的片 | 丝袜亚洲另类欧美变态 | 日本a级免费 | 亚洲黄色免费在线观看 | 99久久久免费精品免费 | 香蕉在线综合2019版 | 97精品一区二区视频在线观看 | 国产精品久久久久久久上海公司 | 啊灬啊别停灬用力啊A片 | 张暖雅不雅视频 | 蜜桃在线观看无码免费 | 忘忧草社区WWW日本高清图片 | 国产精品成人无码A片免费网址 | 国产传媒精品1区2区3区 | 国产中文字幕在线观看 |