QT自帶的例子Codecs是一篇關于保存和載入不同編碼文本的例子
其界面比較簡單一個簡單的單文檔而已
有2個主要的對象
一個是MainWindow用于窗體主界面
另外一個是PreviewForm用于顯示編碼格式列表
1.其編碼格式的獲取部分代碼如下:
QMap<QString, QTextCodec *> codecMap;
QRegExp iso8859RegExp("ISO[- ]8859-([0-9]+).*");
foreach (int mib, QTextCodec::availableMibs()) {
QTextCodec *codec = QTextCodec::codecForMib(mib);
QString sortKey = codec->name().toUpper();
int rank;
if (sortKey.startsWith("UTF-8")) {
rank = 1;
} else if (sortKey.startsWith("UTF-16")) {
rank = 2;
} else if (iso8859RegExp.exactMatch(sortKey)) {
if (iso8859RegExp.cap(1).size() == 1)
rank = 3;
else
rank = 4;
} else {
rank = 5;
}
sortKey.prepend(QChar('0' + rank));
codecMap.insert(sortKey, codec);
}
codecs = codecMap.values();
通過使用foreach循環來獲取支持的編碼格式并保存
不過看上去
foreach (int mib
, QTextCodec::availableMibs
())有點奇怪
查查資料
解釋是foreach(variables ,container)關鍵字是Qt對c++的一個擴展,主要用于按順序歷經容器(container)中的對象
2關于文件菜單的生成和設置
菜單的構造
一個例子
saveAsMenu
= new QMenu(tr
("&Save As"), this);這里有2個參數一個是菜單顯示文另外一個是當前窗體指針
然后就可以加載子菜單,設置分隔符,設置事件響應等操作了
例子為:
fileMenu = new QMenu(tr("&File"), this);
fileMenu->addAction(openAct);
fileMenu->addMenu(saveAsMenu);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
那如何綁定菜單到當前窗體呢
如下:
menuBar()->addMenu(fileMenu);
menuBar()->addSeparator();
menuBar()->addMenu(helpMenu);
menuBar()是QmainWindow的成員函數用于獲取窗體菜單項指針
3.QT對象QAction
QT文檔對QAction的解釋是可以抽象用戶接口對象-可以插入控件
例子如下:
openAct = new QAction(tr("&Open
"), this);
openAct->setShortcuts(QKeySequence::Open);
connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
無非就是對象聲明,設置快捷鍵,鏈接函數和響應而已
4.窗體設置
setWindowTitle
(tr
("Codecs"));
resize(500, 400);
5.消息對話框
QMessageBox::about(this, tr("About Codecs"),
tr("The <b>Codecs</b> example demonstrates how to read and write "
"files using various encodings."));