从QWidget中获取QTextEdit中的文本

时间:2013-02-12 14:47:03

标签: c++ qt qt4

我有一个QTabWidget'tw',我在其中添加了这样的标签:

QWidget *newTab = new QWidget(tw);
tw->addTab(newTab, "Tab name");
QTextEdit *te = new QTextEdit();
te->setText("Hello world");
QVBoxLayout *vbox = new QVBoxLayout();
vbox->addWidget(te);
newTab->setLayout(vbox);

如何从前景中的选项卡中获取QTextEdit内的文本(就像我单击按钮时我想将文本从可见选项卡复制到剪贴板或像这样的smtg )。我不知道如何处理QTextEdit

1 个答案:

答案 0 :(得分:2)

您需要手动跟踪文本编辑。通过在父窗口小部件中存储指向它们的指针,或者您可以使用查找表,例如一个QHash

假设您有一个班级MyClass,其中包含您在问题中发布的代码:

添加如下成员变量:

class QTextEdit; // this is a so-called "Forward Declaration" which saves you an
                 // #include. Google it if you want to know more ;-)
class MyClass
{
    // ...
private:

    QHash< int, QTextEdit* > _textEditPerTabPage;
};

此变量可以从标签页的索引(0,1,2,...)中存储(和查找)文本编辑。

您可以执行这样的添加功能:

void MyClass::addTab( QWidget* tabWidget, const QString& tabName, const QString& text )
{
    // Create the text edit
    QTextEdit* textEdit = new QTextEdit();
    textEdit->setText( text );

    // Create a layout which contains the text edit
    QVBoxLayout* layout = new QVBoxLayout();
    layout->addWidget( textEdit );

    // Create a parent widget for the layout
    QWidget* newTab = new QWidget( tabWidget );
    newTab->setLayout( layout );

    // Add that widget as a new tab
    int tabIndex = tabWidget->addTab( newTab, tabName );

    // Remember the text edit for the widget
    _textEditPerTabPage.insert( tabIndex, textEdit );
}

然后像这样检索QTextEdit上的指针:

QTextEdit* textEdit = _textEditPerTabPage.value( tabWidget->currentIndex() );

此代码有一些限制,例如您始终必须确保使用自己的MyClass::addTab功能,并且不要在该功能之外访问QTabWidget::addTab。此外,如果您致电QTabWidget::removeTab,您的QHash可能不再指向正确的QTextEdits。