findChild永远不会显示textBrowser

时间:2017-06-11 02:59:02

标签: c++ qt

我尝试通过以下方式向textbrowser显示一些文本:FindChild并且它永远不会在textbrowswer中显示它,任何帮助都会有所帮助..

这是我的mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

    namespace Ui
    {
        class MainWindow;
        class TestWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        static MainWindow* GetInstance(QWidget* parent = 0);
signals:

public slots:
    void on_pushButton_3_clicked();
    void MainWindow_TextBrowser_String(const QString & newText);

private:
        Ui::MainWindow *ui;
        static MainWindow* mainInstance;

    };

这是我的mainwindow.cpp

    // Constructor
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }

    // Destructor   
    MainWindow::~MainWindow()
    {
        delete ui;
    }

    void MainWindow::on_pushButton_3_clicked()
    {
        TestWindow mwindow;
        mwindow.start();
    }

    MainWindow* MainWindow::mainInstance = 0;

    MainWindow* MainWindow::GetInstance(QWidget *parent)
    {
        if (mainInstance == NULL)
        {
            mainInstance = new MainWindow(parent);
        }
        return mainInstance;
    }
void MainWindow::MainWindow_TextBrowser_String(const QString & newText)
{
    QString TextBrowser_String = QString(newText);
    ui->textBrowser->append(TextBrowser_String);

}

我在按钮中创建了testwindow对象,发送start函数调用findchild窗口将字符串发送到textbrowser窗口

这是我的testwindow.cpp

void testwindow::start()
{
        // Create a new mainwindow on the heap.
        MainWindow* instance = MainWindow::GetInstance();
        // Or I can call
        // MainWindow instance; then point to findchild
        QString Test_Window_String = QStringLiteral("Test Window String");
        instance->findChild<QTextBrowser*>("textBrowser")->append(Test_Window_String);
}

据我所知,您可以使用单数和插槽,只需创建一个将字符串发送到附加文本浏览器的信号

void testwindow::singalandslot()
    {
           MainWindow* instance = MainWindow::GetInstance();
           connect(this, SIGNAL(TextBrowswer_String(const QString &)), instance , SLOT(MainWindow_TextBrowser_String(QString &)));
}
void testwindow::fireSignal()
{
    emit TextBrowswer_String("sender is sending to receiver.");
}

即使有信号或FindChild,似乎该对象已被删除或我做错了。

1 个答案:

答案 0 :(得分:0)

请您分享您的Ui :: MainWindow Class和setupUi实现以获得清晰的视图吗?

希望您在setupUi或构造函数中为QTextBrowser *创建了实例。

使用以下setupUi实现,两个urc用例都正常工作。

namespace Ui
{
class MainWindow: public QWidget
{
  Q_OBJECT
public:
  QTextBrowser* textBrowser;
  void setupUi(QWidget* parent)
  {
    setParent(parent);
    textBrowser = new QTextBrowser(parent);
    textBrowser->setObjectName("textBrowser");
    textBrowser->setText("Hello");
  }
};
}