У Qt есть способ получить шрифт, который разрешает конкретный css? [Дубликат]

Самое простое решение:

Вместо использования:

var funcs = [];
for(var i =0; i<3; i++){
    funcs[i] = function(){
        alert(i);
    }
}

for(var j =0; j<3; j++){
    funcs[j]();
}

, который предупреждает «2», в 3 раза. Это связано с тем, что анонимные функции, созданные в цикле for, имеют одно и то же закрытие, а в этом закрытии значение i одинаково. Используйте это, чтобы предотвратить совместное закрытие:

var funcs = [];
for(var new_i =0; new_i<3; new_i++){
    (function(i){
        funcs[i] = function(){
            alert(i);
        }
    })(new_i);
}

for(var j =0; j<3; j++){
    funcs[j]();
}

Идея этого заключается в том, что инкапсуляция всего тела цикла for с помощью IIFE (выражение с выражением немедленного вызова) и передача new_i в качестве параметра и зафиксировать его как i. Поскольку анонимная функция выполняется немедленно, значение i отличается для каждой функции, определенной внутри анонимной функции.

Это решение похоже на любую проблему, так как оно потребует минимальных изменений в исходном коде, страдающем из этого вопроса. Фактически, это по дизайну, это не должно быть проблемой вообще!

4
задан Mykola 15 May 2016 в 22:46
поделиться

3 ответа

Чтобы загрузить значения из Qt Stylesheet, вы должны вызвать следующие методы:

widget->style()->unpolish(widget);
widget->style()->polish(widget);
widget->update();

После этого все значения вашего виджета будут обновляться в соответствии с указанными вами значениями стилей.

1
ответ дан Mykola 31 August 2018 в 11:19
поделиться

Вы можете получить шрифт определенного виджета, считывающего его свойства, как показано ниже:

//Get pushbutton font.
QFont font = ui->pushButton->property("font").value<QFont>();
qDebug() << font.family() << font.pointSize();

//Get MainWindow font.
QFont font2 = property("font").value<QFont>();
qDebug() << font2.family() << font2.pointSize();
2
ответ дан Antonio Dias 31 August 2018 в 11:19
поделиться

Лучшее, что я могу сказать из QStyleSheetStyle :: updateStyleSheetFont , виджет всегда содержит разрешенный шрифт из таблицы стилей. Я ожидаю, что QWidget::font() вернет разрешенный шрифт, который вы установили, используя таблицу стилей - то есть шрифт, который является объединенным шрифтом приложения, шрифтами любого родительского виджета и шрифтом стилей.

Виджет сначала нужно отполировать, если вы не запрашиваете после того, как события были доставлены (т. е. из цикла событий).

// https://github.com/KubaO/stackoverflown/tree/master/questions/style-font-query-test-45422885
#include <QtWidgets>

int main(int argc, char ** argv) {
   QApplication app{argc, argv};
   QLabel label("Test");
   auto font1 = label.font();
   label.setStyleSheet("font-size: 49pt;");
   label.show();
   label.ensurePolished();
   auto font2 = label.font();
   Q_ASSERT(font1.pointSize() != 49);
   Q_ASSERT(font2.pointSize() == 49);
   Q_ASSERT(font1.family() == font2.family());
}
1
ответ дан Kuba Ober 31 August 2018 в 11:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: