我在Qt中有一个应用程序。这是一个irc客户端。所以基本上我有一个联系人列表的listwidget和另一个聊天列表。我还有一个lineEdit和一个按钮。当我双击某个项目时,它会打开另一个标签。直到这里,这很好。当用户键入/ join toto时,它会打开一个名为toto的选项卡(这是一个新通道)。问题是,当我打开一个新标签时,我会为这个新标签重新创建每个小部件(lists,lineEdit,button)。因此,当用户从选项卡键入/加入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);
答案 0 :(得分:1)
将所有这些代码移动到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);