Другое С/С++ Вопрос - Ответ

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Digger Man52

52NGG
1,097
983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как в Qt5 реализовать множественное наследование от двух классов QObject, оба из которых имеют свои сигналы и слоты, и при этом избежать проблем с дублированием метаобъектов и конфликтами имен в сигналах и слотах?
Просто каждый QObject имеет свой метаобъект, и при наследовании от двух классов будут созданы два металбъекта с теми же именами сигналов и слотов, как избавится от такого конфликта имен?
одно из моих предположений это использовать вирт наследование, и вручную опиеделять методы qt_metacall() , qt_metacast(), metaObject() в классе потомке для правильной организации метаобъектов, но может есть другие варианты?
 
  • Вау
Реакции: вайега52

Basedbounty

Известный
198
118
Как в imgui на с++ сделать кнопку start, и кнопку stop, если нажать на кнопку start - бесконечно будет в консоль выводится какой либо текст, но если нажать кнопку stop - вывод текста в консоль прекратится, нажму опять на start - опять начнется вывод текста, нажму опять на stop - вывод текста в консоль прекратится. Заранее спасибо!
 

Digger Man52

52NGG
1,097
983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как в imgui на с++ сделать кнопку start, и кнопку stop, если нажать на кнопку start - бесконечно будет в консоль выводится какой либо текст, но если нажать кнопку stop - вывод текста в консоль прекратится, нажму опять на start - опять начнется вывод текста, нажму опять на stop - вывод текста в консоль прекратится. Заранее спасибо!
C++:
bool running = false;

void RenderUI()
{
    if (!running && ImGui::Button("Start"))
    {
        running = true;
        printf("Вывод текста.\n");
    }
    if (running && ImGui::Button("Stop"))
    {
        running = false;
        printf("Конец вывода текста.\n");
    }
}
и в твое окно, после ImGui::NewFrame();
C++:
ImGui::NewFrame();
RenderUI();
ImGui::Render();
 
  • Нравится
Реакции: Basedbounty

Basedbounty

Известный
198
118
C++:
bool running = false;

void RenderUI()
{
    if (!running && ImGui::Button("Start"))
    {
        running = true;
        printf("Вывод текста.\n");
    }
    if (running && ImGui::Button("Stop"))
    {
        running = false;
        printf("Конец вывода текста.\n");
    }
}
и в твое окно, после ImGui::NewFrame();
C++:
ImGui::NewFrame();
RenderUI();
ImGui::Render();
спасибо за ответ! но у меня не выходит, я буду рад если ты попробуешь это добавить в исходник имгуи, и поделится конечным результатом, сам исходник меню одного из ютуберов - https://github.com/cazzwastaken/borderless-imgui-window
 

Digger Man52

52NGG
1,097
983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
спасибо за ответ! но у меня не выходит, я буду рад если ты попробуешь это добавить в исходник имгуи, и поделится конечным результатом, сам исходник меню одного из ютуберов - https://github.com/cazzwastaken/borderless-imgui-window
остальной код без изменений
C++:
bool running = false;
void gui::Render() noexcept
{
 ImGui::SetNextWindowPos({ 0, 0 });
 ImGui::SetNextWindowSize({ WIDTH, HEIGHT });
 ImGui::Begin(
  " ",
  &isRunning,
  ImGuiWindowFlagsNoResize |
  ImGuiWindowFlagsNoSavedSettings |
  ImGuiWindowFlagsNoCollapse |
  ImGuiWindowFlagsNoMove
 );


 

 if (!running && ImGui::Button("Start"))
 {
     running = true;
     printf("Вывод текста.\n");
 }
 if (running && ImGui::Button("Stop"))
 {
     running = false;
     printf("Конец вывода текста.\n");
 }

 if (running) // будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр
 {
     printf("Текст в цикле.\n");
 }

 ImGui::End();
 ImGui::NewFrame();
 ImGui::Render();
}
 
  • Нравится
Реакции: Basedbounty

Basedbounty

