这是一个简单的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()答案 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。