如何使用QT实现OOP

时间:2010-04-27 15:18:32

标签: c++ oop qt

这是一个简单的OOP QT问题。 我的应用程序包括主窗口(QMainWindow)和一个表(QTableWidget)。 在主窗口中我有参数和变量,我想传递给表类,并从表类访问主widnow类中的方法,我应该怎么做?

mainwindow.h

class MainWindow : public QMainWindow {
    Q_OBJECT
private:
    int a;
    int b;
    Spreadsheet *spreadsheet;

public:
    void set_a(int);
    void set_b(int);

spreadsheet.h

class Spreadsheet : public QTableWidget {
    Q_OBJECT

public:
    Spreadsheet(QWidget *parent = 0);

atm我定义了这样的电子表格:

spreadsheet = new Spreadsheet(this);

我想从spreadsheet.cpp ...

访问set_a()

2 个答案:

答案 0 :(得分:10)

您应该考虑不同的设计,紧密耦合您的代码。

可能类似以下......

class Spreadsheet : public QTableWidget
{
    Q_OBJECT

signals:
    void aValueChanged(int value);
    void bValueChanged(int value);

public:
    void doSomething()
    {
        emit aValueChanged(100);
    }
};

class MainWindow : public QMainWindow
{
public:
    MainWindow() :
        a(0),
        b(0)
    {
        connect(&spreadsheet, SIGNAL(aValueChanged(int)), this, SLOT(setA(int)));
        connect(&spreadsheet, SIGNAL(bValueChanged(int)), this, SLOT(setB(int)));

        spreadsheet.doSomething();
    }

slots:
    void setA(int value) { a = value; }
    void setB(int value) { b = value; }

private:
    Spreadsheet spreadsheet;
    int a;
    int b;
};

这是完全未经测试但会给你一个想法。

答案 1 :(得分:2)

您可以使用parent()对象中的Spreadsheet方法获取指向MainWindow的指针。

例如,

// spreadsheet.cpp
MainWindow* mainWindow = (MainWindow*) this->parent();
mainWindow->set_a(123);

当然,传递给Spreadsheet的构造函数的父对象应该是你的MainWindow实例才能使用。

然而,您应该认真考虑oscode's suggestion,因为它还指向您创建更像Qt的API。