Известный
198
118
остальной код без изменений
C++:
bool running = false;
void gui::Render() noexcept
{
 ImGui::SetNextWindowPos({ 0, 0 });
 ImGui::SetNextWindowSize({ WIDTH, HEIGHT });
 ImGui::Begin(
  " ",
  &isRunning,
  ImGuiWindowFlagsNoResize |
  ImGuiWindowFlagsNoSavedSettings |
  ImGuiWindowFlagsNoCollapse |
  ImGuiWindowFlagsNoMove
 );


 

 if (!running && ImGui::Button("Start"))
 {
     running = true;
     printf("Вывод текста.\n");
 }
 if (running && ImGui::Button("Stop"))
 {
     running = false;
     printf("Конец вывода текста.\n");
 }

 if (running) // будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр
 {
     printf("Текст в цикле.\n");
 }

 ImGui::End();
 ImGui::NewFrame();
 ImGui::Render();
}
после запуска кода - меню без всего, это просто черный прямоугольник, но если я уберу строчки " ImGui::NewFrame();
ImGui::Render();" - меню уже будет с функциями, но если я нажму кнопку start - код воспроизведется как нужно, но я не могу нажать на кнопку stop. Вот скриншот того что происходит после кнопки start
xGjV56UWtBc.jpg
 

ARMOR

Я креветка
Модератор
5,066
7,398
При инклуде d3d9.h к проекту в котором используется SAMP-API сразу летят ошибки от rpcnsip.h и rpcndr.h:
Знімок екрана 2023-10-30 163158.png


Знает ли кто какова причина этих ошибок, и есть ли возможность их пофиксить?
 
  • Нравится
Реакции: Z3roKwq

Basedbounty

Известный
198
118
Всем привет! я хочу спросить о моей проблеме в imgui на c++. Суть проблемы такова - У меня имеется две кнопки - start, stop. Start отвечает за начало цикла, а stop заканчивает его. Код в цикле который выполняется при кнопке Stop вызывает у меня проблему, если мне надо в коде того цикла заморозить функцию через Sleep - замораживается все imgui, и соответственно я не могу нажать на кнопку stop. Если что-либо не понятно - могу рассказать более подробно. Кусок кода ниже.
с++:
bool running = false;

void gui::Render() noexcept

{

ImGui::SetNextWindowPos({ 0, 0 });

ImGui::SetNextWindowSize({ WIDTH, HEIGHT });

ImGui::Begin(

"test",

&isRunning,

ImGuiWindowFlags_NoResize |

ImGuiWindowFlags_NoSavedSettings |

ImGuiWindowFlags_NoCollapse |

ImGuiWindowFlags_NoMove

);



if (!running && ImGui::Button("Start"))

{

running = true;

printf("Начало вывода текста.\n");

}

if (running && ImGui::Button("Stop"))

{

running = false;

printf("Конец вывода текста.\n");

}



if (running) // будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр

{

printf("Тут и происходит тот самый цикл после кнопки start");

Sleep(5000);

}



ImGui::End();

ImGui::Render();

}
Пока 5 секунд в цикле не пройдут, я не могу нажать на stop, но и тут проблема, у меня есть доля секунды пока опять начнется цикл, и мне надо ожидать 5 секунд.
 

Digger Man52

52NGG
1,097
983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет! я хочу спросить о моей проблеме в imgui на c++. Суть проблемы такова - У меня имеется две кнопки - start, stop. Start отвечает за начало цикла, а stop заканчивает его. Код в цикле который выполняется при кнопке Stop вызывает у меня проблему, если мне надо в коде того цикла заморозить функцию через Sleep - замораживается все imgui, и соответственно я не могу нажать на кнопку stop. Если что-либо не понятно - могу рассказать более подробно. Кусок кода ниже.
с++:
bool running = false;

void gui::Render() noexcept

{

ImGui::SetNextWindowPos({ 0, 0 });

ImGui::SetNextWindowSize({ WIDTH, HEIGHT });

ImGui::Begin(

"test",

&isRunning,

ImGuiWindowFlags_NoResize |

ImGuiWindowFlags_NoSavedSettings |

ImGuiWindowFlags_NoCollapse |

ImGuiWindowFlags_NoMove

);



if (!running && ImGui::Button("Start"))

{

running = true;

printf("Начало вывода текста.\n");

}

if (running && ImGui::Button("Stop"))

{

running = false;

printf("Конец вывода текста.\n");

}



if (running) // будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр

{

printf("Тут и происходит тот самый цикл после кнопки start");

Sleep(5000);

}



ImGui::End();

ImGui::Render();

}
Пока 5 секунд в цикле не пройдут, я не могу нажать на stop, но и тут проблема, у меня есть доля секунды пока опять начнется цикл, и мне надо ожидать 5 секунд.
C++:
bool running = false;
std::thread additionalThread; 

