2012-04-19 74 views
1

我有一個在Qt中製作的應用程序。這是一個irc客戶端。所以基本上,我有一個listwidget的聯繫人列表和另一個聊天列表。我還創建了一個lineEdit和一個按鈕。當我雙擊一個項目時,它會打開另一個選項卡。在此之前,這很好。當用戶輸入/連接到它時,它會打開一個名爲toto的選項卡(這是一個新頻道)。問題是,當我打開一個新選項卡時,我爲這個新選項卡重新創建每個小部件(列表,lineEdit,按鈕)。因此,當用戶從標籤中鍵入/連接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 2012-04-19 19:30:10

+0

他們不是。我認爲這是因爲我在這裏重新宣佈每一個變量(代碼在那裏),所以它會破壞舊的變量。 – 2012-04-19 19:52:32

回答

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 ' 當我打開一個新選項卡時,我必須檢查具有相同名稱的選項卡尚未打開。但是,如果我這樣做,我不會有迭代器:( – 2012-04-19 22:29:43

+0

當你所要做的只是通過QTabWidget.count()的for循環並且用'QTabWidget.tabText(i)檢查名稱時,創建映射似乎完全沒有必要。 ' – jdi 2012-04-19 22:46:13

相關問題