как реализовать ООП с использованием QT - PullRequest
1 голос
/ 27 апреля 2010

это простой вопрос ООП 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);

атм. Я определяю электронную таблицу следующим образом:

spreadsheet = new Spreadsheet(this);

и я хотел бы получить доступ к set_a () из spreadsheet.cpp ...

Ответы [ 2 ]

10 голосов
/ 27 апреля 2010

Вы должны рассмотреть другой дизайн, вы тесно связываете свой код.

Может быть, что-то вроде следующего ...

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;
};

Это полностью не проверено, но дает вам представление.

2 голосов
/ 27 апреля 2010

Вы можете использовать метод parent() в объекте Spreadsheet, чтобы получить указатель на ваш MainWindow.

Например,

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

Конечно, родительский объект, переданный конструктору Spreadsheet, должен быть вашим экземпляром MainWindow, чтобы это работало.

Однако , вам следует серьезно рассмотреть предложение oscode , поскольку оно также указывает на создание более похожего на Qt API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...