我目前正致力于我的机电一体化/机器人学硕士论文项目。 y项目的目标是读入.stl-File并计算工业机器人的路径。
直到现在一切正常,但现在我的教授要我开发一个GUI,因为到现在为止我只是使用命令窗口并编写了所有参数手册。现在我正在与Qt Creator合作,为我的项目开发了一个简单的GUI。
在这个界面中,我得到了一个用于ascii文件的RadioButton。为了我的功能工作,我必须确定用户是否输入了ascii文件或二进制文件。但这是我的第一个问题。在命令窗口中,我只需检查argv[]
字符串"-ascii"
。如果用户输入此标志,则标志设置为false。
if(0 == strcmp(argv[i], "-ascii")) {
isBinaryFormat = false;
}
现在我只想在GUI中做同样的事情。如果选中RadioButton,则flag设置为false。所以我在main.cpp
文件
if(ui->radioButton->isChecked()) {
isBinaryFormat = false;
}
但是ui在主要功能中是未知的。在google上搜索帮助后,我刚刚找到了在mainwindow.cpp
文件中编写代码的教程。但是如何将主窗口文件中的信息发送到main.cpp
文件中的主函数。
第二个问题是,如果我使用QFileDialog::getOpenFilename
方法,我该如何将文件名传递给其他函数。这个想法是,用户在他的PC上的任何地方选择一个文件,程序打开文件并对其进行处理。但在这里我遇到了同样的问题。我可以浏览文件,但如何将信息从mainwindow.cpp
传输到main.cpp
。
我感谢任何帮助。非常感谢孤独的编码员
答案 0 :(得分:1)
这不仅仅是关于文件,还有一个类。了解他们。解决方法是在MainWindow
类中添加一个getter,它将返回是否已选中radioButton
:
class MainWindow : public QMainWindow
{
public:
// optionally, move implementation in the source file
bool isBinaryFormatChecked() const
{
return ui->radioButton->isChecked();
}
// other stuff ...
};
然后,您可以在main
window.isBinaryFormatChecked()
或window->isBinaryFormatChecked()
中访问它,具体取决于您是否有指针。另一种方法是在ui
公开中设置MainWindow
,这样您就可以访问整个用户界面,但这会破坏正确的封装。
答案 1 :(得分:1)
首先,您不要在main.cpp
中编写UI代码。
您可以在MainWindow
和MainWindow.cpp
中将MainWindow.h
类编入其中。
然后您的ui->
将起作用,因为它可以访问该命名空间。
我不明白为什么你会在Main.cpp
中拥有这些功能?
如果没有看到更多代码,你就不可能得到答案。
如果要在类中使用外部函数,可以直接在类中声明方法,也可以创建一个新文件,如global_function.h
和.cpp
,您可以在类中包含这些文件。 (不要忘记标题守卫)
也不应该代码看起来像这样:
if(!ui->radioButton->isChecked())
{
isBinaryFormat = false;
}
因为:
如果选中RadioButton,则flag设置为false。
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"/home",
tr("Images (*.png *.xpm *.jpg)"));
getOpenFileName( )
将返回一个字符串,其中包含所选文件的路径和文件名,然后您可以将其传递给您的函数。
请阅读有关如何使用Qt的更多信息。
答案 2 :(得分:0)
我认为在尝试集成已经正在运行的控制台代码之前,您需要先了解Qt提供的一些(我认为很好)示例。
基本上你真的不想在main.cpp中进行检查,但如果必须的话,你可以在mainwindow的公共函数中使用它,并从main.cpp文件中调用它。 但然后这并不是真的有意义,因为您不想检查是否设置了相应的单选按钮,直到用户输入内容为止。您将不得不阅读基于事件的编程。