QT自帶的例子Codecs是一篇關(guān)于保存和載入不同編碼文本的例子
其界面比較簡(jiǎn)單一個(gè)簡(jiǎn)單的單文檔而已
有2個(gè)主要的對(duì)象
一個(gè)是MainWindow用于窗體主界面
另外一個(gè)是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();
通過(guò)使用foreach循環(huán)來(lái)獲取支持的編碼格式并保存
不過(guò)看上去
foreach (int mib
, QTextCodec::availableMibs
())有點(diǎn)奇怪
查查資料
解釋是foreach(variables ,container)關(guān)鍵字是Qt對(duì)c++的一個(gè)擴(kuò)展,主要用于按順序歷經(jīng)容器(container)中的對(duì)象
2關(guān)于文件菜單的生成和設(shè)置
菜單的構(gòu)造
一個(gè)例子
saveAsMenu
= new QMenu(tr
("&Save As"), this);這里有2個(gè)參數(shù)一個(gè)是菜單顯示文另外一個(gè)是當(dāng)前窗體指針
然后就可以加載子菜單,設(shè)置分隔符,設(shè)置事件響應(yīng)等操作了
例子為:
fileMenu = new QMenu(tr("&File"), this);
fileMenu->addAction(openAct);
fileMenu->addMenu(saveAsMenu);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
那如何綁定菜單到當(dāng)前窗體呢
如下:
menuBar()->addMenu(fileMenu);
menuBar()->addSeparator();
menuBar()->addMenu(helpMenu);
menuBar()是QmainWindow的成員函數(shù)用于獲取窗體菜單項(xiàng)指針
3.QT對(duì)象QAction
QT文檔對(duì)QAction的解釋是可以抽象用戶接口對(duì)象-可以插入控件
例子如下:
openAct = new QAction(tr("&Open
"), this);
openAct->setShortcuts(QKeySequence::Open);
connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
無(wú)非就是對(duì)象聲明,設(shè)置快捷鍵,鏈接函數(shù)和響應(yīng)而已
4.窗體設(shè)置
setWindowTitle
(tr
("Codecs"));
resize(500, 400);
5.消息對(duì)話框
QMessageBox::about(this, tr("About Codecs"),
tr("The <b>Codecs</b> example demonstrates how to read and write "
"files using various encodings."));