1

Qtで/で作成されたアプリケーションがあります。これはircクライアントです。基本的に、連絡先リスト用のリストウィジェットとチャットリスト用のリストウィジェットがあります。また、lineEditとボタンを使用します。アイテムをダブルクリックすると、別のタブが開きます。ここまではいいです。ユーザーが/jointotoと入力すると、totoというタブが開きます(これは新しいチャネルです)。新しいタブを開くと、この新しいタブのすべてのウィジェット(リスト、lineEdit、ボタン)を再作成します。したがって、ユーザーがタブから/ join totoと入力すると、このタブでは何も送信できません。しかし、彼は新しく作成されたタブでそれを行うことができます。

なぜそれがこれをしているのか分かりません、それであなたの誰かが私を助けることができるなら、それは素晴らしいです、ありがとう:P

これが私が新しいタブを作成しているコードです。すべての変数はクラス変数です。

    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 に答える