QCoreApplication 類為沒有 UI 的 Qt 應用程序提供事件循環。 更多...
| 頭: | #include <QCoreApplication> |
| qmake: | QT += core |
| 繼承: | QObject |
| 繼承者: |
|
|
| QCoreApplication (int & argc , char ** argv ) | |
| virtual | ~QCoreApplication () |
| void | installNativeEventFilter (QAbstractNativeEventFilter * filterObj ) |
| virtual bool | notify (QObject * receiver , QEvent * event ) |
| void | removeNativeEventFilter (QAbstractNativeEventFilter * filterObject ) |
| void | quit () |
| void | aboutToQuit () |
| void | applicationNameChanged () |
| void | applicationVersionChanged () |
| void | organizationDomainChanged () |
| void | organizationNameChanged () |
| void | addLibraryPath (const QString & path ) |
| QString | applicationDirPath () |
| QString | applicationFilePath () |
| QString | applicationName () |
| qint64 | applicationPid () |
| QString | applicationVersion () |
| QStringList | arguments () |
| bool | closingDown () |
| QAbstractEventDispatcher * | eventDispatcher () |
| int | exec () |
| void | exit (int returnCode = 0) |
| bool | installTranslator (QTranslator * translationFile ) |
| QCoreApplication * | instance () |
| bool | isQuitLockEnabled () |
| bool | isSetuidAllowed () |
| QStringList | libraryPaths () |
| QString | organizationDomain () |
| QString | organizationName () |
| void | postEvent (QObject * receiver , QEvent * event , int priority = Qt::NormalEventPriority) |
| void | processEvents (QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) |
| void | processEvents (QEventLoop::ProcessEventsFlags flags , int ms ) |
| void | removeLibraryPath (const QString & path ) |
| void | removePostedEvents (QObject * receiver , int eventType = 0) |
| bool | removeTranslator (QTranslator * translationFile ) |
| bool | sendEvent (QObject * receiver , QEvent * event ) |
| void | sendPostedEvents (QObject * receiver = nullptr, int event_type = 0) |
| void | setApplicationName (const QString & application ) |
| void | setApplicationVersion (const QString & version ) |
| void | setAttribute (Qt::ApplicationAttribute attribute , bool on = true) |
| void | setEventDispatcher (QAbstractEventDispatcher * eventDispatcher ) |
| void | setLibraryPaths (const QStringList & paths ) |
| void | setOrganizationDomain (const QString & orgDomain ) |
| void | setOrganizationName (const QString & orgName ) |
| void | setQuitLockEnabled (bool enabled ) |
| void | setSetuidAllowed (bool allow ) |
| bool | startingUp () |
| bool | testAttribute (Qt::ApplicationAttribute attribute ) |
| QString | translate (const char * context , const char * sourceText , const char * disambiguation = nullptr, int n = -1) |
| virtual bool | event (QEvent * e ) override |
| void | qAddPostRoutine (QtCleanUpFunction ptr ) |
| void | qRemovePostRoutine (QtCleanUpFunction ptr ) |
| Q_COREAPP_STARTUP_FUNCTION (QtStartUpFunction ptr ) | |
| Q_DECLARE_TR_FUNCTIONS ( context ) |
非 GUI 應用程序使用此類來提供事件循環。對於使用 Qt 的非 GUI 應用程序,應準確存在一個 QCoreApplication 對象。對於 GUI 應用程序,見 QGuiApplication 。對於使用 Qt Widgets 模塊的應用程序,見 QApplication .
QCoreApplication 包含主事件循環,會處理和分派來自操作係統 (如:計時器和網絡事件) 和其它源的所有事件。它還處理應用程序的初始化和定稿,及係統範圍和應用程序範圍的設置。
開始事件循環通過調用 exec ()。長時間運行的操作可以調用 processEvents () 以保持應用程序的響應速度。
一般而言,推薦創建 QCoreApplication,
QGuiApplication
或
QApplication
對象在
main()
函數要盡可能早。
exec
() 不會返迴直到事件循環退齣;如:當
quit
() 被調用。
還提供瞭幾個靜態方便函數。QCoreApplication 對象可獲取自 instance ()。可以發送事件采用 sendEvent () 或張貼到事件隊列采用 postEvent ()。待決事件可以移除采用 removePostedEvents () 或分派采用 sendPostedEvents ().
類提供 quit () 槽和 aboutToQuit () 信號。
應用程序有 applicationDirPath () 和 applicationFilePath ()。庫路徑 (見 QLibrary ) 可以被檢索采用 libraryPaths () 和操縱通過 setLibraryPaths (), addLibraryPath (),和 removeLibraryPath ().
添加 (或移除) 翻譯文件可以使用 installTranslator () 和 removeTranslator ()。可以翻譯應用程序字符串使用 translate ()。 QObject::tr () 和 QObject::trUtf8() 函數的實現根據 translate ().
命令行自變量被傳遞給 QCoreApplication 構造函數的訪問應該是使用 arguments () 函數。
注意:
QCoreApplication 移除選項
-qmljsdebugger="..."
。它剖析自變量為
qmljsdebugger
,然後刪除此選項及其自變量。
對於更高級命令行選項處理,創建 QCommandLineParser .
在 Unix/Linux,Qt 默認配置為使用係統區域設置。這會導緻衝突當使用 POSIX 函數時,例如,當在數據類型 (譬如:浮點數和字符串) 之間轉換時,由於錶示法可能因區域設置不同而異。要解決此問題,調用 POSIX 函數
setlocale(LC_NUMERIC,"C")
恰好先於初始化
QApplication
,
QGuiApplication
或 QCoreApplication 以將用於數字格式化的區域設置重置為 C 區域設置。
另請參閱 QGuiApplication , QAbstractEventDispatcher , QEventLoop , 信號量範例 ,和 等待條件範例 .
此特性保持該應用程序的名稱
值的使用是通過 QSettings 類當使用空構造函數構造它時。這節省必須重復此信息每次 QSettings 對象被創建。
若未設置,應用程序名稱默認為可執行文件名稱 (從 5.0 起)。
訪問函數:
| QString | applicationName () |
| void | setApplicationName (const QString & application ) |
通知程序信號:
| void | applicationNameChanged () |
另請參閱 organizationName , organizationDomain , applicationVersion ,和 applicationFilePath ().
此特性保持該應用程序的版本
若未設置,應用程序版本默認為由主應用程序可執行文件或包確定的特定平颱值 (從 Qt 5.9 起):
| 平颱 | 源 |
|---|---|
| Windows (經典桌麵) | VERSIONINFO 資源的 PRODUCTVERSION 參數 |
| 通用 Windows 平颱 | 應用程序包清單的版本屬性 |
| macOS, iOS, tvOS, watchOS | 信息特性列錶的 CFBundleVersion 屬性 |
| Android | AndroidManifest.xml 清單元素的 android:versionName 特性 |
在其它平颱,默認為空字符串。
該特性在 Qt 4.4 引入。
訪問函數:
| QString | applicationVersion () |
| void | setApplicationVersion (const QString & version ) |
通知程序信號:
| void | applicationVersionChanged () |
另請參閱 applicationName , organizationName ,和 organizationDomain .
此特性保持編寫此應用程序的 Internet 組織域
值的使用是通過 QSettings 類當使用空構造函數構造它時。這節省必須重復此信息每次 QSettings 對象被創建。
在 Mac, QSettings 使用 organizationDomain() 作為組織若它不是空字符串;否則它使用 organizationName ()。在所有其它平颱, QSettings 使用 organizationName () 作為組織。
訪問函數:
| QString | organizationDomain () |
| void | setOrganizationDomain (const QString & orgDomain ) |
通知程序信號:
| void | organizationDomainChanged () |
另請參閱 organizationName , applicationName ,和 applicationVersion .
此特性保持編寫此應用程序的組織名稱
值的使用是通過 QSettings 類當使用空構造函數構造它時。這節省必須重復此信息每次 QSettings 對象被創建。
在 Mac, QSettings 使用 organizationDomain() 作為組織若它不是空字符串;否則它使用 organizationName()。在所有其它平颱, QSettings 使用 organizationName() 作為組織。
訪問函數:
| QString | organizationName () |
| void | setOrganizationName (const QString & orgName ) |
通知程序信號:
| void | organizationNameChanged () |
另請參閱 organizationDomain and applicationName .
此特性保持是否使用 QEventLoopLocker 特徵,可能導緻應用程序離開。
默認為
true
.
訪問函數:
| bool | isQuitLockEnabled () |
| void | setQuitLockEnabled (bool enabled ) |
另請參閱 QEventLoopLocker .
構造 Qt 核心應用程序。核心應用程序是沒有 GUI (圖形用戶界麵) 的應用程序。這種應用程序用於控製颱或用作服務器進程。
The argc and argv 自變量由應用程序處理,並以更方便形式使之可用通過 arguments () 函數。
警告: 數據引用通過 argc and argv 必須保持有效對於整個生命周期 QCoreApplication 對象。此外, argc 必須大於 0 且 argv 必須包含至少一條有效字符串。
[signal]
void
QCoreApplication::
aboutToQuit
()
此信號發射,當應用程序即將離開主事件循環 (如:當事件循環級彆降至 0 時)。這可能發生,若之前有調用 quit () 從應用程序內或當用戶關閉整個桌麵會話時。
信號特彆有用,若應用程序必須在最後一秒做一些清理。注意,在此狀態下不可能進行用戶交互。
注意: 這是私有信號。它可以用於信號連接,但不能由用戶發射。
另請參閱 quit ().
[static slot]
void
QCoreApplication::
quit
()
告訴應用程序要退齣采用返迴代碼 0 (當成功時)。相當於調用 QCoreApplication::exit (0).
它是共有的連接 QGuiApplication::lastWindowClosed () 信號到 quit(),且還經常連接,如 QAbstractButton::clicked () 或信號在 QAction , QMenu ,或 QMenuBar 到它。
始終將信號連接到此槽是很好的實踐,使用 QueuedConnection 。若在控製進入主事件循環之前發射連接 (非隊列) 到此槽的信號 (譬如先於 int main 調用 exec() ), the slot has no effect and the application never exits. Using a queued connection ensures that the slot will not be invoked until after control enters the main event loop.
範例:
QPushButton *quitButton = new QPushButton("Quit"); connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
另請參閱 exit (), aboutToQuit (),和 QGuiApplication::lastWindowClosed ().
[虛擬]
QCoreApplication::
~QCoreApplication
()
銷毀 QCoreApplication 對象。
[static]
void
QCoreApplication::
addLibraryPath
(const
QString
&
path
)
前置 path 到庫路徑列錶的開頭,確保庫被首先搜索。若 path 為空或已在路徑列錶中,路徑列錶不改變。
默認路徑列錶由單個條目、插件安裝目錄組成。插件的默認安裝目錄為
INSTALL/plugins
,其中
INSTALL
是 Qt 安裝目錄。
將庫路徑重置成默認,當實例化 QCoreApplication 被銷毀。
另請參閱 removeLibraryPath (), libraryPaths (),和 setLibraryPaths ().
[static]
QString
QCoreApplication::
applicationDirPath
()
返迴包含應用程序可執行文件的目錄。
例如,若有安裝 Qt 在
C:\Qt
目錄,和運行
regexp
範例,此函數將返迴 C:/Qt/examples/tools/regexp。
在 macOS 和 iOS,這指嚮實際包含可執行文件的目錄,可能位於應用程序捆綁中 (若應用程序有捆綁)。
警告:
在 Linux,此函數將試著獲取路徑從
/proc
文件係統。若失敗,假定
argv[0]
包含可執行文件的絕對文件名。函數還假定當前目錄未被應用程序所改變。
另請參閱 applicationFilePath ().
[static]
QString
QCoreApplication::
applicationFilePath
()
返迴應用程序可執行文件的文件路徑。
例如,若有安裝 Qt 在
/usr/local/qt
目錄,和運行
regexp
範例,此函數將返迴 /usr/local/qt/examples/tools/regexp/regexp。
警告:
在 Linux,此函數將試著獲取路徑從
/proc
文件係統。若失敗,假定
argv[0]
包含可執行文件的絕對文件名。函數還假定當前目錄未被應用程序所改變。
另請參閱 applicationDirPath ().
[static]
qint64
QCoreApplication::
applicationPid
()
返迴應用程序的當前進程 ID。
該函數在 Qt 4.4 引入。
[static]
QStringList
QCoreApplication::
arguments
()
返迴命令行自變量列錶。
通常 arguments().at(0) 是程序名,arguments().at(1) 是第一自變量,和 arguments().last() 是最後一個自變量。見下文有關 Windows 的注意事項。
調用此函數很慢 - 應將結果存儲在變量中,當剖析命令行時。
警告: 在 Unix,此列錶構建自傳遞給 main() 函數構造函數的 argc 和 argv 參數。argv 中字符串數據的解釋是使用 QString::fromLocal8Bit ();因此,例如,在按 Latin1 區域設置運行的係統中,傳遞日語命令行自變量是不可能的。大多數現代 Unix 係統沒有此局限性,因為它們基於 Unicode。
在 Windows,列錶僅構建自 argc 和 argv 參數,若修改後的 argv/argc 參數被傳遞給構造函數。在此情況下,可能齣現編碼問題。
否則,arguments() 構造自返迴值對於 GetCommandLine() 。因此,由 arguments().at(0) 給齣的字符串可能不是 Windows 程序名,從屬應用程序如何啓動。
該函數在 Qt 4.1 引入。
另請參閱 applicationFilePath () 和 QCommandLineParser .
[static]
bool
QCoreApplication::
closingDown
()
返迴
true
若應用程序對象正在被銷毀;否則返迴
false
.
另請參閱 startingUp ().
[override virtual protected]
bool
QCoreApplication::
event
(
QEvent
*
e
)
重實現: QObject::event (QEvent *e).
[static]
QAbstractEventDispatcher
*QCoreApplication::
eventDispatcher
()
返迴指嚮主綫程事件分派程序對象的指針。若不存在事件分派程序對於綫程,此函數返迴
nullptr
.
另請參閱 setEventDispatcher ().
[static]
int
QCoreApplication::
exec
()
進入主事件循環並等待,直到 exit () 被調用。返迴值被傳遞給 exit () (為 0 若 exit () 被調用憑藉 quit ()).
有必要調用此函數以啓動事件處理。主事件循環從窗口係統接收事件,並將其分派給應用程序 Widget。
要使應用程序履行空閑處理 (通過執行特殊函數,當沒有待決事件時),使用 QTimer 采用 0 超時。更高級空閑處理方案可以達成使用 processEvents ().
推薦把清理代碼連接到
aboutToQuit()
信號,而不是將它放入應用程序的
main()
函數,因為在某些平颱,exec() 調用可能不返迴。例如在 Windows,當用戶注銷時,係統在 Qt 關閉所有頂層窗口後終止過程。因此,不保證應用程序會有時間退齣其事件循環並執行代碼結束
main()
函數在 exec() 調用之後。
另請參閱 quit (), exit (), processEvents (),和 QApplication::exec ().
[static]
void
QCoreApplication::
exit
(
int
returnCode
= 0)
告訴應用程序采用返迴代碼去退齣。
在調用此函數後,應用程序離開主事件循環並返迴從調用的 exec ()。 exec () 函數返迴 returnCode 。若事件循環未運行,此函數什麼都不做。
按約定, returnCode 0 意味著成功,而任何非零值指示齣錯。
始終將信號連接到此槽是很好的實踐,使用 QueuedConnection 。若在控製進入主事件循環之前發射連接 (非隊列) 到此槽的信號 (譬如先於 int main 調用 exec() ), the slot has no effect and the application never exits. Using a queued connection ensures that the slot will not be invoked until after control enters the main event loop.
注意:不像同名 C 庫函數,此函數 does 返迴給調用者 -- 它停止事件處理。
安裝事件過濾器 filterObj 為所有本機接收事件,通過主綫程中的應用程序。
事件過濾器 filterObj 接收事件憑藉其 nativeEventFilter() 函數,在主綫程中收到的所有本機事件都會調用它。
The QAbstractNativeEventFilter::nativeEventFilter () 函數應返迴 true 若應過濾掉事件 (即:停止)。它應返迴 false 以允許正常 Qt 處理繼續進行:然後可以將本機事件轉換成 QEvent 並處理通過標準 Qt event 過濾,如 QObject::installEventFilter ().
若安裝瞭多個事件過濾器,則首先激活最後安裝的過濾器。
注意: 這裏設置的過濾器函數接收本機消息,即:MSG 或 XCB 事件結構。
注意: 本機事件過濾器將被應用程序所禁用當 Qt::AA_PluginApplication 屬性有設置。
為獲得最大可移植性,應始終試著使用 QEvent and QObject::installEventFilter () 每當可能時。
該函數在 Qt 5.0 引入。
另請參閱 QObject::installEventFilter ().
[static]
bool
QCoreApplication::
installTranslator
(
QTranslator
*
translationFile
)
添加翻譯文件 translationFile 到用於翻譯的翻譯文件列錶。
可以安裝多個翻譯文件。按照安裝它們時的反嚮次序搜索翻譯,因此,首先搜索最近安裝的翻譯文件,最後搜索首先安裝的翻譯文件。一旦發現包含匹配字符串的翻譯,就停止搜索。
安裝或移除
QTranslator
,或改變安裝的
QTranslator
生成
LanguageChange
事件為
QCoreApplication
實例。
QApplication
實例將事件傳播給所有頂層 Widget,若重實現 changeEvent 可以重新翻譯用戶界麵,通過傳遞用戶可見字符串憑藉
tr
() 函數到各自的特性 setter。由 Qt Designer 生成的用戶界麵類提供
retranslateUi()
函數可以被調用。
函數返迴
true
當成功時和 false 當失敗時。
注意: QCoreApplication does not 擁有所有權對於 translationFile .
另請參閱 removeTranslator (), translate (), QTranslator::load (),和 動態翻譯 .
[static]
QCoreApplication
*QCoreApplication::
instance
()
返迴指針指嚮應用程序的 QCoreApplication (或 QGuiApplication / QApplication ) 實例。
若實例尚未分配,
nullptr
被返迴。
[static]
bool
QCoreApplication::
isSetuidAllowed
()
返迴 true 若允許應用程序在 UNIX 平颱運行 setuid。
該函數在 Qt 5.3 引入。
另請參閱 QCoreApplication::setSetuidAllowed ().
[static]
QStringList
QCoreApplication::
libraryPaths
()
返迴將搜索的應用程序路徑列錶當動態加載庫時。
此函數的返迴值可能改變當
QCoreApplication
被創建。不推薦調用它先於創建
QCoreApplication
。應用程序可執行文件目錄 (
not
工作目錄) 是列錶的一部分若已知。為使它知道
QCoreApplication
已構造,所以它將使用
argv[0]
來查找它。
Qt 提供默認庫路徑,但也可以設置它們使用 qt.conf 文件。在此文件中指定的路徑將覆蓋默認值。注意,若 qt.conf 文件在應用程序可執行文件目錄下,可能找不到它直到 QCoreApplication 被創建。若當調用該函數時找不到它,將使用默認庫路徑。
列錶將包括插件安裝目錄,若存在 (插件的默認安裝目錄為
INSTALL/plugins
,其中
INSTALL
是 Qt 安裝目錄)。冒號分隔的條目對於
QT_PLUGIN_PATH
環境變量總是被添加。插件安裝目錄 (且其存在) 可能改變,當應用程序可執行文件目錄變為已知時。
若想要遍曆列錶,可以使用 foreach 僞關鍵詞:
foreach (const QString &path, app.libraryPaths()) do_something(path);
另請參閱 setLibraryPaths (), addLibraryPath (), removeLibraryPath (), QLibrary ,和 如何創建 Qt 插件 .
[虛擬]
bool
QCoreApplication::
notify
(
QObject
*
receiver
,
QEvent
*
event
)
發送 event to receiver : receiver ->event( event )。返迴來自接收者的事件處理程序返迴的值。注意:此函數被調用,對於被發送給任何綫程中的任何對象的所有事件而言。
對於某些類型的事件 (如鼠標事件和按鍵事件),事件會被傳播給接收者的父級,依此類推直至頂層對象,若接收者對事件不感興趣 (即:它返迴
false
).
有 5 種不同辦法可以處理事件。重實現此虛函數隻是其中之一。以下列齣所有 5 種途徑:
未來方嚮: 在 Qt 6 主綫程外的對象,不會調用此函數。同時,需要該功能的應用程序應為其事件審查需求尋找其它解決方案。改變可能延伸到主綫程,導緻此函數被棄用。
警告: 若覆寫此函數,必須確保處理事件的所有綫程停止這樣做,在開始銷毀應用程序對象之前。這包括可能正使用的由其它庫啓動的綫程,但不適用於 Qt 自己的綫程。
另請參閱 QObject::event () 和 installNativeEventFilter ().
[static]
void
QCoreApplication::
postEvent
(
QObject
*
receiver
,
QEvent
*
event
,
int
priority
= Qt::NormalEventPriority)
添加事件 event ,采用對象 receiver 作為事件接收者,到事件隊列並立即返迴。
必須在堆上分配事件,因為 Post 事件隊列將擁有事件的所有權,且事件一旦已被張貼就會被刪除。它是 not safe 去訪問事件,在它被張貼之後。
當控製返迴到主事件循環時,存儲在隊列中的所有事件將被發送使用 notify () 函數。
事件按降序排序 priority 次序,即,事件具有高 priority 隊列前於事件具有較低 priority 。 priority 可以是任何整數值,即,在 INT_MAX 和 INT_MIN (包括在內) 之間;見 Qt::EventPriority 瞭解更多細節。事件具有相等 priority 將按張貼次序處理。
注意: 此函數是 綫程安全 .
該函數在 Qt 4.3 引入。
另請參閱 sendEvent (), notify (), sendPostedEvents (),和 Qt::EventPriority .
[static]
void
QCoreApplication::
processEvents
(
QEventLoop::ProcessEventsFlags
flags
= QEventLoop::AllEvents)
處理調用綫程的一些待決事件根據指定 flags .
可以偶爾調用此函數當程序忙於履行長時間操作時 (如:拷貝文件)。
在正運行連續調用此函數的本地循環事件中,沒有事件循環, DeferredDelete 事件將不被處理。這會影響 Widget 的行為,如 QToolTip 依賴 DeferredDelete 事件纔能正確運行。替代是調用 sendPostedEvents() 從本地循環內。
調用此函數僅處理調用綫程的事件,並在處理所有可用事件後返迴。可用事件是在函數調用之前的隊列事件。這意味著將隊列張貼事件當函數運行時,直到處理稍後一輪事件。
注意: 此函數是 綫程安全 .
另請參閱 exec (), QTimer , QEventLoop::processEvents (), flush (),和 sendPostedEvents ().
[static]
void
QCoreApplication::
processEvents
(
QEventLoop::ProcessEventsFlags
flags
,
int
ms
)
此函數重載 processEvents()。
處理調用綫程待決事件以 ms 毫秒為單位或直到沒有更多要處理事件為止,以較短者為準。
可以偶爾調用此函數,當程序忙於做長時間操作時 (如:拷貝文件)。
調用此函數僅處理調用綫程的事件。
注意: 不像 processEvents() 重載,此函數還處理張貼事件當函數運行時。
注意: 在超時之前隊列的所有事件都將被處理,不管需要多久。
注意: 此函數是 綫程安全 .
另請參閱 exec (), QTimer ,和 QEventLoop::processEvents ().
[static]
void
QCoreApplication::
removeLibraryPath
(const
QString
&
path
)
移除 path 從庫路徑列錶。若 path 為空或不在路徑列錶中,列錶不改變。
將庫路徑重置成默認,當實例化 QCoreApplication 被銷毀。
另請參閱 addLibraryPath (), libraryPaths (),和 setLibraryPaths ().
移除事件 filterObject 從此對象。忽略請求,若尚未安裝這種事件過濾器。
將自動移除此對象的所有事件過濾器,當此對象被銷毀時。
它始終安全地移除事件過濾器,即使在事件過濾器激活期間 (即:從 nativeEventFilter() 函數)。
該函數在 Qt 5.0 引入。
另請參閱 installNativeEventFilter ().
[static]
void
QCoreApplication::
removePostedEvents
(
QObject
*
receiver
,
int
eventType
= 0)
移除所有事件為給定 eventType 的張貼是使用 postEvent () 對於 receiver .
事件 not 被分派,取而代之,從隊列移除它們。應該從不需要調用此函數。若調用它,注意殺除事件可能導緻 receiver 破壞一個或多個不變體。
若
receiver
is
nullptr
,事件的
eventType
被移除從所有對象。若
eventType
為 0,移除所有事件從
receiver
。 從不應調用此函數采用
eventType
of 0.
注意: 此函數是 綫程安全 .
該函數在 Qt 4.3 引入。
[static]
bool
QCoreApplication::
removeTranslator
(
QTranslator
*
translationFile
)
移除翻譯文件 translationFile 從此應用程序使用的翻譯文件列錶 (它不會從文件係統中刪除翻譯文件)。
函數返迴
true
當成功時和 false 當失敗時。
另請參閱 installTranslator (), translate (),和 QObject::tr ().
[static]
bool
QCoreApplication::
sendEvent
(
QObject
*
receiver
,
QEvent
*
event
)
發送事件 event 直接到接收者 receiver ,使用 notify () 函數。返迴從事件處理程序返迴的值。
事件 not 被刪除,當事件被發送後。正常途徑是在堆棧上創建事件,例如:
QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0); QApplication::sendEvent(mainWindow, &event);
另請參閱 postEvent () 和 notify ().
[static]
void
QCoreApplication::
sendPostedEvents
(
QObject
*
receiver
= nullptr,
int
event_type
= 0)
立即分派之前隊列的所有事件采用 QCoreApplication::postEvent () 和為對象 receiver 和事件類型 event_type .
來自窗口係統的事件 not 通過此函數分派,而是通過 processEvents ().
若
receiver
is
nullptr
,事件的
event_type
為所有對象發送。若
event_type
為 0,所有事件被發送為
receiver
.
注意: 此方法必須被調用從綫程以其 QObject 參數, receiver ,存活。
[static]
void
QCoreApplication::
setAttribute
(
Qt::ApplicationAttribute
attribute
,
bool
on
= true)
設置屬性 attribute if on 為 true;否則清零屬性。
注意: 某些應用程序屬性必須被設置 before 創建 QCoreApplication 實例。參考 Qt::ApplicationAttribute 文檔編製,瞭解更多信息。
另請參閱 testAttribute ().
[static]
void
QCoreApplication::
setEventDispatcher
(
QAbstractEventDispatcher
*
eventDispatcher
)
將主綫程事件分派程序設為 eventDispatcher 。這纔有可能,隻要尚未安裝事件分派程序。也就是,先於 QCoreApplication 被實例化。此方法擁有對象的所有權。
另請參閱 eventDispatcher ().
[static]
void
QCoreApplication::
setLibraryPaths
(const
QStringList
&
paths
)
設置要搜索的目錄列錶,當加載插件采用 QLibrary to paths 。所有現有路徑被刪除且路徑列錶將由給定路徑組成按 paths 和應用程序的路徑。
將庫路徑重置成默認,當實例化 QCoreApplication 被銷毀。
另請參閱 libraryPaths (), addLibraryPath (), removeLibraryPath (),和 QLibrary .
[static]
void
QCoreApplication::
setSetuidAllowed
(
bool
allow
)
允許應用程序在 UNIX 平颱運行 setuid 若 allow 為 true。
若 allow 為 false (默認) 且 Qt 檢測到應用程序正采用不同於真實用戶 ID 的有效用戶 ID 在運行,應用程序將中止當 QCoreApplication 實例被創建。
Qt 不是 setuid 程序的閤適解決方案,由於其攻擊麵大。不管怎樣,由於曆史原因,某些應用程序可能要求以這種方式運行。此標誌將阻止 Qt 中止應用程序當檢測到這時,且必須有設置先於 QCoreApplication 實例被創建。
注意: 強烈推薦不啓用此選項,由於它引入安全風險。
該函數在 Qt 5.3 引入。
另請參閱 isSetuidAllowed ().
[static]
bool
QCoreApplication::
startingUp
()
返迴
true
若尚未創建應用程序對象;否則返迴
false
.
另請參閱 closingDown ().
[static]
bool
QCoreApplication::
testAttribute
(
Qt::ApplicationAttribute
attribute
)
返迴
true
若屬性
attribute
已設置;否則返迴
false
.
另請參閱 setAttribute ().
[static]
QString
QCoreApplication::
translate
(const
char
*
context
, const
char
*
sourceText
, const
char
*
disambiguation
= nullptr,
int
n
= -1)
返迴翻譯文本為 sourceText ,通過查詢已安裝的翻譯文件。搜索翻譯文件是從最近安裝的文件開始到第一安裝文件。
QObject::tr () 更方便提供此功能。
context 通常是類名 (如 MyDialog) 和 sourceText 是英文文本或簡短標識文本。
disambiguation
是標識字符串,當相同
sourceText
被用於同一上下文中的不同角色。默認情況下,它是
nullptr
.
見 QTranslator and QObject::tr () 文檔編製,瞭解有關上下文、消除歧義和注釋的更多信息。
n
用於結閤
%n
以支持復數形式。見
QObject::tr
() 瞭解細節。
若沒有翻譯文件包含要翻譯的 sourceText in context ,此函數返迴 QString 相當於 sourceText .
此函數不是虛擬的。可以使用替代翻譯技術通過子類化 QTranslator .
注意: 此函數是 綫程安全 .
另請參閱 QObject::tr (), installTranslator (), removeTranslator (),及 translate()。
添加的全局例程將調用自 QCoreApplication 析構函數。此函數通常用於為程序範圍功能添加清理例程。
清理例程按添加它們的反嚮次序被調用。
函數的指定通過 ptr 不應接受自變量且不應返迴任何東西。例如:
static int *global_ptr = nullptr; static void cleanup_ptr() { delete [] global_ptr; global_ptr = nullptr; } void init_ptr() { global_ptr = new int[100]; // allocate data qAddPostRoutine(cleanup_ptr); // delete later }
注意,對於應用程序 (或模塊) 範圍的清理,qAddPostRoutine() 常常不閤適。例如,若程序被拆分成動態加載的模塊,則相關模塊可能早被卸載先於 QCoreApplication 析構函數的調用。在這種情況下,若仍期望使用 qAddPostRoutine(), qRemovePostRoutine () 可以用於阻止例程被調用通過 QCoreApplication 析構函數。例如,若調用該例程,在卸載模塊之前。
對於模塊和庫,使用引用計數的初始化管理器或 Qt 的父級/子級刪除機製可能更好。這裏是使用父級/子級機製在正確時間調用清理函數的私有類範例:
class MyPrivateInitStuff : public QObject { public: static MyPrivateInitStuff *initStuff(QObject *parent) { if (!p) p = new MyPrivateInitStuff(parent); return p; } ~MyPrivateInitStuff() { // cleanup goes here } private: MyPrivateInitStuff(QObject *parent) : QObject(parent) { // initialization goes here } MyPrivateInitStuff *p; };
通過選擇正確父級對象,這經常可以在正確時刻清理模塊數據。
注意: 該函數從 Qt 5.10 起是 Thread-Safety (綫程安全) 的。
注意: 此函數是 綫程安全 .
另請參閱 qRemovePostRoutine ().
移除清理例程指定通過 ptr 從例程列錶調用通過 QCoreApplication 析構函數。必須先前已將例程添加到列錶通過調用 qAddPostRoutine (),否則此函數不起作用。
注意: 該函數從 Qt 5.10 起是 Thread-Safety (綫程安全) 的。
注意: 此函數是 綫程安全 .
該函數在 Qt 5.3 引入。
另請參閱 qAddPostRoutine ().
添加的全局函數調用自 QCoreApplication 構造函數。此宏通常用於初始化程序範圍功能庫,不要求應用程序調用庫進行初始化。
函數的指定通過 ptr 不應接受自變量且不應返迴任何東西。例如:
// Called once QCoreApplication exists static void preRoutineMyDebugTool() { MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance()); QCoreApplication::instance()->installEventFilter(tool); } Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)
注意,啓動函數將運行在末尾對於 QCoreApplication 構造函數,在任何 GUI 初始化之前。若函數中要求 GUI 代碼,稍後可使用計時器 (或隊列援引) 從事件循環履行初始化。
若 QCoreApplication 被刪除且另一 QCoreApplication 被創建,啓動函數將被再次援引。
注意: 此宏不適閤用於靜態鏈接到應用程序的庫代碼中,因為函數可能根本不會被調用,由於被鏈接器淘汰。
注意: 此函數是 可重入 .
該函數在 Qt 5.1 引入。
Q_DECLARE_TR_FUNCTIONS() 宏聲明並實現瞭 2 個翻譯函數
tr()
and
trUtf8()
,采用這些簽名:
static inline QString tr(const char *sourceText, const char *comment = nullptr); static inline QString trUtf8(const char *sourceText, const char *comment = nullptr);
此宏很有用,若想要使用 QObject::tr () 或 QObject::trUtf8() 當類未繼承自 QObject .
Q_DECLARE_TR_FUNCTIONS() 必須齣現在類定義最頂部 (先於第 1 個
public:
or
protected:
)。例如:
class MyMfcView : public CView { Q_DECLARE_TR_FUNCTIONS(MyMfcView) public: MyMfcView(); ... };
The context 參數通常是類名,但它可以是任何文本。
另請參閱 Q_OBJECT , QObject::tr (),和 QObject::trUtf8 ().