Qt,对象通信

时间:2015-07-02 12:26:41

标签: qt c++11

我制作一个简单的货币转换器,我遇到了班级沟通的麻烦。

我有一个用于下载汇率的类,它将值保存到文本文件中,另一个类用于解析文件并将值保存在我在main中解析的QMap中。 我不会发布下载器和解析器类,因为它们的工作是有意的

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QMap<QString,double> currency_map;


downloader d;
d.Do_download();
//do the downloading

MainWindow w(currency_map);
w.show();
//make the main window and send the map into it.

parser p;
p.read_line(currency_map);
//parsing the file and saving the values.


p.print_map(currency_map);
//test to see if my values are saved.

Calculator c(currency_map, w);
// cannot convert parameter 1 from 'QMap<Key,T>' to 'QMap<Key,T>'* is the error i get

return a.exec();
}

我的calculator.h

#include <QObject>
#include <QString>
#include <QDebug>
#include <ui_mainwindow.h>
#include "MainWindow.h"

class Calculator
{
public:
    explicit Calculator(QMap <QString, double> *my_map, Ui::MainWindow &window);
    void get_value(QString value);

private:
    Ui::MainWindow *ui;
    QMap <QString, double> *map_pointer;
    double x , y;

};

和calculator.cpp

#include "calculator.h"

Calculator::Calculator(QMap<QString, double> *my_map, Ui::MainWindow *window)
{
    map_pointer = my_map;
    this->ui= window;  
//I get a overloaded member function not found in calculator
}


void Calculator::get_value(QString value)
{
    for(QMap<QString, double>::Iterator i = map_pointer->begin();i != map_pointer->end();i++)
        {
        if(i.key() == value)
            {
            qDebug()<<i.key() << ": " << i.value();
        }
    }
}

和MainWindow.h

#include <QMainWindow>
#include <ui_mainwindow.h>
#include "parser.h"
#include "calculator.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QMap<QString, double> currency_map, QWidget *parent = 0);

    QStringList retrieve_list(parser *p);
    ~MainWindow();
private slots:
    void on_convert_button_clicked();

    void on_from_Combox_currentIndexChanged(const QString &arg1);

    void on_to_Combox_currentIndexChanged(const QString &arg1);

signals:
private:
    Ui::MainWindow *ui;
    Calculator *calc;  //missing type specifier
    parser currency_parser;

};

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QMap<QString, double> currency_map, QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    calc = new Calculator(currency_map,ui);
    //missing type specifier

    ui->from_Combox->addItems(retrieve_list(&currency_parser));
    ui->to_Combox->addItems(retrieve_list(&currency_parser));

}

QStringList MainWindow::retrieve_list(parser *p)
{
    return p->currency_list;
}

MainWindow::~MainWindow()
{

    delete ui;
    delete calc;
}

我们的想法是在汇率中加上主要的汇率图,并在解析器类中填入数据。

然后使用计算器类计算所需的值。 我有一个&#34;计划&#34;将地图发送到类中,以及主窗口对象上的指针,因此计算器类可以在主窗口对象的显示窗口小部件中显示结果,但我无法弄清楚这里缺少的是什么。

如果有人能够让我以及如何使用信号和插槽进行我需要的通信的例子,那将非常感激。

0 个答案:

没有答案