如何在 Qt 中访问其他类的对象?
Posted
技术标签:
【中文标题】如何在 Qt 中访问其他类的对象?【英文标题】:How to access other class's object in Qt? 【发布时间】:2017-12-18 03:42:06 【问题描述】:在程序中,我想在主窗口中点击一个按钮,触发子窗口显示图像。但我无法在主 window.cpp 中访问 ui->graphsView,我该怎么做?在 main.cpp 中。假定单击按钮功能可以执行此操作。 QGraphicsView 放在 ShowPic 类中。
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileSystemModel>
#include "showpic.h"
namespace Ui
class MainWindow;
class MainWindow : public QMainWindow
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QFileSystemModel *model;
ShowPic *showpic;
QString filesPath;
;
#endif // MAINWINDOW_H
showpic.h
#ifndef SHOWPIC_H
#define SHOWPIC_H
#include <QWidget>
namespace Ui
class ShowPic;
class ShowPic : public QWidget
Q_OBJECT
public:
explicit ShowPic(QWidget *parent = 0);
~ShowPic();
private:
Ui::ShowPic *ui;
;
#endif // SHOWPIC_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QFileDialog>
#include<QFileSystemModel>
#include<QStringList>
#include <QTreeView>
#include <QGraphicsScene>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
MainWindow::~MainWindow()
delete ui;
void MainWindow::on_pushButton_clicked()
showpic = new ShowPic();
showpic->show();
QGraphicsScene scene;
QPixmap pixmap("C:\test\\image.jpg");
scene.addPixmap(pixmap);
ui->graphicsView->setScene(&scene); ///????
showpic.cpp
#include "showpic.h"
#include "ui_showpic.h"
ShowPic::ShowPic(QWidget *parent) :
QWidget(parent),
ui(new Ui::ShowPic)
ui->setupUi(this);
ShowPic::~ShowPic()
delete ui;
【问题讨论】:
你在哪里创建了graphsView? 我将 graphsView 拖到 ShowPic 窗口中。 不需要从MainWindow访问graphsView,一个简单的解决方法是将pixmap传递给ShowPic,创建一个接收pixmap的方法,并将其添加到ShowPic中的graphsView中。 谢谢。你能演示一下怎么做吗? 试试我的解决方案。 【参考方案1】:第一件事是你只需要添加一次QGraphicsScene,一个合适的地方是在构造函数中:
ShowPic::ShowPic(QWidget *parent) :
QWidget(parent),
ui(new Ui::ShowPic)
ui->setupUi(this);
ui->graphicsView->setScene(new QGraphicsScene);
然后我们创建一个接收像素图并将其添加到场景中的方法:
showpic.h
[...]
explicit ShowPic(QWidget *parent = 0);
~ShowPic();
void addPixmap(const QPixmap &pixmap);
[...]
showpic.h
[...]
void ShowPic::addPixmap(const QPixmap &pixmap)
ui->graphicsView->scene()->addPixmap(pixmap);
[...]
我们在插槽 on_pushButton_clicked 中使用该方法:
void MainWindow::on_pushButton_clicked()
showpic = new ShowPic();
QPixmap pixmap("C:\test\\image.jpg");
showpic->addPixmap(pixmap);
showpic->show();
【讨论】:
以上是关于如何在 Qt 中访问其他类的对象?的主要内容,如果未能解决你的问题,请参考以下文章