QT Creator Main.cpp MainWindow.cpp

时间:2015-11-13 13:32:17

标签: c++ qt multiple-instances

我目前正致力于我的机电一体化/机器人学硕士论文项目。 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

我感谢任何帮助。非常感谢孤独的编码员

3 个答案:

答案 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代码。 您可以在MainWindowMainWindow.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文件中调用它。 然后这并不是真的有意义,因为您不想检查是否设置了相应的单选按钮,直到用户输入内容为止。您将不得不阅读基于事件的编程。