C++ 如何从Qt中另一个文件中的函数访问小部件?
我正在开发一个项目,我开始在没有GUI的情况下开发它,但现在我将它移植到Qt,但我遇到了一个问题 我在一个单独的文件中有我的“旧”实现,我试图从它访问MainWindow小部件,以便输出到QTextBrowser,但我无法这样做 在mainwindow.cpp中,我有以下内容:C++ 如何从Qt中另一个文件中的函数访问小部件?,c++,qt,qt-creator,qwidget,C++,Qt,Qt Creator,Qwidget,我正在开发一个项目,我开始在没有GUI的情况下开发它,但现在我将它移植到Qt,但我遇到了一个问题 我在一个单独的文件中有我的“旧”实现,我试图从它访问MainWindow小部件,以便输出到QTextBrowser,但我无法这样做 在mainwindow.cpp中,我有以下内容: void MainWindow::addString(char* text) { std::string input = text; ui->textBrowser->
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_模式是在没有任何Qt辅助的情况下编写的,这就是为什么我使用std字符串,目前textbrowser小部件充当虚拟终端输出屏幕,而不是像以前那样使用printf,我想将行附加到textbrowser。然而我已经找到了我的出路,我现在不需要这个
我需要帮助很难判断您想要实现什么,而且代码片段没有覆盖所有可能的错误区域(即
主窗口
构造函数的定义在哪里?)。此外,格式很糟糕-请使用标识和一致的支撑样式
我的建议是在main窗口
实例上调用show
。除非您在MainWindow
constructor中没有搞砸ui
初始化,否则这段代码就足够了。如果不是,请提供缺少的代码片段
void test()
{
MainWindow *gui = new MainWindow;
gui->addString("WORKS");
gui->show();
}
作为旁注,您的addString
方法应该如下所示:
void MainWindow::addString(char* text)
{
ui->textBrowser->append(QString::fromAscii(text));
}
Return语句完全没有必要,将
text
赋值给std::string
可能会导致不必要的内存分配。这不是世界末日,但对于C++程序员来说,这真的是非常糟糕的练习。谢谢你的回答,抱歉我的格式化,这是我的第一个问题,我不太理解编辑。我们都必须学习。你能谈谈我帖子中的问题和建议吗?@JGDames,你能看看我的问题,指出我的错误吗?我相信我的问题与你的解决方案有关。谢谢我总是愿意学习:什么是MainWindow::=gui代码>平均值?