2012-04-19 36 views
1

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

私はあなたのいずれかが私を助けることができるので、もし、それがこれをやっている理由はさっぱりだが、それは素晴らしいことだ、感謝:ここで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

問題は次のようになり場所を示すために、ここには何もありません。おそらくSLOTを扱うコードのどこかにあります。これらのスロットを試してデバッグして、すべてのタブがそれらを起動しているかどうかを確認する必要があります。 – jdi

+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); 
+0

うん、それは私が来たものだ... 私はこのようなマップにタブの私のリストを保持すべきだと思いますか? 'std :: map ' 新しいタブを開くときに、同じ名前のタブがまだ開いていないことを確認する必要があります。しかし、もし私がそれを行うなら、私はイテレータを持っていないでしょう:( –

+0

あなたがしなければならないことがQTabWidget.count()上の 'forループ'で 'QTabWidget.tabText(i) ' – jdi