这几个月在用Qt做Linux下应用的界面,干的事情是什么呢? 主要是看在线文档,查api,堆砌代码。。。 没有太多技术含量,却也不容易做好,因为只查文档,不知道查哪个api,名字是什么? 这就要google了;整个流程是 : 需求-google-api名-doc-copy例子过来改改。
发现几个问题:
1 google不是万能的,不能搞定所以需求
2 没有系统的知识体系,只有碎片、碎片、碎片——还没掌握好就急忙用,用一次就扔掉
3 拼凑api有时不照,拼得不专业
4 兴趣与耐心被磨灭, 不怎么动脑子, boss怎么说则么做,机器人。。。
5 浮躁,总想一下子做出很多东西,却不愿意去看书,去了解清楚底层的基础,妄想在浮沙上筑高楼!
tips:
应该读书。 把知识体系和索引在脑子里建立起来,便于设计和查找,不确定的时候要去细细的查看和学习
虽然,上头老是急功近利地催促,自己还是要考虑学到东西没?
很ft的是,被上头影响得自己也越来越浮躁,不求甚解,只管表明混过去——有时自己都不耻自己了
custom widget的初体验
(FC8 2.6.23内核, QT4.4.3 Eclipse-qt-integration1.4.3 )
这两天在看Vidalia的代码,关于VClickLabel,是个自定义控件,发现人家的ui文件中可以直接对text和pixmap属性进行编辑;而我把vclicklabel类放到工程中,并将widget promote成vclicklabel,发现没法编辑这两个属性,即使在Qt Designer中自己增加了这两个属性,仍然无法显示图像和文字。
于是,研究下自定义控件,看到文章
class IconEditorPlugin : public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
IconEditorPlugin(QObject *parent = 0);
QString name() const;
QString includeFile() const;
QString group() const;
QIcon icon() const;
QString toolTip() const;
QString whatsThis() const;
bool isContainer() const;
QWidget *createWidget(QWidget *parent);
};
: QObject(parent)
{
}
QString IconEditorPlugin::name() const
{
return "IconEditor";
}
QString IconEditorPlugin::includeFile() const
{
return "iconeditor.h";
}
QString IconEditorPlugin::group() const
{
return tr("Image Manipulation Widgets");
}
QIcon IconEditorPlugin::icon() const
{
return QIcon(":/images/iconeditor.png");
}
QString IconEditorPlugin::toolTip() const
{
return tr("An icon editor widget");
}
QString IconEditorPlugin::whatsThis() const
{
return tr("This widget is presented in Chapter 5 of <i>C++ GUI "
"Programming with Qt 4</i> as an example of a custom Qt "
"widget.");
}
bool IconEditorPlugin::isContainer() const
{
return false;
}
QWidget *IconEditorPlugin::createWidget(QWidget *parent)
{
return new IconEditor(parent);
}
Q_EXPORT_PLUGIN2(iconeditorplugin, IconEditorPlugin)
原来这个是从《C++ GUI Programming with Qt 4》翻译过来的。看了下书上这部分,提到2个方法,于是尝试插件法,一番尝试之后,安装新插件到QT Designer了,效果不错。(小插曲: plugin文件也要包含<QtGUI>,否则gcc不认识QEXPORT_PLUGIN2())
另外,我急于求成, 没看人家怎么写的自定义widget,漏掉了Q_PROPERTY(QColor penColor READ penColor WRITE setPenColor)这种声明,又折腾了一番。
最后,在准备把插件导入eclipse之前,尝试把Q_PROPERTY()宏放到vclicklabel类定义中去,然后自己在eclipse内置Qt Designer中添加属性,名称与类中声明一致(_text _pixmap),虽然预览看不到图和文字,运行起来可以看到图和文字。 注意到自己加的叫dynamic property,猜想是运行时动态加上的属性。