HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 18.10.2021, 10:26
Andrinall
Постоянный
Регистрация: 11.07.2019
Сообщений: 702
С нами: 3601315

Репутация: 148


По умолчанию

Сразу напишу, что я в с++ пока хлебушек полный, так что палками не бейте сильно)

Есть такой код

C++:





Код:
/* Где-то там в config.h , namespace Config {}; */
bool
button_menu_opened
=
false
;
bool
all_icons_state
=
false
;
float
cSize
[
2
]
=
{
405.0f
,
522.0f
}
;
// если button_menu_opened -> размер окна по X будет равен cSize[0] * 1.75f
union
map_wico
{
bool
status
;
int
index
;
// отвечает не за номер ячейки, а за тип иконки на карте.
char
ru_name
[
66
]
;
char
cat_name
[
35
]
;
// название категории
}
;
map_wico map_win_icons
[
18
]
[
4
]
=
{
// пробовал проставлять u8 около "", но толку от этого нет
{
false
,
1
,
"Бургерные"
,
"Питание"
}
,
{
false
,
2
,
"Фастфуды Cluckin' ( KFC )"
}
,
{
false
,
3
,
"Пиццерии"
}
,
{
false
,
4
,
"Столовые"
}
,
{
false
,
5
,
"Бары/Кабаре"
}
,
{
false
,
6
,
"Гаражи / Базы транспортных компаний"
,
"Гаражи и базы"
}
,
{
false
,
7
,
"Оптовые базы"
}
,
{
false
,
8
,
"Места аренды прицепов"
}
,
{
false
,
9
,
"Автосалоны"
,
"Транспорт"
}
,
{
false
,
10
,
"Автозаправки"
}
,
{
false
,
11
,
"Автомастерские"
}
,
{
false
,
12
,
"Магазины автозапчастей"
}
,
{
false
,
13
,
"Банки"
,
"Государственные"
}
,
{
false
,
14
,
"Места трудоустройства"
}
,
{
false
,
15
,
"Полицейские участки"
}
,
{
false
,
16
,
"Отели"
,
"Отдых и безделушки"
}
,
{
false
,
17
,
"Магазины 24/7"
}
,
{
false
,
18
,
"Магазины одежды"
}
}
;
//
/* present в main.cpp */
// выше есть ещё код, но он нормально работает по нему у меня вопросов нет.
if
(
Config
::
button_menu_opened
)
{
// bool
ImGui
::
SetCursorPos
(
ImVec2
(
Config
::
cSize
[
0
]
,
0.0f
)
)
;
ImGui
::
VerticalSeparator
(
)
;
ImGui
::
SetCursorPos
(
ImVec2
(
Config
::
cSize
[
0
]
+
3.0f
,
Config
::
cSize
[
0
]
/
100.0f
*
6.0f
)
)
;
ImGui
::
BeginChild
(
"##icons_select"
,
ImVec2
(
(
Config
::
cSize
[
0
]
*
1.5f
-
Config
::
cSize
[
0
]
/
1.5f
)
,
492.0f
)
,
false
,
ImGuiWindowFlags_NoScrollbar
)
;
int
res
=
0
;
for
(
int
i
=
0
;
i

status
)
{
res
+=
1
;
}
}
if
(
res
>=
9
)
{
Config
::
all_icons_state
=
true
;
}
else
{
Config
::
all_icons_state
=
false
;
}
ImGui
::
SetCursorPosX
(
ImGui
::
GetCursorPos
(
)
.
x
+
ImGui
::
GetStyle
(
)
.
ItemSpacing
.
x
/
2.0f
)
;
if
(
ImGui
::
Button
(
(
Config
::
all_icons_state
?
"true"
:
"false"
)
,
ImVec2
(
(
Config
::
cSize
[
0
]
*
1.5f
-
Config
::
cSize
[
0
]
/
1.5f
)
-
48.5f
,
0.0f
)
)
)
{
Config
::
all_icons_state
=
!
Config
::
all_icons_state
;
for
(
int
i
=
0
;
i

status
!=
Config
::
all_icons_state
)
{
Config
::
map_win_icons
[
i
]
->
status
=
Config
::
all_icons_state
;
}
}
}
for
(
int
i
=
0
;
i

cat_name
)
{
// if name of category ~= nil then display that
ImGui
::
Separator
(
)
;
ImGui
::
SetCursorPosX
(
(
Config
::
cSize
[
0
]
*
1.5f
-
Config
::
cSize
[
0
]
/
1.3f
)
/
2
-
ImGui
::
CalcTextSize
(
Config
::
map_win_icons
[
i
]
->
cat_name
)
.
x
/
2
)
;
ImGui
::
Text
(
Config
::
map_win_icons
[
i
]
->
ru_name
)
;
ImGui
::
Separator
(
)
;
}
ImGui
::
SetCursorPosX
(
ImGui
::
GetCursorPos
(
)
.
x
+
ImGui
::
GetStyle
(
)
.
ItemSpacing
.
x
/
2
)
;
ImGui
::
Checkbox
(
Config
::
map_win_icons
[
i
]
->
ru_name
,
&
Config
::
map_win_icons
[
i
]
->
status
)
;
}
ImGui
::
Spacing
(
)
;
ImGui
::
EndChild
(
)
;
}
//


