std::wstring
для username
. А вместо экранирования можно либо использовать сырые строки LR"(path\to\file)"
, либо просто писать прямой слэш, а не обратныйL"path/to/file"
. И как правильно уже заметили, используй STL Filesystem. Домашний каталог лучше брать из переменной окружения (environment variable). lib /machine:x64 /def:your_lib.def
или lib /machine:x32 /def:your_lib.def
, после чего выведет сообщение:Creating library your_lib.lib and object your_lib.exp
#include "parent.hpp"
int main()
{
Parent object;
return 0;
}
#ifndef PARENT_HPP
#define PARENT_HPP
#include "child.hpp"
class Parent
{
friend class Child;
private:
Child child{this};
public:
Parent() = default;
~Parent() = default;
private:
void doNothing() const;
};
#endif // PARENT_HPP
#ifndef CHILD_HPP
#define CHILD_HPP
class Parent;
class Child
{
private:
Parent *parent;
public:
Child(Parent *parent);
~Child() = default;
};
#endif // CHILD_HPP
#include "parent.hpp"
#include <iostream>
void Parent::doNothing() const
{
std::clog << "Do nothing!\n" << std::endl;
}
#include "child.hpp"
#include "parent.hpp"
Child::Child(Parent *_parent) : parent(_parent)
{
parent->doNothing();
}
std::set<fs::path>
и заполнить его содержимым, а затем воспользоваться реверсивным итератором std::set
.std::set<fs::path> file_paths;
for (const auto& dir_entry : fs::directory_iterator{"path/to/directory"})
file_paths.insert(dir_entry.path());
auto iter = file_paths.rbegin();
auto end = file_paths.rend();
QVideoFrame
есть метод isMapped()
, который показывает, размещен ли кадр в ОЗУ (или в виртуальной памяти, т.е. находится ли он в адресуемой памяти и можно ли получить к нему доступ). Оказалось что нет.QVideoProbe::videoFrameProbed()
передаёт ссылку на константу QVideoFrame
, а функция QVideoFrame::map()
не константна, то нужно скопировать кадр:void MainWindow::proccessFrame(const QVideoFrame &frame)
{
QVideoFrame replica = frame;
replica.map(QAbstractVideoBuffer::ReadOnly);
std::clog << std::boolalpha << frame.isMapped() << "\n";
std::clog << std::boolalpha << replica.isMapped() << "\n";
QImage image{ replica.bits(), replica.width(),
replica.height(), replica.bytesPerLine(),
QVideoFrame::imageFormatFromPixelFormat(replica.pixelFormat()) };
std::clog << replica.width() << " " << replica.height() << "\n";
std::clog << frame.width() << " " << frame.height() << "\n";
std::clog << image.width() << " " << image.height() << "\n";
std::clog << frame.pixelFormat() << "\n";
std::clog << QVideoFrame::imageFormatFromPixelFormat(frame.pixelFormat()) << "\n";
}
double dpi = QGuiApplication::primaryScreen()->physicalDotsPerInch();
auto pt_to_px = [dpi](double pt) -> double { return pt / 72 * dpi; };
auto px_to_pt = [dpi](double px) -> double { return px * 72 / dpi; };
std::clog << "12 pt is " << pt_to_px(12) << " px" << std::endl;
std::clog << "26 px is " << px_to_pt(26) << " pt" << std::endl;
QFont system_font;
std::clog << "system font size in pt: "
<< system_font.pointSize()
<< "\nsystem font size in px: "
<< pt_to_px(system_font.pointSize()) << std::endl;