Re: Qt/WinFree bugs

Angus Leeming <[email protected]>
Newsgroups gmane.editors.lyx.devel,gmane.comp.kde.devel.cygwin
Message-ID <[email protected]>
Angus Leeming wrote:
> Michael Schmitt wrote:
> 
>> Dear Christian and all Qt developers,
>>
>> I would like to tell you that the LyX team has released a series of 
>> pre-releases for LyX 1.3.6 on Windows.
>>
>> You can find the latest version at
>>
>>  http://wiki.lyx.org/Windows/LyX136pre
>>
>> The LyX community has also generated a short list of Qt/WinFree bugs 
>> which you can find on the same page.
>
> Section "Apparent Qt/WinFree bugs" at the bottom of the page.
> I've attached two tiny programs that demonstrate two of the bugs. Maybe 
> they'll help...

I think that the attached program demonstrates two bugs. One, definitely, 
in Qt/WinFree and one, possibly, in LyX.

The problem lies with the QFont style hint (which isn't useful on *nix 
because the OS doesn't support it). On my WinXP box, the compiled program 
returns:

     Serif: Arial [MS]
     SansSerif: Arial [MS]
     TypeWriter: Arial [MS]

I think that the Qt/WinFree bug is clear; different style hints should 
return different fonts.

The LyX bug, if bug it is, is a little more subtle. Other Qt libraries (eg 
Qt Non-Commercial 3.2.1) apparently return the font name without the 
foundary on QFontInfo::family(). Ie, "Arial" rather than "Arial [MS]".

It's trivial for me to handle this difference but I'd like to establish 
what Qt/WinFree *should* be returning here. The docs don't make it clear, 
to me at least.

Regards,
Angus
trial.cpp (text/plain, 1.2 KB)
#include <qapplication.h>
#include <qpushbutton.h>

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>

using std::string;

template <class Target, class Source>
Target convert(Source arg);


template<>
int convert<int>(char * cptr)
{
	return strtol(cptr, 0, 10);
}


int usage(string const & name)
{
	std::cerr << "Usage: " << name
		  << " [1-3]\nwhere 1==times,2==helvetica,3==courier\n";
	return 1;
}

int main( int argc, char **argv )
{
	if (argc != 2)
		return usage(argv[0]);

	int const choice = convert<int>(argv[1]);
	QFont::StyleHint font_hint = QFont::Serif;
	string font_name = "Serif";
	switch (choice) {
	case 1:
		font_hint = QFont::Serif;
		font_name = "Serif";
		break;
	case 2:
		font_hint = QFont::SansSerif;
		font_name = "SansSerif";
		break;
	case 3:
		font_hint = QFont::TypeWriter;
		font_name = "TypeWriter";
		break;
	default:
		return usage(argv[0]);
	}

	QApplication a( argc, argv );

	// Try the hint
	QFont font;
	font.setStyleHint(font_hint);
	QFontInfo fi(font);

	std::ostringstream ss;
	ss << font_name << " = " << fi.family();

	QPushButton hello( ss.str(), 0 );
	hello.resize( 200, 30 );

	a.setMainWidget( &hello );
	hello.show();
	return a.exec();
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.