在我的開發電腦中,可以執行(秀出jpg和gif),但是其他電腦不行。
雖然我知道是dll的問題,但是還是找好久。
在執行檔處,建立一個資料夾叫imageformats
然後將qt\plugins\imageformats內要用的dll複製到剛剛建立的資料夾
2010年11月23日 星期二
2010年11月10日 星期三
在Qt中列出所有serial port
由於QSettings不能利用含有反斜線的key,來找到值。
所以只好和winapi交互利用。
要注意的是QSettings得到的鍵值是斜線,可是winapi是反斜線
所以只好和winapi交互利用。
要注意的是QSettings得到的鍵值是斜線,可是winapi是反斜線
const QStringList WinDongle::getComPort()
{
QStringList comports;
QString keyPath = "HARDWARE\\DEVICEMAP\\SERIALCOMM";
HKEY comsKey;
LPCWSTR winKeyPath = (LPCWSTR)keyPath.constData();
if(RegOpenKey(HKEY_LOCAL_MACHINE, winKeyPath, &comsKey) != ERROR_SUCCESS)
{
error = UNKNOW;
RegCloseKey(comsKey);
return comports;
}
QSettings settings(QString("HKEY_LOCAL_MACHINE\\")+keyPath, QSettings::NativeFormat);
QStringList keys = settings.allKeys();
foreach( const QString & key, keys )
{
QString newKey(key);
newKey.replace(QString("/"), QString("\\"));
LPCWSTR winKey = (LPCWSTR)newKey.constData();
char *szData= new char[101];
DWORD dwType, dwLen=100;
if (RegQueryValueEx(comsKey, winKey,
NULL, &dwType, (unsigned char *)szData, &dwLen) == ERROR_SUCCESS)
{
comports.append( QString::fromUtf16((ushort*)szData) );
}
delete[] szData;
}
RegCloseKey(comsKey);
return comports;
}
參考資料:在 Win32 下 Serial Port 的通訊Qt 字串轉換
//Convert a QString To LPCTSTR
LPCTSTR QString_To_LPCTSTR(QString mQTData)
{
return (LPCTSTR)mQTData.utf16();
}
//Convert a QString To LPCSTR
LPCSTR QString_To_LPCSTR(QString mQTData)
{
return (LPCSTR)mQTData.utf16();
}
//Convert a QString To LPTSTR
LPTSTR QString_To_LPTSTR(QString mQTData)
{
return (LPTSTR)mQTData.utf16();
}
//Convert a LPCTSTR To QString
QString LPCTSTR_To_QString(LPCTSTR mWinData)
{
return QString::fromUtf16((ushort*)mWinData);
}
//Convert a LPBYTE To QString
QString LPBYTE_To_QString(LPBYTE mWinData)
{
return QString::fromUtf16((ushort*)mWinData);
}
//Convert a Char[] To QString
QString Char_To_QString(char mWinData[])
{
return QString::fromUtf16((ushort*)mWinData);
}
//Convert a WCHAR* to a QString
QString WCHAR_to_QString(WCHAR* mBuffer)
{
return QString::fromWCharArray(mBuffer);
}
//Convert a TCHAR To QString
QString TChar_To_QString(TCHAR mWinData[])
{
return QString::fromUtf16((ushort*)mWinData);
}
資料來源 VQTConver
2010年11月7日 星期日
opengl 視窗置中
其實視窗置中和openGL一點關係都沒有
問題在你的視窗是誰建立的
是用glfw? glut? or ??
至於置中,就還簡單了
視窗的左上角位置 = 0.5 X( 桌面大小 - 視窗大小 )
問題在你的視窗是誰建立的
是用glfw? glut? or ??
至於置中,就還簡單了
視窗的左上角位置 = 0.5 X( 桌面大小 - 視窗大小 )
// Open a window and create its OpenGL context
if( !glfwOpenWindow( width, height, 0,0,0,0, 0,0, GLFW_WINDOW ) ) {
fprintf( stderr, "Failed to open GLFW window\n" );
glfwTerminate();
exit( EXIT_FAILURE );
}
GLFWvidmode desktop;
glfwGetDesktopMode( &desktop );
int posX = 0.5 * ( desktop.Width - width );
int posY = 0.5 * ( desktop.Height - height );
glfwSetWindowPos( posX, posY );
CodeLite
每次在用Code::Block都覺得用的很不習慣
尤其最近用久了Qt Creator後
整個寫code的習慣,都被養刁了
但是我又不想用vc
終於讓我找到CodeLite了
不管是畫面,熱鍵配置都比Code::Block好太多了
尤其最近用久了Qt Creator後
整個寫code的習慣,都被養刁了
但是我又不想用vc
終於讓我找到CodeLite了
不管是畫面,熱鍵配置都比Code::Block好太多了
2010年11月4日 星期四
Squirrel
今天灌Code::Block時發現Squirrel的選項。
wiki了一下
It is used extensively by Code::Blocks for scripting and was also used in Final Fantasy Crystal Chronicles: My Life as a King[2] It is also used in Left 4 Dead 2 for scripted events[3].
沒想到才幾年而已,就流行起來了
wiki了一下
It is used extensively by Code::Blocks for scripting and was also used in Final Fantasy Crystal Chronicles: My Life as a King[2] It is also used in Left 4 Dead 2 for scripted events[3].
沒想到才幾年而已,就流行起來了
2010年10月25日 星期一
Qt多國語言機制
Qt原本就內建了一套多國語言的機制,可是需要用到Qt Linguist。另外如果要作到動態的話,使用Qt Designer建立的GUI才有提供,要不然只能手動設定(參考)。
所以我自己改寫了一個class Translator。
為了使用方便,我利用了Singleton Pattern,
只要傳入物件的指標,還有屬性,以及字串標籤。其他的部份,Translator都幫你處理了。
使用範例如下:
在這裡說明一下,我是利用Qt的setProperty來達到這個效果的。
另外語言表方面,我比較喜歡用table而不是跟Qt一樣用list。table格式我選用csv,因為可以直接用openoffice編輯。
以下是csv檔的內容
至於第一列則因為當要判斷作業系統環境時,需要用到language_country code。
為什麼不跟Qt一樣,用英文當key,要用第一行的tag呢?
其實原因很簡單。當你有一天,發現老闆總是同一段英文一直換寫法,你就知道為什麼了。。。
所以我自己改寫了一個class Translator。
為了使用方便,我利用了Singleton Pattern,
只要傳入物件的指標,還有屬性,以及字串標籤。其他的部份,Translator都幫你處理了。
使用範例如下:
QMenu *menu = new QMenu;
menuBar()->addMenu(menu);
Translator::add(menu, "title", "FILE");
QAction *action = new QAction(0);
menu->addAction(action);
Translator::add(action, "text", "EXIT");
當然還有語言清單menuBar()->addMenu(Translator::menu);
在這裡說明一下,我是利用Qt的setProperty來達到這個效果的。
bool QObject::setProperty ( const char * name, const QVariant & value )
只要是繼承至QOject的元件,都可以用setProperty來設定屬性值。widget->setProperty("windowTitle", QVariant("標題"));
另外語言表方面,我比較喜歡用table而不是跟Qt一樣用list。table格式我選用csv,因為可以直接用openoffice編輯。
以下是csv檔的內容
"LANGUAGE_COUNTRY","en","zh_TW","zh_CN","ja","es"
"LANGUAGE_COUNTRY","English","繁體中文","简体中文","日本語","español"
"LANGUAGE","Language","語系","语言","言語","Lenguaje"
"FILE","File","檔案","文件","ファイル","Archivo"
"NEW","New","開新檔案","新建","新規","Nuevo"
利用第二列產生QMenu,至於第一列則因為當要判斷作業系統環境時,需要用到language_country code。
為什麼不跟Qt一樣,用英文當key,要用第一行的tag呢?
其實原因很簡單。當你有一天,發現老闆總是同一段英文一直換寫法,你就知道為什麼了。。。
訂閱:
文章 (Atom)