从函数访问QTextEdit小部件

时间:2014-01-27 16:01:48

标签: c++ qt

我在VS2012插件中有Qt应用程序。结果(下面的代码)每当my_slot_to_execute()函数检查它的内部if条件时,就会创建一个新窗口。 在Qt Designer中我有QTextEdit小部件,我想看到那些结果(不是每次都在新窗口中)。

有人可以帮助我如何从my_slot_to_execute()函数继续(或设置对此QTextEdit小部件的访问权限),以便只在一个窗口中查看每次结果(每次都会增加)?

ProgramExample::ProgramExample(QWidget *parent): QMainWindow(parent)  // constructor
{
    ui.setupUi(this);

    // here are other part of working code

}

//and then

void ProgramExample::on_listView_clicked(const QModelIndex &index)
{
   // here are other part of working code
    my_slot_to_execute();
}

my_slot_to_execute()
{
    smatch matches;
    regex pattern("key(\\d{3}\\w{1})"); 
    string text;

    if ((some condition))
        {
        QTextEdit *textEdit = new QTextEdit;
        QString outputString1 = QString::fromStdString(matches[1]);
        textEdit->setText(QString("%1:").arg(outputString1));
        textEdit->show();
        }
}

提前致谢!

2 个答案:

答案 0 :(得分:1)

好吧,当您想要更新其文本时,不要创建新的QTextEdit

void ProgramExample::my_slot_to_execute()
{
    smatch matches;
    regex pattern("key(\\d{3}\\w{1})"); 
    string text;

    if ((some condition))
        {
        QString outputString1 = QString::fromStdString(matches[1]);
        ui.textEdit->setText(QString("%1:").arg(outputString1));
        }
}

当然,my_slot_to_execute函数必须是ProgramExample类的成员。如果,它在另一个类中,您可以将指针传递给QTextEdit对象:

void ProgramExample::on_listView_clicked(const QModelIndex &index)
{
   // here are other part of working code
    my_slot_to_execute(ui.textEdit);
}

void SomeClass::my_slot_to_execute(QTextEdit* textEdit)
    {
        smatch matches;
        regex pattern("key(\\d{3}\\w{1})"); 
        string text;

        if ((some condition))
            {
            QString outputString1 = QString::fromStdString(matches[1]);
            textEdit->setText(QString("%1:").arg(outputString1));
            }
    }

答案 1 :(得分:0)

假设你已经在Qt Designer中拖了一个QTextEdit。 它将为其指定一个对象名称,例如textEdit

然后在您的代码中,要重用此元素,您将放置:

ui->textEdit->append("new text to append");

不使用Qt Designer的替代方法是转到Widget或MainWindow的标题,并将成员变量指针放到QTextEdit(例如QTextEdit * m_textEdit;)。然后在构造函数中初始化它并将其放在布局中,并在中央窗口小部件或窗口小部件本身中设置布局。

然后,在小部件的整个生命周期中,您只需调用

即可
m_textEdit->append("new text to append");

希望有所帮助。