你如何从Qt中另一个文件中的函数访问一个小部件?

时间:2011-06-15 00:02:49

标签: c++ qt qt-creator qwidget

我正在开发一个项目,我首先开始没有GUI,但现在我将它移植到Qt,但我有一个问题。

我在一个单独的文件中有我的“旧”实现,我尝试从中访问MainWindow小部件,以便输出到QTextBrowser,但我无法这样做。

在mainwindow.cpp中我有这个:

void MainWindow::addString(char* text)  
     {  
     std::string input = text;  
     ui->textBrowser->append(QString::fromStdString(input));  
     return;  
     }  

在mainwindow.h中:

class MainWindow : public QMainWindow  
     {
     Q_OBJECT
     public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    private slots:
    void on_showWelcome_triggered();
    void on_showArithmetic_triggered();
    private:
    Ui::MainWindow *ui;
    public slots:
    void btnResolveClicked();
    void btnClearClicked();
    void hideAll();
    void addString(char* output);
    };
    #endif // MAINWINDOW_H

在simple_mode.cpp中:

void test()  
     {
     MainWindow *gui = new MainWindow;
     gui->addString("WORKS");
     MainWindow:: = gui;  
     }

然而,这并没有将“WORKS”附加到textbrowser,这是我需要的,我认为它将它添加到另一个文本浏览器实例中,它与主窗口不同。

编辑: 我想要做的是直接从simple_mode.cpp向textbrowser添加一行文本。 顺便说一句,simple_mode是在没有任何Qt辅助的情况下编写的,这就是我使用std字符串的原因,目前textbrowser小部件充当虚拟终端输出屏幕,而不是像我之前那样使用printf,我想在textbrowser中附加行。但是我已经找到了自己的方法,现在我不需要这个。

我需要帮助

1 个答案:

答案 0 :(得分:1)

很难说你想要实现什么,而且代码片段没有覆盖所有可能的错误区域(即MainWindow构造函数的定义在哪里?)。此外,格式是可怕的 - 请使用idents和一致的支撑风格。

我的建议只是在show个实例上调用MainWindow。除非你没有在ui构造函数中弄乱MainWindow初始化,否则这个代码段应该足够了。如果不是 - 请向我们提供缺失的代码。

void test()  
{
    MainWindow *gui = new MainWindow;
    gui->addString("WORKS");
    gui->show();
}

作为旁注,您的addString方法应如下所示:

void MainWindow::addString(char* text)
{
    ui->textBrowser->append(QString::fromAscii(text));
}

返回语句完全没必要,将text分配给std::string可能会导致不必要的内存分配。这不是世界末日,但对于C ++程序员来说,这确实是非常糟糕的做法。