访问类外部
Accessing Outside of a class
我正在尝试访问类之外的QgraphicsView的场景。当我创建一个从QGraohicsView派生的类时,我通常可以这样做,但这个类是从QMainWIndow派生的MainWindow,我可以让它扩展QGraphicsView,因为当你调用.show()方法时会发生冲突,因为编译器不知道该选择哪一个。
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{}
因此,我创建了一个QgraphicsView的新实例并将其公开,还创建了Qgraphicsscene并将其公布。
然后在外部类
extern MainWindow * mainwindow
但是当我尝试访问它时,我得到了一个未定义的引用错误。
mainwindow->view->scene()->addItem(item); or
mainwindow->mainwindow.scene->addItem(item);
他们两个都不工作。我知道它破坏了封装,但在这种特殊情况下,没有其他方法可以解决这个问题。
**我想做的是在类之外访问QgraphicsView的场景?
**MainWindow具有公共变量
QGraphicsScene *scene;
QGraphicsView * view;
在MainWindow.cpp 中
scene = new QGraphicsScene(this);
view = new QGraphicsView(scene);
view.show();
这对我很有效。由于view
在您的情况下是一个指针,您必须通过->
而不是.
访问其成员。但所有这些都是多余的——你应该尽可能多地按值存储所有内容,并让编译器担心确保在不再需要时释放资源。这就是为什么你使用C++,而不是C。
// https://github.com/KubaO/stackoverflown/tree/master/questions/simple-view-33508582
#include <QtWidgets>
class MainWindow : public QMainWindow {
Q_OBJECT
QGraphicsScene m_scene;
QWidget m_central;
QGraphicsView m_view; // must be declared after m_central per C++ semantics
QGridLayout m_layout;
public:
MainWindow(QWidget * parent = 0) :
QMainWindow(parent),
m_layout(&m_central) {
setCentralWidget(&m_central);
m_layout.addWidget(&m_view, 0, 0);
m_view.setScene(&m_scene);
}
QGraphicsScene * scene() { return &m_scene; }
QGraphicsView * view() { return &m_view; }
};
int main(int argc, char ** argv) {
QApplication app(argc, argv);
MainWindow win;
win.scene()->addEllipse(0, 0, 10, 10);
win.show();
return app.exec();
}
#include "main.moc"
您还应该决定是否需要QMainWindow
。仅仅因为Qt Creator模板使用了它,并不意味着你也应该盲目地使用它。如果您不使用QMainWindow's
停靠区功能,那么QDialog
将是一个更明智的基类:
// https://github.com/KubaO/stackoverflown/tree/master/questions/simple-view-33508582
#include <QtWidgets>
class MainWindow : public QDialog {
Q_OBJECT
QGraphicsScene m_scene;
QGraphicsView m_view;
QGridLayout m_layout;
public:
MainWindow(QWidget * parent = 0) :
QDialog(parent),
m_layout(this) {
m_layout.addWidget(&m_view, 0, 0);
m_view.setScene(&m_scene);
}
QGraphicsScene * scene() { return &m_scene; }
QGraphicsView * view() { return &m_view; }
};
int main(int argc, char ** argv) {
QApplication app(argc, argv);
MainWindow win;
win.scene()->addEllipse(0, 0, 10, 10);
win.show();
return app.exec();
}
#include "main.moc"
相关文章:
- 如何在函数外部访问函数中局部变量的值?
- C++使用其他命名空间中的符号,而不使它们可从外部访问
- 同一变量的cout,但在课内或外部访问时输出不同
- 如何使结构内部的可变参数模板可以在外部访问?
- 我可以从__asm块外部访问__asm变量吗?
- 从类外部访问小部件
- 如何从窗口功能外部访问wm_command
- C++ 如何从 main() 外部访问在 main() 中初始化的对象
- 为什么我可以在C++从外部访问私人方法
- 调用外部访问器函数时出错
- 从外部访问静态成员并通过继承 c++ 访问静态成员
- 从类外部访问链表私有变量
- C++ - 从类外部访问类的私有成员
- 从类外部访问专用虚拟函数
- 在自由函数中定义的类型,可通过自动外部访问.语言错误或功能
- RootViewController 在其委托外部访问时不会添加子视图
- 从c++库外部访问静态时出现问题
- 外部"C"访问代码的函数
- 如何合理设计图书馆的外部访问而不干扰其内部访问
- 从c++类外部访问私有静态方法