В общем проблему обрисую просто скрином.

Слева реализация на c++, справа на lua.

В c++ версии кнопка(показать все/скрыть все) специально заменена на значение bool переменной, я тогда исправлял 1 косяк и не вернул как было)

Вот мне нужно сделать как на lua, чтобы чекбоксы отображались по категориям и с нормальным текстом.

А ещё мне нужно, чтобы чекбоксы тыкались независимо от других, а то сейчас они(чекбоксы) только в определённом порядке нажимаются сейчас(сверху вниз и никак иначе),

но в lua версии их можно тыкать в любом порядке.

Версия ImGui 1.71, если вдруг такой вопрос возникнет.

1634537310849.pngAndrinall · 18 Окт 2021 в 09:26' data-fancybox="lb-post-865384" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/118275/" style="cursor: pointer;" title="1634537310849.png">


Цитата:
Сообщение от Спойлер  


Lua:





Код:
if
button_menu_opened
[
0
]
then
imgui
.
SetCursorPos
(
imgui
.
ImVec2
(
cSize
.
x
,
0
)
)
imgui
.
VerticalSeparator
(
)
imgui
.
SetCursorPos
(
imgui
.
ImVec2
(
cSize
.
x
+
3
,
cSize
.
x
/
100
*
6
)
)
imgui
.
BeginChild
(
"##icons_select"
,
imgui
.
ImVec2
(
(
cSize
.
x
*
1.5
-
cSize
.
x
/
1.5
)
,
492
)
,
false
,
imgui
.
WindowFlags
.
NoScrollbar
)
local
res
=
0
for
i
=
1
,
#
map_win_icons
do
if
map_win_icons
[
i
]
[
1
]
[
0
]
then
res
=
res
+
1
end
end
if
res
>=
#
map_win_icons
/
2
then
all_icons_state
[
0
]
=
true
else
all_icons_state
[
0
]
=
false
end
imgui
.
SetCursorPosX
(
imgui
.
GetCursorPos
(
)
.
x
+
imgui
.
GetStyle
(
)
.
ItemSpacing
.
x
/
2
)
if
imgui
.
Button
(
(
all_icons_state
[
0
]
and
u8
"Скрыть все"
or
u8
"Показать все"
)
,
imgui
.
ImVec2
(
(
cSize
.
x
*
1.5
-
cSize
.
x
/
1.5
)
-
48.5
,
0
)
)
then
all_icons_state
[
0
]
=
not
all_icons_state
[
0
]
for
i
=
1
,
#
map_win_icons
do
if
map_win_icons
[
i
]
[
1
]
[
0
]
~=
all_icons_state
[
0
]
then
map_win_icons
[
i
]
[
1
]
[
0
]
=
all_icons_state
[
0
]
end
end
end
for
i
=
1
,
#
map_win_icons
do
if
map_win_icons
[
i
]
[
4
]
~=
nil
then
imgui
.
Separator
(
)
imgui
.
SetCursorPosX
(
(
cSize
.
x
*
1.5
-
cSize
.
x
/
1.3
)
/
2
-
imgui
.
CalcTextSize
(
u8
(
map_win_icons
[
i
]
[
4
]
)
)
.
x
/
2
)
imgui
.
Text
(
u8
(
map_win_icons
[
i
]
[
4
]
)
)
imgui
.
Separator
(
)
end
imgui
.
SetCursorPosX
(
imgui
.
GetCursorPos
(
)
.
x
+
imgui
.
GetStyle
(
)
.
ItemSpacing
.
x
/
2
)
imgui
.
Checkbox
(
u8
(
map_win_icons
[
i
]
[
3
]
)
,
map_win_icons
[
i
]
[
1
]
)
end
imgui
.
Spacing
(
)
imgui
.
EndChild
(
)
end


 
Ответить с цитированием

  #2  
