Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
41 / 32 / 12
Регистрация: 15.04.2013
Сообщений: 389

Из Qt в Visual C++

15.02.2022, 16:34. Показов 1837. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот здесь спрашивала про тип проекта Какой тип проекта выбрать? . С этим разобралась, там посоветовали добавить расширение для Qt, но суть в том, что данное решение не подходит, т.к. надо полностью отойти от Qt и переписать на Visual C++, а у меня с этим проблемы.
Синтаксис, всякие определения и т.п. я ещё могу найти, изучить и как то сделать. Но что делать с тем, что в Qt использовались сигнала и слоты, а в Visual'е этого нет?

Вот к примеру определение класса:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class EventThread:public QThread
{
Q_OBJECT
public:
    explicit EventThread() {
        h = NULL;
        drvHandle = NULL;
        stop = true;
    }
    bool setName(QString name) {
        h = OpenEventW(SYNCHRONIZE,false,name.toStdWString().data());
        if (h != NULL) {
            stop = false;
            return true;
        } else return false;
    }
    void closeEvent() {
        CloseHandle(h);
        h = NULL;
    }
protected:
    void run() override {
        while (!stop) {
            if (WaitForSingleObject(h, 100) == WAIT_OBJECT_0) emit interrupt();          
        }
    }
signals:
    void interrupt();
 
public Q_SLOTS:
    void quit() {
        stop = true;
    }
private:
    HANDLE h;
    HANDLE drvHandle;
    bool stop;
};
Как это переделать правильно на Visual С++?

