如何根据上下文替换Qt应用程序运行时中的UI标签/工具提示?

如何根据上下文替换Qt应用程序运行时中的UI标签/工具提示?,qt,macros,qtgui,qtranslate,string-externalization,Qt,Macros,Qtgui,Qtranslate,String Externalization,我们正在开发一个Qt桌面应用程序。应用程序可以在每个选项卡中打开多个文件,每个选项卡(文件)都有自己的上下文。用户可以打开多个文件并在这些选项卡之间切换 e、 g:就像一个选项卡是卡车管理,工具栏中的操作(添加车辆)应显示工具提示“添加卡车”,如果另一个选项卡是车辆管理,则相同的操作应显示工具提示“添加车辆” 有很多事情是这样的: 如果我删除卡车(即从卡车管理选项卡中删除车辆),则应显示消息框“卡车已成功删除”。如果删除车辆(即从车辆管理选项卡中删除车辆),则应显示“车辆已成功删除”消息 有些对

我们正在开发一个Qt桌面应用程序。应用程序可以在每个选项卡中打开多个文件,每个选项卡(文件)都有自己的上下文。用户可以打开多个文件并在这些选项卡之间切换

e、 g:就像一个选项卡是卡车管理,工具栏中的操作(添加车辆)应显示工具提示“添加卡车”,如果另一个选项卡是车辆管理,则相同的操作应显示工具提示“添加车辆”

有很多事情是这样的:

  • 如果我删除卡车(即从卡车管理选项卡中删除车辆),则应显示消息框“卡车已成功删除”。如果删除车辆(即从车辆管理选项卡中删除车辆),则应显示“车辆已成功删除”消息

  • 有些对话框中的文本通过QtDesinger直接设置为QLabel

  • 这个问题是如何产生的?

    以前该应用程序只支持卡车管理,现在我们正在同一应用程序中添加对车辆管理的支持。所有消息/用户界面标签/工具提示均使用“卡车”。现在我们要根据打开的选项卡(文件)更改它

    可行的思想解决方案:(在运行时不工作)

    所有UILabel/工具提示/消息都是可翻译的[即使用QObject::tr(..)编写]。我们考虑根据选项卡上下文安装QTranslator,它将自动更改所有位置的文本。安装QTranslator运行时不起作用


    还有别的办法吗?或者任何指针/提示都会非常有用。

    我认为没有问题,因为标签/工具提示等中的文本在Qt中很容易更改。只需使用类方法中的适当文本调用QLabel::setText和QToolTip::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");
       <...>
    }
    
    myTruck::myTruck(QWidget*parent):
    QObject(父对象)
    {
    /*在类构造函数中执行任何操作*/
    myLabel->setText(“卡车”);
    }
    myTruck::~myTruck():
    QObject(父对象)
    {
    /*在类析构函数中执行任何操作*/
    myTooltip->showText(“卡车已成功删除”);
    }
    

    myLabel和myTooltip可能是MainWindow的成员,如果您无法直接访问它们(私人成员),则可能需要信号和插槽机制来更改它们。

    文件/选项卡可能知道它管理的内容(“卡车”、“汽车”、“飞机”),因此需要id来进行此区分

    对于工具提示:订阅“当前”文件/选项卡的更改。
    QTabWidget
    有一个信号
    void currentChanged(int index)
    ,您可以订阅该信号。当当前文件/选项卡更改时(因为新文件已打开并获得焦点,或者因为用户已切换到另一个文件/选项卡),请从新的当前文件/选项卡检索id,并适当设置工具提示的文本


    对于messagebox:当您要显示“…已成功删除”的messagebox时,请检索当前文件/选项卡的id,并使用此id构造需要显示的消息。

    有许多操作/对话框。通过这种方式,所有这些文本都需要订阅tabindexchange,最重要的是,不仅需要将一个文本卡车更改为汽车,还需要根据上下文更改更多的文本。这样做太过分了。只有父窗口小部件订阅这些更改并设置所有需要的子窗口小部件的文本就足够了。除非这仍然是过分的?