2014-10-29 84 views
1

我有一個tabTextEdit對象名稱爲「text_field」(通過Qt Designer設置)的tabwidget。它在一個標籤內。例如,在文本編輯器中,文件在多個選項卡中打開。我想複製這個。所以每當我點擊「新建文件」按鈕,它應該編程創建一個新的QTextEdit字段的選項卡。 也是所有我寫了到目前爲止所使用的上述對象名稱的功能,如在新選項卡中以編程方式創建新的QTextEdit

void MainWindow::some_function() { 
    ... 
    ui->text_field->textCursor(); 
    ... 
} 

正如你所看到的,我在一個錯誤的方式接近這一點。問題是,當我按下「新建文件」按鈕時,我將如何爲新創建的QTextEdit設置相同的對象名稱?

我試過這樣的事情。

void MainWindow::on_actionNew_triggered() 
{ 
    QTextEdit *text_field = new QTextEdit(); 
    ui->tabWidget->addTab(text_field,"Untitled.txt"); 
    ui->tabWidget->setCurrentWidget(text_field); 
} 

結果是,它創造了新的選項卡中,還加入了的QTextEdit控件但功能只工作在最初創建的QTextEdit,而不是被程序所創建的。

回答

1

所有的textEdit都存儲在tabWidget中,所以你可以在任何地方輕鬆地訪問這個小部件,只需傳遞所需小部件的索引,你就可以完成所有你需要的東西。

示例如何使用。

for(int i = 0; i< ui->tabWidget->count(); i++) 
{ 
    qDebug() << ui->tabWidget->widget(i); 
    QTextEdit* edit = qobject_cast<QTextEdit*>(ui->tabWidget->widget(i)); 
    if(edit) 
     edit->setText("new"); 
} 

在您的例子:

void MainWindow::some_function() { 
    ... 
    ui->text_field->textCursor(); 
    ... 
} 

你只有這是在Qt Designer中使用只有你可以與這些工作指數或只是currentIndex()currentWidhet()方法創建的,用我的例子小部件的工作。 textEdits。

主要思想是用戶可以添加很多小部件,並且無法預測有多少用戶需要,但是tabWidget存儲所有小部件,因此請使用它!

+0

所以我必須添加'QTextEdit * te = qobject_cast (ui-> tabWidget-> currentWidget());'爲每個函數?有沒有辦法在全球範圍內完成這項工作? – Bhavyanshu 2014-10-29 20:49:33

+0

@Bhavyanshu currentWidget返回QWidget,所以你不能使用這個小部件作爲文本編輯,而無需投射和檢查是鑄造成功。如果你想使用它,你應該施放,你可以通過一次調用這個函數來提供這個功能(但是爲什麼?)。你不能在全球範圍內做得更多,因爲你總是應該得到實際的部件,而不是你在你的問題中設置的一個部件。 – Chernobyl 2014-10-29 20:58:19

+0

好的,謝謝你解釋。此外,我完全擺脫了通過Qt Designer添加的第一個QTextEdit。現在我通過'void MainWindow :: on_actionNew_triggered()'函數直接創建新選項卡和QTextEdit。我認爲這仍然是一個更好的功能。非常感謝您的幫助! – Bhavyanshu 2014-10-29 21:06:32

相關問題