Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt4]проблемы со шрифтами


Автор: anatox91 22.5.2008, 18:58
собственно есть объект QTextEdit. В нем надо установить свой шрифт, в моем примере - CourierStd. Сам шрифт у меня имеется, лежит в системной папке со всеми остальными шрифтами. Но когда я устанавливаю шрифт 
Код

textEdit->setFontFamily("CourierStd");
  
то это ничего не меняет. Шрифт в текст едите остается по умолчанию. В связи с чем вопрос - как можно установить в этом виджете свой шрифт(причем желательно сделать так, чтобы этот шрифт шел вместе с программой, т.е. в каком-нибудь файле ресурсов, и шрифт в виджете не зависел от того, установлен он в системе или нет)?
заранее большое спасибо!

Автор: Droll 22.5.2008, 19:58
Функция setFontFamily() устанавливает шрифт не для всего виджета QTextEdit, а только для http://doc.trolltech.com/4.4/qtextcharformat.html. Используйте функцию http://doc.trolltech.com/4.4/qwidget.html#font-prop. 

Пример:
Код

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

     QTextEdit qe;
     // Устанавливаем шрифт
     qe.setFont(QFont("CourierStd"));
     qe.show();

     return app.exec();
}

Автор: anatox91 22.5.2008, 20:08
пробовал, тоже самое...
но почему-то когда написал просто Courier
Код

textEdit.setFont(QFont("Courier"));

то поменялся шрифт...

Добавлено через 46 секунд
но больше всего меня интересует это
Цитата

сделать так, чтобы этот шрифт шел вместе с программой, т.е. в каком-нибудь файле ресурсов, и шрифт в виджете не зависел от того, установлен он в системе или нет

Автор: Droll 22.5.2008, 20:20
Цитата(anatox91 @  22.5.2008,  20:08 Найти цитируемый пост)
пробовал, тоже самое...

Это потому, что шрифт на самом деле называется не CourierStd. Если шрифт действительно установлен, то запустите какое-нибудь офисное приложение (OpenOffice.org Writer, например) и посмотрите полное название шрифта (включая пробелы, если они есть) в списке шрифтов.

Цитата(anatox91 @  22.5.2008,  20:08 Найти цитируемый пост)
сделать так, чтобы этот шрифт шел вместе с программой, т.е. в каком-нибудь файле ресурсов, и шрифт в виджете не зависел от того, установлен он в системе или нет

Как это сделать не знаю, но предлагаю копать в сторону QPF2 (Qt Prerendered Font) + makeqpf. Судя по описанию, это не масштабируемый платформонезависимый формат шрифта.

Автор: anatox91 22.5.2008, 20:40
Цитата(Droll @  22.5.2008,  20:20 Найти цитируемый пост)
Это потому, что шрифт на самом деле называется не CourierStd. Если шрифт действительно установлен, то запустите какое-нибудь офисное приложение (OpenOffice.org Writer, например) и посмотрите полное название шрифта (включая пробелы, если они есть) в списке шрифтов.

т.е. Qt берет шрифты из стандартной системной папки со шрифтами?

Добавлено @ 20:42
посмотрел - действительно щрифт почему-то при копировании переименовался в CourierStd(OpenType), а в фотошопе вообще называется Courier Std (с пробелом, в смысле)

Автор: pilotnet 23.5.2008, 13:38
anatox91,  qt берет шрифты из X 
те из папки или получает от сервера xfs
можно в скипте запуска программы добавлять путь до папки со своими шрифтами
xset  +fp /путь/до_папки
в той папке должен лежать файл fonts.dir 
сгенеренный программой mkfontdir или    mkfontscale точно я непомню

Автор: anatox91 23.5.2008, 14:27
pilotnet, я так понял это для *никс систем, а я пока что еще на винде сижу smile 

Автор: Artemios 26.5.2008, 00:56
Цитата(anatox91 @  22.5.2008,  19:58 Найти цитируемый пост)
В связи с чем вопрос - как можно установить в этом виджете свой шрифт(причем желательно сделать так, чтобы этот шрифт шел вместе с программой, т.е. в каком-нибудь файле ресурсов, и шрифт в виджете не зависел от того, установлен он в системе или нет)?


Можно и средствами одного Qt, и не доставляя шрифт в систему (сам таким занимался)
http://forum.vingrad.ru/forum/topic-121246.html
если кратко, то такой пример:
Код

#include <QtGui>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QTextEdit edit;
    int f_id = QFontDatabase::addApplicationFont("./OrteROOS.ttf");
    edit.setFont(QFont(QFontDatabase::applicationFontFamilies(f_id).first()));
    edit.show();
    return app.exec();
}

одинакого работает и под Linux, и под Windows, с чужим для системы шрифтом из файла *.ttf .

Автор: anatox91 26.5.2008, 14:22
Artemios, спасибо, это именно то, что нужно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)