Size: a a a

2020 December 17

S

Skarn in Qt
Динамик каст был первой мыслью, но рантаймовый тайпчекинг в крестах это 🤮
источник

m

mefest in Qt
Skarn
Эх, почему в QWidget не добавили универсальный сигнал.
не у всех виджетов есть какое либо "value"
источник

S

Skarn in Qt
Боюсь тормоза будут от такой кучи коннектов. Мне это нужно вообще, чтобы пометить документ как имеющий изменения. Я пишу редактор скриптов на нодах, и если юзер поменял что-то в виджете в ноде, надо помечать документ как несохраненный.
источник

S

Skarn in Qt
Хотя я думаю сделаю проще - привяжу просто на клик по сцене. Если юзер кликнул, значит есть какое-то изменение. Какое не важно.
источник

AS

Anatoly Shirokov in Qt
ну, чтобы было быстро ты можешь мапу создать QMetaObject* на функтор, который будет подписывать на конкретное событие
источник

AS

Anatoly Shirokov in Qt
тогда у тебя O(1) по указателю в хешмепе и каст
источник

Д

Денис in Qt
Алексей
судя по вашему вопросу, подойдет QHBoxLayout
Спасибо)
источник

AS

Anatoly Shirokov in Qt
std::unordered_map<const QMetaObject*, std::function<void(QWidget*)>> m;
m[&QPushButton::staticMetaObject] = [&](QWidget*widget) {
  QPushButton* button = qobject_cast<QPushButton*>(widget);
  ...
};
...
m[widget->metaObject()](widget);
источник

AS

Anatoly Shirokov in Qt
источник

AU

Abu Umar in Qt
Alex
Нужно было просто внимательнее почитать доку на QRegularExpression, запись вида \x{2022} означает символ с Unicode кодом 0x2022.
Подскажите почему регулярка не работает
        const QString str = QString::fromStdWString(&devint->dbcc_name[0]);
       QRegularExpression regex("\\\\{2}\\w{3}");
       QRegularExpressionMatch match = regex.match(str);
       if (match.hasMatch())
       {
           QString matched = match.captured(0);
           qDebug() << matched;
       }
Строки типа таких:
\\\\?\\HID#VID_C250&PID_3504&MI_00#8&7bf31c3&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
\\\\?\\USB#VID_C250&PID_3504#DEV_1337#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
На regex101 регулярка работает
источник

AS

Anatoly Shirokov in Qt
Если в строке \\\\ слеша, то регулярка должна содержать \\\\\\\\
источник

AU

Abu Umar in Qt
Anatoly Shirokov
Если в строке \\\\ слеша, то регулярка должна содержать \\\\\\\\
это уже экранированный вариант, т.е. их там в два раза меньше
источник

A

Alex in Qt
По-моему, Анатолий дело говорит. Что в вашем понимании означает экранированный?
источник

AS

Anatoly Shirokov in Qt
Abu Umar
Подскажите почему регулярка не работает
        const QString str = QString::fromStdWString(&devint->dbcc_name[0]);
       QRegularExpression regex("\\\\{2}\\w{3}");
       QRegularExpressionMatch match = regex.match(str);
       if (match.hasMatch())
       {
           QString matched = match.captured(0);
           qDebug() << matched;
       }
Строки типа таких:
\\\\?\\HID#VID_C250&PID_3504&MI_00#8&7bf31c3&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
\\\\?\\USB#VID_C250&PID_3504#DEV_1337#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
На regex101 регулярка работает
а что в вашем случае {2}?
источник

AS

Anatoly Shirokov in Qt
количество повторений применяют с предшествующему символу
источник

AS

Anatoly Shirokov in Qt
R{2} - два символа R
источник

AS

Anatoly Shirokov in Qt
далее еще страннее, w{3} - три символа 'w'
источник

AU

Abu Umar in Qt
Anatoly Shirokov
далее еще страннее, w{3} - три символа 'w'
3 буквы, разве нет?
источник

A

Alex in Qt
Тогда здесь должно быть "\\{4}..."? Или "\\\\{4}...", потому что \ - спецсимвол в регулярке, и его тоже нужно экранировать?
источник

A

Alex in Qt
3 буквы - это, наверное, [A-Za-z]{3}
источник