Передайте объект QImage между методами класса

У меня есть две функции. В одной функции у меня есть QImage а затем я хочу передать этот QImage к другой функции. Обе функции имеют разные аргументы. Пожалуйста, скажите мне, как я могу это сделать?

CMakeLists.txt

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

rosbuild_init()# Qt #####################################################
find_package(Qt4 REQUIRED)

set( QT_USE_QTGUI TRUE )

include(${QT_USE_FILE})add_definitions (-DQT_NO_KEYWORDS)

# All source files
set(SELECTION_INTERFACE_SOURCE_CPP
src/SelectionInterface.cpp)

# All header files that use Qt Keywords (e.g. OBJECT)
set(SELECTION_INTERFACE_MOC_H
src/SelectionInterface.h

)

# Wrap for MOC
qt4_wrap_ui (SELECTION_INTERFACE_UI_H ${SELECTION_INTERFACE_UI})
qt4_wrap_cpp(SELECTION_INTERFACE_MOC ${SELECTION_INTERFACE_MOC_H})

rosbuild_add_library (selection_interface_lib
${SELECTION_INTERFACE_SOURCE_CPP}
${SELECTION_INTERFACE_MOC})#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

rosbuild_add_executable(newtest_node src/SelectionInterface.cpp)
target_link_libraries (newtest_node selection_interface_lib ${QT_LIBRARIES})

Makefile

include $(shell rospack find mk)/cmake.mk

манифест

<package>
<description brief="newTestCode">

newTestCode

</description>
<author>admin</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url>http://ros.org/wiki/newTestCode</url>
<depend package="roscpp"/>
<depend package="sensor_msgs"/>
<depend package="std_msgs"/>

</package>

SelectionInterface.h

#ifndef SELECTION_INTERFACE_H
#define SELECTION_INTERFACE_H

#include <QApplication>
#include <QtGui/QWidget>
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QMainWindow>
#include <QDebug>
#include <QLabel>
#include <QGraphicsPixmapItem>

class Image:public QMainWindow
{
Q_OBJECT

public:

void getImage();
void displayImage();
QImage tempImage;
};
#endif

SelectionInterface.cpp

#include "SelectionInterface.h"
void Image::getImage()
{
QImage myImage("/home/usr/Pictures/image.jpg");

qDebug() << myImage.height();

tempImage= myImage.copy();

}

void Image::displayImage()
{
QImage finalImage = tempImage;

qDebug()<<finalImage.height();
}int main (int argc, char** argv)
{
QApplication app(argc, argv);

Image object;
object.getImage();
object.displayImage();
object.show();

return app.exec();
}

4

Решение

Прежде всего, лучше использовать термин методы скорее, чем функции, потому что это члены класса, и вы найдете большинство людей, называющих эти методы там А именно, это члены вашего класса Image.

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

ученик

#include <QApplication>
#include <QMainWindow>
#include <QImage>
#include <QDebug>

class Image : public QMainWindow
{
Q_OBJECT

public:

void getImage() {
QImage myImage("/home/lpapp/Downloads/android.png");
qDebug() << myImage.height();
tempImage= myImage.copy();
}

void displayImage() {
QImage finalImage = tempImage;
qDebug() << finalImage.height();
}

private:
QImage tempImage;
};

#include "main.moc"
int main (int argc, char** argv)
{
QApplication app(argc, argv);

Image object;
object.getImage();
object.displayImage();
object.show();

return app.exec();
}

Это должно распечатать ту же высоту, чтобы сделать очень быструю проверку. Вы можете найти команду ниже, в моей системе, о том, как создать и запустить этот код. Вам нужно сгенерировать файл moc, а затем предоставить пути для включения и библиотеки для сборки, а затем, наконец, запустить приложение.

moc-qt5 -o main.moc main.cpp && g ++ -I / usr / include / qt / QtWidgets -I / usr / include / qt / QtGui -I / usr / include / qt / QtCore -I / usr / include / qt -fPIC -lQt5Core -lQt5Widgets -lQt5Gui main.cpp && ./a.out

Выход:

900
900

Хотя, в зависимости от вашего варианта использования, копирования при записи (COW) может быть недостаточно, и вы захотите использовать элемент указателя, чтобы избежать дорогостоящей операции.

Документацию можно найти Вот для метода копирования; по умолчанию будет скопировано целое, если вы не укажете подобласть.

Вы также можете использовать статическую переменную внутри того же файла, который вы установили в методе 1, и получить доступ в методе 2. Обратите внимание, что вы должны определить статическую переменную, в этом случае, вне класса, чтобы получить другой подход. Это, вероятно, используется реже, чем ученик, поэтому я бы предпочел это.

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

Вы также всегда можете использовать QPainter, чтобы нарисовать «источник» в «место назначения» с помощью drawImage ().

12

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]