Попыталась так сделать:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class EventThread :public thread
{    
private:
    HANDLE h;
    HANDLE drvHandle;
    bool stop;
 
public:
    explicit EventThread() {
        h = NULL;
        drvHandle = NULL;
        stop = true;
    }
    bool setName(wstring name) {
 
        LPCWSTR pcwstr;        
        pcwstr = name.c_str();
 
        h = OpenEventW(SYNCHRONIZE, false, pcwstr);
        if (h != NULL) {
            stop = false;
            return true;
        }
        else return false;
    }
    void closeEvent() {
        CloseHandle(h);
        h = NULL;
    }
 
    void interrupt();
 
    void quit() {
        stop = true;
    }
 
protected:
    void run() override {
        while (!stop) {
            if (WaitForSingleObject(h, 100) == WAIT_OBJECT_0) interrupt();
            //QueryPerformanceCounter()
            //QueryPerformanceFrequency()
        }
    }
Но
C++ (Qt)
1
 void interrupt();
подчеркнуто волнистой зеленой линией, а в строке
C++ (Qt)
1
void run() override
run подчеркнуто красным...
Понемногу начинается истерика, что я с этим не справлюсь
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2022, 16:34
Ответы с готовыми решениями:

Какую среду программирования лучше выбрать для обучения языку C++ ? Visual Studio,Visual Basic или Visual C++?
И напишите,чем рекомендуемая вами среда программирования лучше других? Насколько я понял из Википедии они все поддерживают язык...

Установка C++ Redistributable Visual Studio 2017 и Visual C++ для Visual Studio 2015
Доброго дня. Пытаюсь изучить PHP. Решил установить сервер локальный. В инструкции сказано: "Ещё нам нужен файл C++...

Visual Studio 2017 & Visual Basic vs WebRequest (Веб запрос)
Эта конструкция работает, создает и получает ответ с web сервера, вопрос как быть убежденным в том, что этот запрос имеет ssl шифрование?...

4
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,119
15.02.2022, 18:15
Aline_u, сигналы и слоты - это фишка QT. При отказе от QT придётся пересмотреть механизмы взаимодействия между различными объектами и потоками.

Прежде чем дать вам совет по реализации, не могли бы вы уточнить задачу, которую пытаетесь решить?
Похоже, что вы хотите запустить поток, который будет раз в 100 мс вызывать нужную вам функцию.
Но что будет внутри этой функции?
Действительно ли вам нужен поток?
Если вы делаете оконное приложение, то может будет достаточно таймера?
1
41 / 32 / 12
Регистрация: 15.04.2013
Сообщений: 389
15.02.2022, 21:43  [ТС]
Ygg, возможно Вы правы. Там будет обращение к драйверу платы. Плату разработали у нас и будут запускаться какие то тестовые режимы.
Завтра поговорю с парнем, который писал этот драйвер и программу на Qt. Скорее всего это можно решить через таймер.
0
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,119
16.02.2022, 13:00
Aline_u, примерная реализация потока без QT по вашему образцу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include "stdafx.h"
#include "Windows.h"
#include <iostream>
#include <thread>
 
//-------------------------------------------------------------------------------------------------
class DriverReader
{
protected:
    HANDLE m_hEvent = 0;
 
public:
    virtual ~DriverReader()
    {
        if (m_hEvent)
            CloseHandle(m_hEvent);
    }
 
    bool InitEvent(const wchar_t* name)
    {
        if (m_hEvent)
            CloseHandle(m_hEvent);
 
        m_hEvent = OpenEventW(SYNCHRONIZE, false, name);
        if (!m_hEvent)
            return false;
 
        return true;
    }
 
    bool WaitEvent(DWORD dwTimeout)
    {
        if (WaitForSingleObject(m_hEvent, dwTimeout) == WAIT_OBJECT_0)
            return true;
 
        return false;
    }
 
    void OnTimeout()
    {
        std::cout << " OnTimeout\n";
    }
 
    void OnSignal()
    {
        std::cout << " OnSignal\n";
    }
};
 
//-------------------------------------------------------------------------------------------------
// реализация потока средствами C++
//-------------------------------------------------------------------------------------------------
class StdThread : public DriverReader
{
protected:
    std::thread m_thread;
    bool m_terminate = true;
 
public:
    ~StdThread()
    {
        Stop();
    }
 
    bool Start()
    {
        Stop();
 
        if (!m_hEvent)
            return false;
 
        m_terminate = false;
 
        m_thread = std::thread(&StdThread::Thread, this);
 
        return true;
    }
 
    void Stop()
    {
        if (m_thread.joinable())
        {
            m_terminate = true;
 
            m_thread.join();
        }
    }
 
protected:
    void Thread()
    {
        while (!m_terminate)
        {
            if (WaitEvent(100))
            {
                OnSignal();
            }
            else
            {
                OnTimeout();
            }
        }
    }
};
 
//-------------------------------------------------------------------------------------------------
// реализация потока средствами Windows
//-------------------------------------------------------------------------------------------------
class WinThread : public DriverReader
{
protected:
    HANDLE m_thread = 0;
    bool m_terminate = true;
 
public:
    ~WinThread()
    {
        Stop();
    }
 
    bool Start()
    {
        Stop();
 
        if (!m_hEvent)
            return false;
 
        m_terminate = false;
 
        DWORD id;
        m_thread = CreateThread(0, 0, Thread, this, 0, &id);
        if (!m_thread)
            return false;
 
        return true;
    }
 
    void Stop()
    {
        if (m_thread)
        {
            m_terminate = true;
 
            WaitForSingleObject(m_thread, INFINITE);
            CloseHandle(m_thread);
            m_thread = 0;
        }
    }
 
protected:
    static DWORD WINAPI Thread(LPVOID ptr)
    {
        return ((WinThread*)ptr)->Thread();
    }
 
    DWORD WINAPI Thread()
    {
        while (!m_terminate)
        {
            if (WaitEvent(100))
            {
                OnSignal();
            }
            else
            {
                OnTimeout();
            }
        }
 
        return 0;
    }
};
 
//-------------------------------------------------------------------------------------------------
int main()
{
    const wchar_t* eventName = L"MyEventName";
 
    HANDLE hEvent = CreateEventW(0, FALSE, FALSE, eventName);
 
    {
        std::cout << "StdThread\n";
        StdThread stdThread;
        stdThread.InitEvent(eventName);
        stdThread.Start();
        Sleep(500);
        SetEvent(hEvent);
        Sleep(500);
        stdThread.Stop();
    }
 
    {
        std::cout << "WinThread\n";
        WinThread winThread;
        winThread.InitEvent(eventName);
        winThread.Start();
        Sleep(500);
        SetEvent(hEvent);
        Sleep(500);
        winThread.Stop();
    }
 
    return 0;
}
1
41 / 32 / 12
Регистрация: 15.04.2013
Сообщений: 389
16.02.2022, 13:08  [ТС]
Ygg, спасибо! буду разбираться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2022, 13:08
Помогаю со студенческими работами здесь

Возникает ошибка при установке Visual C++ Redistributable for Visual Studio 2015
При установке visual c++ redistributable for visual studio 2015 возникает вот такая вот ошибка. Гугление положительного результата не...

Использование библиотеки lib в Compaq Visual Fortran и Microsoft Visual Studio
Здравствуйте Всем! Подскажите как решить проблему с подключением dll библиотеки, содержащей С+ подпрограмму, к проекту на Compaq VF? ...

Куплю пакеты разработчика Visual Studio, Visual Basic, Delphi 7 Enterprise
Пакеты разработчика Microsoft Visual Studio 6.0 Professional Edition, Microsoft Visual Basic 6.0, Delphi 7 Enterprise. тел....

Перенос программы с Visual Basic 6.0 на Visual Studio 2010 (Метод итераций)
Здравствуйте, прошу вас о помощи для переноса программы, которая реализует &quot;Метод итераций&quot; с Visual Basic 6.0 на Visual Studio 2010 ...

Microsoft Visual Studio Ultimate 2013 + Intel Visual Fortran Compiler
Какой Microsoft Visual Studio и какой Visual Fortran надо установить на Windows 7 Максимальная? С Microsoft Visual Studio Ultimate 2013 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru