如何使用QT实现OOP

kay*_*cee 1 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);
Run Code Online (Sandbox Code Playgroud)

spreadsheet.h

class Spreadsheet : public QTableWidget {
    Q_OBJECT

public:
    Spreadsheet(QWidget *parent = 0);
Run Code Online (Sandbox Code Playgroud)

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

spreadsheet = new Spreadsheet(this);
Run Code Online (Sandbox Code Playgroud)

我想从spreadsheet.cpp访问set_a()...

小智 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;
};
Run Code Online (Sandbox Code Playgroud)

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