0

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

例如:就像一个选项卡是卡车管理,工具栏中的操作(add_Vehicle)应该显示工具提示“添加卡车”,如果另一个选项卡是汽车管理,相同的操作应该显示工具提示“添加汽车”。

有很多这样的事情:

  1. 如果我删除卡车(即卡车管理选项卡中的车辆),它应该显示消息框“卡车已成功删除”。如果汽车(即汽车管理选项卡中的车辆)被删除,则应显示“汽车已成功删除”消息。

  2. 有一些对话框通过 QtDesinger 直接将文本设置为 QLabels。

这个问题是怎么产生的?

以前该应用程序仅支持卡车管理,现在我们正在同一应用程序中添加对汽车管理的支持。所有消息/UI 标签/工具提示都使用“卡车”。现在我们要根据打开的标签(文件)来改变它。

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

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

还有另一种方法吗?或者任何指针/提示都会非常有帮助。

4

2 回答 2

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可能是MainWindow的成员,如果您无法直接访问它们(私有成员),可能需要使用信号和插槽机制来更改它们。

于 2013-02-05T13:46:51.133 回答
0

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

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

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

于 2013-02-05T13:47:50.277 回答