为每个连接的设备动态创建小部件

时间:2013-12-14 08:39:36

标签: qt dynamic qt-creator device

我想请你帮助Qt 5.1.1。

我有一个处理串行连接设备的应用程序。设备在RS 485上,因此在一个USB连接下,我可以同时与更多设备通信。

现在我的问题。每个设备都有自己的协议通信代码。

例如,每个设备都会向我发送代码'$ D01'或'$ D05',以防这是设备1或5.所以我可以知道有多少。或者也许我可以在软件中做到这一点,以便我说应用程序中有哪些设备号。

但我需要的是为每个设备提供自己的子窗口进行通信。窗户是一样的。我想知道如何动态地这样做,以便在给出设备的地址后,我可以在它自己的帧,子窗口或其他任何地方操作。

1 个答案:

答案 0 :(得分:0)

在Qt中这很容易。 首先,您使用File-> New-> Qt-> Qt Designer From Class创建自定义窗口小部件("子窗口"在您的问题中)。然后使用QtCreator的设计器面板进行布局。所以你有一个新的自定义类,例如从您的自定义布局等QWidget派生的MyWidget。

然后你有了主窗口,例如MyMainWindow。您可以在该主窗口中创建一个容器窗口小部件,您希望窗口小部件位于该窗口中,并为其提供布局,例如:你说"垂直布局"。除此之外,你将容器小部件保持为空(只是一个附有布局的普通QWidget)。

现在,在您的代码中,每当您输入新的USB设备时,都按如下方式进行:

  • 创建自定义小部件,例如MyWidget *widget = new MyWidget(this);
  • 添加小部件,例如container->layout()->addWidget(widget)或containerLayout-> addWidget(),具体取决于您是否明确命名布局
  • 在MyWidget类或setter等中使用自定义构造函数,以使用适当的信息填充

正如您所看到的,您仍然可以使用Qt的标准UI布局方法,并且使用一些额外的代码可以获得动态数量的小部件。

当您的窗口太忙时,您可以将容器更改为其他内容:MdiArea,StackedWidget,TabbedWidget等。