Фактически я пишу приложение C++/CX для универсальной платформы Windows. Я пытаюсь передать класс с разными переменными, которые не являются частью Windows Runtime (например, cv :: detail :: WaveCorrectKind и std :: string) из одного элемента страницы в другой. Непосредственно передать его в метод Navigate, как объект, невозможно. Записывать его во внешний класс и сделать его доступным для других Page-Elements также невозможно, потому что он дает мне некоторые ошибки, когда я пытаюсь использовать некоторые переменные или классы NonWinRT в общедоступном разделе для доступа из других элементов страницы. Вот пример кода того, что я хотел бы иметь.Приложение UWP C++, передающее класс, связанный с OpenCV между страницами
заголовке Page1:
//Page1.h
// Deklaration der Page1-Klasse
#pragma once
#include "Page1.g.h"
#include "Bibliothek.h"
namespace eigeneApp
{
[Windows::Foundation::Metadata::WebHostHidden]
public ref class Page1 sealed
{
public:
Page1();
protected:
//Navigations Events
virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
virtual void OnNavigatingFrom(Windows::UI::Xaml::Navigation::NavigatingCancelEventArgs^ e) override;
private:
//Buttons Begin
void toPage2Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
//some other Buttonevents for capturing Photos and back to mainpage
//Buttons Ende
//A OpenCV related Element out of the Bibliothek.h
bibitem bibitemElement;
//Tasks that handle some stuff out of Bibliothek.h (photo processing) and capturing the photos asynchronous
// String Helper for Converting Platform::String to std::string and back
};
}
СРР-файл Page1:
//
// Page1.xaml.cpp
// Implementing Page1-Klasse
//
#include "pch.h"
#include "Page1.xaml.h"
#include "Page2.xaml.h"
//other includes for asynch programming, Strings and so on...
#include "Bibliothek.h"
#include "opencv2\opencv.hpp"
#include "opencv2\imgproc.hpp"
#include "App.xaml.h"
using namespace eigeneApp;//and other using namespaces
Page1::Page1()
{
InitializeComponent();
}
//Buttons Start
void eigeneApp::Page1::toPage2Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this]() {
this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(Page2::typeid),bibitemElement);
}));
}
// other Button-functions are also here, but not relevant
//Tasks and the NavigationEvents are handled here and the String Helpers
Насколько я знаю Bibliothek.h содержит класс (bibitem) с OpenCV связанных функций , Невозможно опубликовать Кодекс Библиотеки.h. Но я также попытался передать cv :: Mat между страницами, это не сработало.
Я также попытался написать класс, содержащий статический библейт, и попытался использовать их в Page1 и Page2, чтобы получить содержимое с Страница1 на страницу2. Вот код:
#pragma once
#include "Bibliothek.h"
//NavigationData.h
class NavigationData
{
public:
static bibitem passingbibitem;
};
И:
//NavigationData.cpp
#include "NavigationData.h"
#include "pch.h"
bibitem NavigationData::passingbibitem;
Затем я добавил NavigationData элемент для каждой из страниц приватной секции и пытались использовать их. Проходящие бибитем-функции можно было использовать на странице, но по мере того, как я нахожусь в Data of passbibitem, пусто. Таким образом, мой статический остается тем же самым, что и у вас ...
Есть ли какие-либо способы передачи не WinRT-классов и переменных между страницами? И может кто-нибудь, пожалуйста, дайте мне пример того, как это сделать?
Я забыл функцию, которая устанавливающее bibitem-данные по умолчанию значения в моем OnNavigatingFrom-обработчиком. Теперь он работает с статическим элементом в отдельном классе. Но если кто-то знает какой-либо другой способ передавая данные, вы можете разместить его здесь
C++/CX является надмножеством C++. Просто передайте свои объекты, как если бы вы проходили вокруг любого другого объекта C++. Если вы хотите по-настоящему представить себя, заверните их в класс 'ref' и получите бесплатное управление ресурсами. Но без кода мы не можем помочь. – IInspectable