Старый 18.10.2021, 10:39
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

У тебя не union должен быть, а struct
 
Ответить с цитированием

  #3  
Старый 18.10.2021, 11:08
Andrinall
Постоянный
Регистрация: 11.07.2019
Сообщений: 702
С нами: 3601315

Репутация: 148


По умолчанию

Заменил union на struct

заменил тип данных с char[*] (звёздочка = число которое там было)

на const char *var

C++:





Код:
struct
map_wico
{
bool
status
;
int
index
;
const
char
*
ru_name
;
const
char
*
cat_name
;
}
;


изменил проверку на имя категории, вписал туда ...->cat_name != nullptr

Код:
if (Config::map_win_icons[i]->cat_name != nullptr) { // если cat_name != nil(грубо говоря) - написать имя категории
теперь всё работает как мне было нужно
 
Ответить с цитированием

  #4  
Старый 18.10.2021, 11:21
Izvinisb
Постоянный
Регистрация: 19.06.2018
Сообщений: 961
С нами: 4158550

Репутация: 163


По умолчанию

Цитата:
Сообщение от Andrinall  

Заменил union на struct
заменил тип данных с char[*] (звёздочка = число которое там было)
на const char *var

C++:





Код:
struct
map_wico
{
bool
status
;
int
index
;
const
char
*
ru_name
;
const
char
*
cat_name
;
}
;


изменил проверку на имя категории, вписал туда ...->cat_name != nullptr

Код:
if (Config::map_win_icons[i]->cat_name != nullptr) { // если cat_name != nil(грубо говоря) - написать имя категории
теперь всё работает как мне было нужно
Тебе там не нужен двумерный массив объектов структуры
 
Ответить с цитированием

  #5  
Старый 18.10.2021, 11:28
Andrinall
Постоянный
Регистрация: 11.07.2019
Сообщений: 702
С нами: 3601315

Репутация: 148


По умолчанию

Цитата:
Сообщение от salofan  

Тебе там не нужен двумерный массив объектов структур
Типо просто сделать его одномерным, суть останется той же?
 
Ответить с цитированием

  #6  
Старый 18.10.2021, 12:01
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

Репутация: 113
По умолчанию

Цитата:
Сообщение от Andrinall  

Типо просто сделать его одномерным, суть останется той же?
да

GDB online Debugger | Code, Compile, Run, Debug online C, C++

Online GDB is online ide with compiler and debugger for C/C++. Code, Compiler, Run, Debug Share code nippets.

onlinegdb.com
 
Ответить с цитированием

  #7  
Старый 20.10.2021, 21:00
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Да и вообще уходи в контейнера. Они имеют динамический размер. Вместо чаров юзай std::string или std::string_view
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.