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."));