2013-02-05 32 views
0

我們正在開發一個Qt桌面應用程序。應用程序可以在每個選項卡中打開一個文件,每個選項卡(文件)都有自己的上下文。用戶可以打開多個文件並在這些標籤之間切換。如何根據上下文在Qt應用程序運行時替換UI標籤/工具提示?

例如:就像卡車管理中的一個選項卡一樣,工具欄中的action(add_Vehicle)應該顯示工具提示「Add Truck」,如果另一個選項卡是Car Management,則同樣的動作應該顯示工具提示「Add Car」。

有很多事情是這樣的:「卡車成功刪除」

  1. 如果我刪除貨車(即車輛從卡車管理選項卡),它應該顯示消息框並且如果汽車(即來自汽車管理標籤的車輛)被刪除,則應顯示「汽車刪除成功」消息。

  2. 有一些對話框中的文本通過QtDesinger直接設置到QLabel。

這是怎麼產生的問題?

此前該應用程序僅支持卡車管理,現在我們在同一應用程序中添加了對汽車管理的支持。所有消息/ UI標籤/工具提示都使用「卡車」。現在我們要根據打開的選項卡(文件)來更改它。

可行思想解:(在運行時不工作)

所有UILabels /工具提示/消息是平移[即用QObject :: tr(..)]寫成。我們考慮根據選項卡上下文安裝QTranslator,它會自動更改所有地方的文本。安裝QTranslator運行時不起作用。

是否有另一種方法呢?或者任何指針/提示將非常有幫助。

回答

0

我沒有看到問題,因爲標籤/工具提示等內的文本很容易在Qt中更改。只需撥打QLabel ::的setTextQToolTip :: showText方法與相應的文本從你的類方法,即:

myTruck::myTruck(QWidget *parent) : 
    QObject(parent) 
{ 
    /* do whatever you do in your class constructor */ 
    <...> 
    myLabel->setText("Truck"); 
    <...> 
} 

myTruck::~myTruck() : 
    QObject(parent) 
{ 
    /* do whatever you do in your class destructor */ 
    <...> 
    myTooltip->showText("Truck deleted successfully"); 
    <...> 
} 

myLabelmyTooltip可能是主窗口和殼體件你沒有直接訪問他們(私人會員),信號&插槽機制可能需要更改它們。

0

的文件/標籤可能會知道它管理(「卡車」,「汽車」,「飛機」),所以它需要一個id,使這個distiction

對於提示:訂閱變化'當前'文件/選項卡。 A QTabWidget有一個信號void currentChanged(int index)您可以訂閱。當前文件/選項卡更改(因爲打開一個新文件並獲得焦點或因爲用戶選項卡切換到另一個文件/選項卡),請從新的當前文件/選項卡中檢索該ID,並適當設置工具提示的文本。

對於消息框:當你想顯示一個消息框「...」刪除成功「,檢索當前文件/標籤的ID,並用它來構建你需要顯示的信息

+0

有很多操作/對話框,通過這種方式,所有這些都需要訂閱到TabIndexChanged,並且頂部這不僅僅是一個文本卡車改變成汽車,還有一些更多的文本需要根據上下文來改變,這是一個矯枉過正的行爲 – EngineeredBrain

+0

只有父Widget訂閱這些更改並設置文本可能就夠了所有需要的孩子Widgets。除非這仍然是矯枉過正? – PrisonMonkeys

相關問題