【Qt】QSettings介紹【轉】
簡介
QSettings類提供了持久的跨平臺應用程式設定。
使用者通常期望應用程式記住它的設定(視窗大小、位置等)所有會話。這些資訊通常儲存在Windows系統登錄檔,OS X和iOS的屬性列表檔案中。在Unix系統中,在缺乏標準的情況下,許多應用程式(包括KDE應用程式)使用INI文字檔案。
QSettings圍繞這些抽象技術,使我們能夠以便攜的方式儲存和恢復應用程式設定。它還支援自定義儲存格式。
QSettings API基於QVariant,可以儲存很多基礎的型別,比如 QString、QRect、QImage等。
如果你需要的是一個非永續性的基於記憶體結構,可以考慮使用QMap<QString, QVariant>
基本用法
當建立一個QSettings物件時,必須通過指定公司或組織名稱以及產品名稱,例如:公司名稱為:MySoft,產品名為:Star Runner,那麼可以用下列方式來構造QSettings物件:
QSettings settings("MySoft", "Star Runner");
QSettings物件既可以建立在棧上,也可以建立在堆(即使用new)上,構建和銷燬也非常快。
如果你的應用程式在很多地方使用QSettings,則可以使用QCoreApplication::setOrganizationName()
和 QCoreApplication::setApplicationName()
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;
QSettings可以儲存一系列設定。每個設定包括指定設定名稱(鍵)的一個字串和一個與該鍵關聯的QVariant儲存資料。使用setValue()可以實現一個設定。例如:
settings.setValue("editor/wrapMargin", 68);
如果存在相同的設定鍵,現有的值將被新值覆蓋。為了提高效率,這些變化可能不會被立即儲存到永久儲存(可以隨時呼叫sync()來提交更改)。
可以使用value()得到一個設定的值:
int margin = settings.value("editor/wrapMargin").toInt();
如果沒有指定鍵對應的設定,QSettings將會返回一個空QVariant(可轉換為整數0)。這時,我們可以通過另一個引數來指定預設值:
int margin = settings.value("editor/wrapMargin", 80).toInt();
- contains() 判斷一個指定的鍵是否存在
- remove() 刪除相關的鍵
- allKeys() 獲取所有鍵
- clear() 刪除所有鍵
void QSettings::beginGroup(const QString & prefix)
為當前組附加字首。
當前組會自動追加到指定QSettings所有鍵。此外,查詢功能,如childGroups()、childKeys()、allKeys() 也是基於組的。預設情況下,不存在組設定。
組是有用的,以避免輸入同樣的設定路徑。例如:
settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("fullScreen", win->isFullScreen());
settings.endGroup();
settings.beginGroup("outputpanel");
settings.setValue("visible", panel->isVisible());
settings.endGroup();
這將生成三個設定值:
- mainwindow/size
- mainwindow/fullScreen
- outputpanel/visible
int QSettings::beginReadArray(const QString & prefix)
為當前組新增字首,並開始從陣列中讀取。返回陣列的大小。
例:
struct Login {
QString userName;
QString password;
};
QList<Login> logins;
...
QSettings settings;
int size = settings.beginReadArray("logins");
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
Login login;
login.userName = settings.value("userName").toString();
login.password = settings.value("password").toString();
logins.append(login);
}
settings.endArray();
void QSettings::beginWriteArray(const QString & prefix, int size = -1)
為當前組新增字首,並開始寫大小為size的陣列。如果大小為-1(預設值),系統會自動根據索引的數目確定。
如果有許多出現一定的鍵集,可以使用陣列實現更容易。例如,假設想要儲存的使用者名稱和密碼的長度可變的列表。然後,你可以寫:
struct Login {
QString userName;
QString password;
};
QList<Login> logins;
...
QSettings settings;
settings.beginWriteArray("logins");
for (int i = 0; i < logins.size(); ++i) {
settings.setArrayIndex(i);
settings.setValue("userName", list.at(i).userName);
settings.setValue("password", list.at(i).password);
}
settings.endArray();
生成的結果如下:
- logins/size
- logins/1/userName
- logins/1/password
- logins/2/userName
- logins/2/password
- logins/3/userName
- logins/3/password
- …
enum QSettings::Format
這個列舉型別指定QSettings所使用的儲存格式。
常量 | 值 | 描述 |
---|---|---|
QSettings::NativeFormat | 0 | 使用平臺最合適的儲存格式設定。在Windows中,使用系統登錄檔;OS X和iOS中,使用的是CFPreferences API;在Unix中,使用的是INI格式的文字配置檔案。 |
QSettings::IniFormat | 1 | 儲存在INI檔案中的設定。 |
QSettings::InvalidFormat | 16 | registerFormat()返回的值 |
Unix中,NativeFormat和IniFormat意思是一樣的,只是副檔名不同(NativeFormat為.conf,IniFormat 為.ini)。
enum QSettings::Scope
該列舉指定設定是否使用者特定或同一系統的所有使用者共享。
常量 | 值 | 描述 |
---|---|---|
QSettings::UserScope | 0 | 在一個位置儲存特定於當前使用者的設定(例如,使用者的主目錄)。 |
QSettings::SystemScope | 1 | 在一個全域性位置儲存設定,以便在相同機器上所有使用者訪問同一組的設定。 |
void QSettings::setPath(Format format, Scope scope, const QString & path)
為給定格式和範圍設定用來儲存的路徑。對於路徑而言,該格式可以是自定義格式。
下表總結了預設值:
平臺 | 格式 | 範圍 | 路徑 |
---|---|---|---|
Windows | IniFormat | 1.UserScope 2.SystemScope | 1.%APPDATA% 2.%COMMON_APPDATA% |
Unix | NativeFormat, IniFormat | 1.UserScope 2.SystemScope | 1.$HOME/.config 2./etc/xdg |
Qt for Embedded Linux | NativeFormat, IniFormat | 1.UserScope 2.SystemScope | 1.$HOME/Settings 2./etc/xdg |
OS X and iOS | IniFormat | 1.UserScope 2.SystemScope | 1.$HOME/.config 2./etc/xdg |
在Windows、OS X、iOS中設定NativeFormat沒有任何效果。
警告:此功能不會影響現有QSettings物件。
QVariant和GUI型別
因為QVariant是Qt Core模組的一部分,它不能提供轉換功能到資料型別-例如:QColor、QImage、 QPixmap,因為這是Qt GUI的一部分。換句話說,QVariant中沒有toColor()、toImage()、toPixmap()等介面。
相反,可以使用QVariant::value()或qVariantValue()模板函式。 例如:
QSettings settings("MySoft", "Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();
逆轉換(例如,從QColor到QVariant)是自動通過QVariant支援的所有資料型別,包括GUI相關型別:
QSettings settings("MySoft", "Star Runner");
QColor color = palette().background().color();
settings.setValue("DataPump/bgcolor", color);
自定義型別註冊使用qRegisterMetaType()
和qRegisterMetaTypeStreamOperators()
可以使用QSettings儲存。
重點說明
設定中的鍵可以包含任何Unicode字元。Windows登錄檔和INI檔案使用對鍵不區分大小寫,而在OS X和iOS的CFPreferences API使用區分大小寫。為了避免可移植性問題,需要遵循這些簡單的規則:
- 在相同情況下使用相同的鍵。例如:程式碼中的一個位置使用”text fonts”,不要在別的地方使用”Text Fonts”。
- 避免鍵名相同除了這種情況,例如:有一個名為”MainWindow”的鍵,不要試圖用”mainwindow”儲存另一個鍵。
- 不要使用斜線(’/’和’\’)作為鍵名,反斜槓字元用於分隔子鍵(見下文)。在Windows中,’\’被QSettings轉換為’/’,這使得它們相同。
可以使用’ / ‘字元作為分隔符形成分層鍵,類似於Unix檔案路徑。例如:
settings.setValue("mainwindow/size", win->size());
settings.setValue("mainwindow/fullScreen", win->isFullScreen());
settings.setValue("outputpanel/visible", panel->isVisible());
如果想儲存或恢復具有相同字首的一些設定,可以使用beginGroup()來指字首,結束時呼叫endGroup()。下面和上面的例子相同,但這時使用組機制:
settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("fullScreen", win->isFullScreen());
settings.endGroup();
settings.beginGroup("outputpanel");
settings.setValue("visible", panel->isVisible());
settings.endGroup();
如果一個組使用beginGroup()設定,大多數功能的行為變化,組可以遞迴地設定。
後備機制
假設你用組織名MySoft、應用名Star Runner建立了一個QSettings物件,當檢視一個值時,依次搜尋四個地方:
- 一個供Star Runner應用程式的使用者特定位置
- 一個供MySoft所有應用程式的使用者特定位置
- 一個供Star Runner應用程式的系統範圍位置
- 一個供MySoft所有應用程式的系統範圍位置
如果一個鍵不能在第一位置被找到時,繼續在第二的位置搜尋,依此類推。這確保能夠儲存系統範圍或組織範圍內的設定,並在每個使用者或每個應用程式覆蓋它們,使用setFallbacksEnabled(false)
可以關閉這一機制。
雖然可以讀取來自所有四個位置的鍵,僅第一個檔案(使用者特定的應用程式)用於寫入訪問。要寫入任何其他檔案,省去了程式名和指定QSettings:: SystemScope(相對於QSettings:: UserScope,預設值)。
用一個例子看看:
QSettings obj1("MySoft", "Star Runner");
QSettings obj2("MySoft");
QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner");
QSettings obj4(QSettings::SystemScope, "MySoft");
下表總結了QSettings物件訪問的位置。”X”表示該位置相關聯的QSettings物件的主要位置,既可以讀取也可以寫入,”O”是指讀操作時被佔用當做後備。
Locations | obj1 | obj2 | obj3 | obj4 |
---|---|---|---|---|
User, Application | X | |||
User, Organization | o | X | ||
System, Application | o | X | ||
System, Organization | o | o | o | X |
這種機制的優點在於它可以在Qt支援的所有平臺執行,它仍然給我們一個很大的靈活性,無需指定任何檔名或登錄檔路徑。
如果想在所有平臺上不使用原生API來使用 INI檔案,可以通過 QSettings::IniFormat格式作為QSettings建構函式的第一個引數,其次是範圍,組織名,以及應用名:
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "MySoft", "Star Runner");
可以參考:Settings Editor例子(可以體驗不同的設定-回退、開啟、關閉)。
儲存GUI程式狀態
QSettings通常用於儲存GUI程式的狀態。下面的例子演示瞭如何使用QSettings儲存和恢復應用程式的主視窗的幾何形狀。
void MainWindow::writeSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();
}
void MainWindow::readSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
resize(settings.value("size", QSize(400, 400)).toSize());
move(settings.value("pos", QPoint(200, 200)).toPoint());
settings.endGroup();
}
可以參考: Window Geometry。為什麼呼叫QWidget::resize()和QWidget::move()更好,而不是QWidget::setGeometry()來恢復視窗的幾何形狀。
必須在MainWindow建構函式和關閉事件處理程式中呼叫readSettings()和writeSettings()函式,如下:
MainWindow::MainWindow()
{
...
readSettings();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (userReallyWantsToQuit()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
可以參考自帶的Application程式示例使用QSettings例子。
同時從多個執行緒或程序訪問QSettings
QSettings是可重入的,意味著可以同時在不同的執行緒中使用不同的QSettings物件,這保證QSettings物件操作同一磁碟上的檔案(或在系統登錄檔中的相同條目)。如果通過QSettings物件修改了一個設定,那麼對於操作在同一位置和存在相同的程序的其他QSettings物件來說,更改會立即可見。
QSettings可以由不同的程序(其可以是應用程式同時執行的不同例項或完全不同的應用程式)安全地使用-在相同的系統位置上進行讀寫,它使用勸告式檔案鎖和智慧合併演算法以確保資料的完整性,需要注意的是sync()由其他程序所做的更改。
特定平臺
應用程式設定的儲存位置
如上所提到的,在後背機制部分,QSettings為應用程式儲存的設定多達四個位置,這取決於設定是否是特定於使用者或系統範圍的,設定是否特定於應用或組織範圍的。為簡單起見,我們假設該組織被稱為MySoft並且應用程式被稱為Star Runner。
在Unix系統中,如果檔案格式是NativeFormat,預設使用以下檔案:
$HOME/.config/MySoft/Star Runner.conf (Qt for Embedded Linux: $HOME/Settings/MySoft/Star Runner.conf)
$HOME/.config/MySoft.conf (Qt for Embedded Linux: $HOME/Settings/MySoft.conf)
/etc/xdg/MySoft/Star Runner.conf
/etc/xdg/MySoft.conf
在Mac OS X版本10.2和10.3中,這些檔案所使用的預設值:
$HOME/Library/Preferences/com.MySoft.Star Runner.plist
$HOME/Library/Preferences/com.MySoft.plist
/Library/Preferences/com.MySoft.Star Runner.plist
/Library/Preferences/com.MySoft.plist
在Windows上,NativeFormat設定儲存在登錄檔路徑如下:
HKEY_CURRENT_USER\Software\MySoft\Star Runner
HKEY_CURRENT_USER\Software\MySoft\OrganizationDefaults
HKEY_LOCAL_MACHINE\Software\MySoft\Star Runner
HKEY_LOCAL_MACHINE\Software\MySoft\OrganizationDefaults
如果檔案格式是IniFormat,,以下檔案用於在Unix、Mac OS X,、和iOS:
$HOME/.config/MySoft/Star Runner.ini (Qt for Embedded Linux: $HOME/Settings/MySoft/Star Runner.ini)
$HOME/.config/MySoft.ini (Qt for Embedded Linux: $HOME/Settings/MySoft.ini)
/etc/xdg/MySoft/Star Runner.ini
/etc/xdg/MySoft.ini
在Windows中,使用以下檔案:
%APPDATA%\MySoft\Star Runner.ini
%APPDATA%\MySoft.ini
%COMMON_APPDATA%\MySoft\Star Runner.ini
%COMMON_APPDATA%\MySoft.ini
%APPDATA%
路徑通常為:C:\Documents and Settings\All Users\Application Data
%COMMONAPPDATA%
路徑通常為:C:\Documents and Settings\All Users\Application Data
。
在黑莓手機只有一個檔案。如果檔案格式是IniFormat,這時”Settings/MySoft/Star Runner.ini”在應用程式的主目錄。
對於在.ini和conf檔案的路徑,可以使用的setPath()來改變。在Unix、Mac OS X、iOS中,使用者可以通過設定XDG_CONFIG_HOME環境變數替代他們。
訪問INI和.plist檔案
有時候,想在一個特定的檔案或登錄檔路徑中訪問儲存設定。在所有平臺上,如果想直接讀取INI檔案,可以使QSettings建構函式的第一個引數為檔名,第二個引數為QSettings::IniFormat。例如:
QSettings settings("/home/petra/misc/myapp.ini", QSettings::IniFormat);
然後,就可以對檔案進行讀寫設定。
在OS X和iOS中,可以通過指定第二個引數為QSettings::NativeFormat訪問屬性列表的.plist檔案。例如:
QSettings settings("/Users/petra/misc/myapp.plist", QSettings::NativeFormat);
訪問Windows登錄檔
在Windows中,QSettings可以在系統登錄檔訪問由QSettings寫入的設定(或設定支援的格式,如字串資料)。通過使用一個登錄檔路徑和QSettings::NativeFormat來構建一個QSettings物件。例如:
QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Office", QSettings::NativeFormat);
所有出現在指定的路徑下的登錄檔條目,可以通過QSettings物件像往常一樣進行讀寫(使用斜槓而不是反斜槓)。例如:
settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0);
注意,反斜線字元,如前所述,使用QSettings分割為子項。這樣一來,不能讀寫包含斜線或反斜線Windows登錄檔項,如果需要的話,應該使用Windows API。
訪問Windows上常見的登錄檔設定
在Windows上,有可能存在一個鍵既有值又存在子鍵。其預設值是通過使用”Default”或”.” 來代替子鍵。
settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy", "Milkyway");
settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Sun", "OurStar");
settings.value("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Default"); // returns "Milkyway"
平臺限制
儘管QSettings試圖支援不同平臺,但還存在著一些差異,我們應該知道,當移植應用程式:
Windows系統登錄檔有以下限制:一個子項不能超過255個字元,一個條目的值不得超過16,383個字元,一個鍵的所有值不得超過65,535個字元。要解決這些侷限性的一種方法是使用IniFormat代替NativeFormat儲存設定。
在OS X和iOS中,allKeys()將返回適用於所有應用程式的全域性設定一些額外的鍵。這些鍵可以使用value()讀取,但不能改變,只能跟蹤。呼叫setFallbacksEnabled(false) 將隱藏這些全域性設定。
在OS X和iOS,使用QSettings的CFPreferences API預計網際網路域名而不是組織名。為了提供一個統一的API,QSettings源於該組織名提供一個假域名(除非組織名已經是一個域名,如:OpenOffice.org)。該演算法追加”.com”到公司名,並用連字元替換空格和其他非法字元。如果你想指定不同的域名,在main()函式中呼叫QCoreApplication::setOrganizationDomain()、QCoreApplication::setOrganizationName()、QCoreApplication::setApplicationName(),然後使用預設的QSettings建構函式。
另一種解決方案是使用預處理指令,例如:
#ifdef Q_OS_MAC
QSettings settings("grenoullelogique.fr", "Squash");
#else
QSettings settings("Grenoulle Logique", "Squash");
#endif
相關推薦
【Qt】QSettings介紹【轉】
簡介 QSettings類提供了持久的跨平臺應用程式設定。 使用者通常期望應用程式記住它的設定(視窗大小、位置等)所有會話。這些資訊通常儲存在Windows系統登錄檔,OS X和iOS的屬性列表檔案中。在Unix系統中,在缺乏標準的情況下,許多應用程式(包括KDE應用程式)使用INI文字檔案。 QS
【Qt 學習之路---安裝篇】QT5.7.1+VS2013軟體開發環境配置
參考:https://blog.csdn.net/liushuiwen101423/article/details/70882534 安裝任務:完成Qt5.7.1載入到VS2013環境下,程式設計執行Qt應用程式,有詳細步驟,最後完成一個空白視窗UI執行顯示1.基本配置PC
【Qt】QSettings讀寫登錄檔、配置檔案【轉】
簡述 一般情況下,我們在開發軟體過程中,都會快取一些資訊到本地,可以使用輕量級資料庫sqlite,也可以操作登錄檔、讀寫配置檔案。 關於QSettings的使用前面已經介紹過了,比較詳細,見“更多參考”,下面介紹下QSettings常用功能-讀寫登錄檔、配置檔案。 簡述 優點 讀
【轉】gcc的__builtin_函數介紹
部分 art types 字節 函數的調用 編寫 強制 跳轉指令 預取 轉自:http://blog.csdn.net/jasonchen_gbd/article/details/44948523 GCC提供了一系列的builtin函數,可以實現一些簡單快捷的功能來方便程序
API HOOK介紹 【轉】
必須 unmap 利用 文件 ade fin 下使用 poi 按鈕 什麽是“跨進程 API Hook”? 眾所周知Windows應用程序的各種系統功能是通過調用API函數來實現。API Hook就是給系統的API附加上一段小程序,它能監視甚至控制應
一.Select 函數詳細介紹【轉】
perror socket編程 這樣的 發生 結構體 阻塞 get 成功 系統 轉自:http://www.cnblogs.com/hjslovewcl/archive/2011/03/16/2314330.html Select在Socket編程中還是比較重
【轉】python qt(pyqt)的文件打開、文件保存、文件夾選擇對話框
utf spl 文件對話框 出現 tin ans none 轉換 選擇文件夾 import PyQt4.QtCore,PyQt4.QtGui # 獲取文件路徑對話框 file_name = QFileDialog.getOpenFileName(self,"open
【轉】mysql執行計劃介紹
sta 備註 dex 統計信息 行數 temp 方式 否則 獲取 原文地址:http://www.jb51.net/article/43306.htm 1.查看mysql執行計劃 explain SELECT * from shippingorder where
【轉】jar包和war包的介紹和區別
lac rep 理解 j2e 浪費時間 需要 適合 格式 nbsp JavaSE程序可以打包成Jar包(J其實可以理解為Java了),而JavaWeb程序可以打包成war包(w其實可以理解為Web了)。然後把war發布到Tomcat的webapps目錄下,Tomcat會在啟
elasticsearch集群介紹及優化【轉】
tutorial status onf 出了 參考 算法 last num 和數 elasticsearch用於構建高可用和可擴展的系統。擴展的方式可以是購買更好的服務器(縱向擴展)或者購買更多的服務器(橫向擴展),Elasticsearch能從更強大的硬件中獲得更好的性能
【轉】RAID技術介紹和總結
允許 pos distrib 數據讀取 body web服務器 data- 也有 丟失 轉自http://blog.jobbole.com/83808/ 簡介 RAID是一個我們經常能見到的名詞。但卻因為很少能在實際環境中體驗,所以很難對其原理 能有很清楚的認識和掌握。本文
【轉】一款開源免費跨瀏覽器的視頻播放器--videojs使用介紹
med padding 網站 最新代碼 html 但是 videojs let live 特別提示:本人博客部分有參考網絡其他博客,但均是本人親手編寫過並驗證通過。如發現博客有錯誤,請及時提出以免誤導其他人,謝謝!歡迎轉載,但記得標明文章出處:http://www.cnb
【轉】java日誌組件介紹(common-logging,log4j,slf4j,logback )
微秒 是把 輸出重定向 gin ons java 循環 框架 log4j.jar common-logging common-logging是apache提供的一個通用的日誌接口。用戶可以自由選擇第三方的日誌組件作為具體實現,像log4j,或者jdk自帶的lo
【轉】vs2010打開qt的.pro文件時錯誤解決辦法
編譯 註意 strong 有一個 都在 nmake 文件 pro lib 註意:qt creator工程中一般都已經存在*.pro文件,裏面存放著一些自己配置的包含頭文件和lib庫文的信息,最好不要再重新使用qmake -project生成,若重新生成,則可能要重新增加配置
【轉】QT中QWidget、QDialog及QMainWindow的區別
屏幕 編輯 派生 標記 裝飾 按鈕 set 沒有 idg QWidget類是所有用戶界面對象的基類。 窗口部件是用戶界面的一個基本單元:它從窗口系統接收鼠標、鍵盤和其它事件,並且在屏幕上繪制自己。每一個窗口部件都是矩形的,並且它們按Z軸順序排列。一個窗口部件可以被它的父窗口
【轉】ROC和AUC介紹以及如何計算AUC
image 第一個 true 編寫代碼 提前 好的 詳細說明 receiver 展示 轉自:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operating Character
【轉】Python max內置函數詳細介紹
使用 pri 數據 否則 索引 def 取數 而且 ace #max() array1 = range(10) array2 = range(0, 20, 3) print(‘max(array1)=‘, max(array1)) print(‘
【轉】C# list介紹和用法
php 檢索 排序 c# reac ont 面向對象 類型 大型 一、LIST概述 所屬命名空間:System.Collections.Generic public class List<T> : IList<T>, ICollection
【轉】linux下各文件夾的結構說明及用途介紹
系統引導 制造 版本 共享 應該 符號 驅動器 window 處理器 linux下各文件夾的結構說明及用途介紹: /bin:二進制可執行命令。 /dev:設備特殊文件。 /etc:系統管理和配置文件。 /etc/rc.d:啟動的配 置文件和腳本。 /home:用戶主目錄
【轉】innerHTML與jQuery裏的html()區別介紹
word www. 函數 利用 table ber order light syntax http://www.jb51.net/article/31548.htm 1、 2、 innerHTML與jquery裏的html()區別介紹 轉載 2012-10-12 投