Pass a QImage object between class methods

I have two functions. In one function, I have a QImage , and then I want to pass this QImage to another function. Both functions have different arguments. Please tell me how can I do this?

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 (eg 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 

manifest

 <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
source share
1 answer

First of all, it is better to use the term β€œmethods” rather than functions, because these are members of the class, and you will find that most people call these methods there. Namely, these are members of your Image class.

You can use a member variable for it inside the Image class, which is available both inside the first method and in the second.

class member

 #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(); } 

This should print the same height to make a very quick check. You can find the command below on my system on how to create and run this code. You need to generate the moc file, and then provide the included paths and libraries for the assembly, and then finally launch the application.

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

Output:

 900 900 

Although depending on your use case, copy-to-write (COW) might not be enough, and you might want to use a pointer element to avoid an expensive operation.

Documentation can be found here for the copy method; it will copy the default integer if you do not specify a sub-scope.

You can also use a static variable in the same file that you set in method 1 and access it in method 2. Note: in this case, you must define a static class outside the class to get a different approach. This is probably less commonly used than a class member, so I would prefer that.

Perhaps you can also set the image to an external class or variable, and then access it. It all depends on your particular case. This is a broad question.

You can always use QPainter to draw the "source" in the "destination" using drawImage ().

+11
source

Source: https://habr.com/ru/post/1501097/


All Articles