1

我有一个用 Qt 制作的应用程序。这是一个irc客户端。所以基本上我有一个用于联系人列表的列表小部件和另一个用于聊天列表的小部件。我还拥有一个 lineEdit 和一个按钮。当我双击一个项目时,它会打开另一个选项卡。到这里为止,很好。当用户键入 /join toto 时,它会打开一个名为 toto 的选项卡(这是一个新频道)。问题是当我打开一个新选项卡时,我会为这个新选项卡重新创建每个小部件(列表、lineEdit、按钮)。因此,当用户从选项卡键入 /join toto 时,他无法在此选项卡上发送任何内容。但他可以在新创建的选项卡上执行此操作。

我不知道为什么会这样,所以如果你们中的任何人都可以帮助我,那就太好了,谢谢:P

这是我创建新标签的代码。每个 var 都是一个类 var。

    newTab = new QWidget(ui->tabWidget);
    pushButton = new QPushButton("Envoyer", newTab);
    connect(pushButton, SIGNAL(clicked()), this, SLOT(clicked()));
    pushButton->setGeometry(976, 705, 121, 27);
    chatListView = new QListView(newTab);
    chatListView->setGeometry(10, 10, 891 ,681);
    contactListView = new QListWidget(newTab);
    contactListView->setGeometry(910, 10, 251, 681);
    lineEdit = new QLineEdit(newTab);
    lineEdit->setGeometry(10, 705, 891, 27);
    connect(lineEdit, SIGNAL(returnPressed()), pushButton, SLOT(click()));
    ui->tabWidget->addTab(newTab, name);
4

1 回答 1

2

将所有这些代码移动到 QWidget 的自定义子类中。然后,每次您想创建一个新选项卡时,只需创建一个自定义小部件的全新实例。

请注意,现在您一直在引用类实例属性而不是全新的对象。您不应该newTab每次都替换相同的属性。它很可能会破坏您的连接引用。

你最终会得到这样的东西:

MyTabWidget *tabWidget = new MyTabWidget(this);
connect(tabWidget->pushButton, SIGNAL(clicked()), this, SLOT(clicked()));
connect(tabWidget->lineEdit, SIGNAL(returnPressed()), pushButton, SLOT(click()));
ui->tabWidget->addTab(tabWidget, name);
于 2012-04-19T21:43:25.627 回答