2008-01-31

QT右键菜单

  1. 右键弹出菜单:
    重写void QWidget::contextMenuEvent(QContextMenuEvent)函数
    如:
    void MainWindow::contextMenuEvent( QContextMenuEvent* e)
    {
      QMenu *menu = new QMenu();
      menu->addAction(openAct);
      menu->addSeparator();
      menu->addAction(quitAct);
      menu->exec(e->globalPos());
      delete menu;
    }

  2. 定制原生器件的弹出菜单(某些器件可能本身就自带popMenu)
    那么如何获得已有的菜单项呢?利用:
    QList<QAction *> QWidget::actions() const
    返回的是其所包含QAction的一个列表。

    如:
    TextViewer::TextViewer() : QTextEdit()
    {
      this->setReadOnly(true);
    }

    void TextViewer::contextMenuEvent ( QContextMenuEvent* e )
    {
      QMenu *menu = createStandardContextMenu();

      // remove the separator between 'copy' & 'select all'
      menu->removeAction(menu->actions().at(1));

      // insert separator before 'copy'
      QAction *sepTop = menu->insertSeparator(menu->actions().at(0));
      // insert 'open' & 'top' before that separator
      menu->insertAction(sepTop, ((MainWindow*)this->parentWidget())->openAction());
      menu->insertAction(sepTop, ((MainWindow*)this->parentWidget())->topmostAction());

      // add separator after 'select all'
      menu->addSeparator();
      // add 'quit' after that separator
      menu->addAction(((MainWindow*)this->parentWidget())->quitAction());

      menu->exec(e->globalPos());

      delete menu;
    }

    效果预览:



//EOF Read More...

QT快捷键

  1. shortcut作用域。
        QT 无全局快捷键(全局快捷键与相应的窗口管理器(KDE等)相关)。
    QAction::setShortcutContext(Qt::ShortcutContext)
      Qt::ApplicationShortcut 当前程序中有任意一窗口被激活时可使用的快捷键
      Qt::WindowShortcut      仅适用于当前窗口的 (default)
      Qt::WidgetShortcut      当前器件被激活时可用的快捷键


  2. 若该窗口无menuBar,对于popupMenu[contextMenu]中的menuItem之快捷键会无效。

      QAction 为抽象器件,可将该QAction添加到该窗口中,则可使用该菜单项的快捷键了 。


//EOF Read More...

QT程序外观定制

今天才发现,原来QT的程序可以像网页写CSS那样来用StyleSheet定制外观,真是方便啊。
(Qt >= 4.2) 其语法、作用域、优先级和网页的CSS差不多。
QApplication::setStyleSheet(QString);
QWidget::setStyleSheet(QString);

  1. 程序级的外观:(作用于整个程序的器件)
    如:
    QLineEdit { background: yellow }
    QCheckBox { color: red }

  2. 器件级的外观:(作用于本器件及其子器件)
    如:
    textViewer->
      setStyleSheet("background-color: #FFFFBB;"
                    "color: #000099;"
                    "margin: 10px;"
                    "padding: 5px;"
                    "padding-left: 15px;"
                    "padding-right: 15px;"
                    "border-radius: 5px;" // 圆角边框(只用IE的人就不知道了吧:D)
                    "border: 3px solid #abc;"
    );

    效果预览:




//EOF Read More...

2008-01-27

fucking the damn winter!!

今年实为近几十年来最严重的冰冻天气,道路结冰,高压输电线路冻成了几十厘米粗的“冰棍”~~还冻垮了几个高压输电塔,冻断了输电线路,全省供电紧张。
托这种鬼天气的福,我们这几天每天都是在一天之内全城停电、断电多次,搞的这几天什么都干不成。
调试一个程序好不容易恢复到上次的断点条件,马上又黑了~~郁闷啊!!搞的我都不敢开机了。
想出去走走,道路又滑的要命~听说还摔死了几个人!-_-(幸好我比较小心,就第一天摔了几跤)
不止如此,听说水管被冻爆了,今天还停水了── Oh, my God!!!(真担心我家的太阳能会不会被冻爆?)
据说这种鬼天气还要持续十多天!!??

这样下去怎么过啊~~ 不如冬眠算了!
说实话冬眠确实是个好办法,不过我天生就不是冬眠动物啊,白天怎么睡都睡不着的~~还弄得浑身酸痛~呜……

//EOF Read More...

2008-01-20

墨菲定理

http://baike.baidu.com/view/40544.htm

“如果一件事情有可能向坏的方向发展,就一定会向最坏的方向发展”。

这个说得果然对!。。。。。。 郁闷啊!
//EOF Read More...

2008-01-12

KISS

[转载,源出处不可考(不知被转过多少次了)。]

KEEP IT SIMPLE , STUPID !


KISS──UNIX/LINUX哲学思想

      编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原则”无处不在。

      大部分隐式的UNIX哲学不是这些前辈所说的,而是他们所做的和UNIX自身建立的例子。从整体上看,我们能够抽象出下面这些观点:
  1. 模块性原则:写简单的,通过干净的接口可被连接的部件;
  2. 清楚原则:清楚要比小聪明好。
  3. 合并原则:设计能被其它程序连接的程序。
  4. 分离原则:从机制分离从策略,从实现分离出接口。
  5. 简单原则:设计要简单;只有当你需要的时候,增加复杂性;
  6. 节俭原则:只有当被证实是清晰,其它什么也不做的时候,才写大的程序
  7. 透明原则:为使检查和调试明显更容易而设计
  8. 健壮性原则:健壮性是透明和简单的追随者
  9. 表现原则:把知识整理成资料,于是程序逻辑能变得易理解和精力充沛的。
  10. 最小意外原则:在接口设计中,总是做最小意外事情
  11. 沉默原则:当一个程序令人吃惊什么也不说的时候,他应该就是什么也不说
  12. 修补补救:当你必须失败的时候,尽可能快的吵闹地失败
  13. 经济原则:程序员的时间是宝贵的;优先机器时间节约它。
  14. 产生原则:避免手工堆砌;当你可能的时候,编写可以写程序的程序;
  15. 优化原则:在雕琢之前先有原型;在你优化它之前,先让他可以运行;
  16. 差异原则:怀疑所有声称的“唯一真理“
  17. 可扩展原则:为将来做设计,因为它可能比你认为来的要快


//EOF Read More...