![](/img/trans.png)
[英]Qt - How To access the MainWindow from another child Window or Widget?
[英]How would you access a widget from a function in another file in Qt?
我正在开发一个项目,我一开始是在没有 GUI 的情况下制作它,但现在我将它移植到 Qt,但我有一个问题。
我在一个单独的文件中有我的“旧”实现,我尝试从中访问 MainWindow 小部件,以便将 output 转到 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;
}
但是,这不是 append “WORKS”到文本浏览器,这是我需要的,我认为它将它添加到与主窗口不同的另一个文本浏览器实例。
编辑:我想做的是将一行文本直接从 simple_mode.cpp 附加到文本浏览器。 By the way, simple_mode was written without any Qt aid, that's why I used std strings, and currently the textbrowser widget acts as a virtual terminal output screen, and instead of using printf like I did before, I wanted to append lines to the textbrowser . 但是我已经找到了方法,我现在不需要这个。
我需要帮助
很难说你想要实现什么,并且代码片段没有涵盖所有可能的错误区域(即MainWindow
构造函数的定义在哪里?)。 此外,格式很糟糕 - 请使用标识和一致的支撑样式。
我的建议只是在MainWindow
实例上调用show
。 除非您没有在MainWindow
构造函数中搞乱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
很可能会导致不必要的 memory 分配。 这不像是世界末日,但对于 C++ 程序员来说,这是非常非常糟糕的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.