void StartAdditionalThread()
{
    additionalThread = std::thread(()
    {
        while (running)
        {
            printf("Start\n");

            std::thisthread::sleepfor(std::chrono::milliseconds(5000));
        }
    });
}

void StopAdditionalThread()
{
    if (additionalThread.joinable())
    {
        running = false;
        additionalThread.join();
    }
}

void gui::Render() noexcept
{
    ImGui::SetNextWindowPos({ 0, 0 });
    ImGui::SetNextWindowSize({ WIDTH, HEIGHT });
    ImGui::Begin(
        "test",
        &isRunning,
        ImGuiWindowFlagsNoResize |
        ImGuiWindowFlagsNoSavedSettings |
        ImGuiWindowFlagsNoCollapse |
        ImGuiWindowFlagsNoMove
    );

    if (!running && ImGui::Button("Start"))
    {
        running = true;
        printf("Начало вывода текста.\n");
        
        StartAdditionalThread();
    }

    if (running && ImGui::Button("Stop"))
    {
        running = false;
        printf("Конец вывода текста.\n");
        
        StopAdditionalThread();
    }

    ImGui::End();
    ImGui::Render();
}

#include <thread> не забудь
 
  • Нравится
Реакции: Basedbounty

Basedbounty

Известный
198
118
C++:
bool running = false;
std::thread additionalThread;

void StartAdditionalThread()
{
    additionalThread = std::thread(()
    {
        while (running)
        {
            printf("Start\n");

            std::thisthread::sleepfor(std::chrono::milliseconds(5000));
        }
    });
}

void StopAdditionalThread()
{
    if (additionalThread.joinable())
    {
        running = false;
        additionalThread.join();
    }
}

void gui::Render() noexcept
{
    ImGui::SetNextWindowPos({ 0, 0 });
    ImGui::SetNextWindowSize({ WIDTH, HEIGHT });
    ImGui::Begin(
        "test",
        &isRunning,
        ImGuiWindowFlagsNoResize |
        ImGuiWindowFlagsNoSavedSettings |
        ImGuiWindowFlagsNoCollapse |
        ImGuiWindowFlagsNoMove
    );

    if (!running && ImGui::Button("Start"))
    {
        running = true;
        printf("Начало вывода текста.\n");
      
        StartAdditionalThread();
    }

    if (running && ImGui::Button("Stop"))
    {
        running = false;
        printf("Конец вывода текста.\n");
      
        StopAdditionalThread();
    }

    ImGui::End();
    ImGui::Render();
}

#include <thread> не забудь
В этом имгуи я писал https://drive.google.com/file/d/14YBCAqpSlPzmXeAnPSWe4E6Hlhu4fsIl/view
 

Вложения

  • 9qwii82Qaxw.png
    9qwii82Qaxw.png
    30.6 KB · Просмотры: 46
  • cG2eZf0bfOo.png
    cG2eZf0bfOo.png
    47.5 KB · Просмотры: 45

Digger Man52

52NGG
1,097
983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Basedbounty

Известный
198
118
как мне сделать функцию StartAdditionalThread в отдельном файле. Чтобы при кнопке start вызывалась эта функция из другого файла
 

Digger Man52

52NGG
1,097
983
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как мне сделать функцию StartAdditionalThread в отдельном файле. Чтобы при кнопке start вызывалась эта функция из другого файла
создаешь другой файл, вообще поебать какое расширение(принято .h), назовем его допустим hui.lol потом #include "hui.lol" в основном файле, и прописываешь реализацию функции в hui.lol, потом вызываешь функцию
 
  • Нравится
Реакции: Basedbounty

Basedbounty

Известный
198
118
C++:
void func1(){
    std::cout « "func1";
}

void func2(){
    std::cout « "func2";
}

int main() {
    while(true) {
        func1;
        func2;
    }
    return 0;
}
- как вы видите у меня есть две функции, и третия основая, в которой я вызываю две эти функции, как мне в главной функции сделать что при вызове func1 - замараживалось на определенное время, но func2 продалжала работать, после разморозки функции func1, происходил код из func1, а потом опять замораживался, но func2 продалжал работу