paip.提升用户体验---c++ qt 悬浮窗实现

本文详细介绍了如何使用C++和Qt框架实现悬浮窗功能,包括创建悬浮窗和普通窗体的方法,以及如何通过双击悬浮窗来显示或隐藏普通窗体,旨在提升用户界面的交互体验。

paip.提升用户体验---c++  qt 悬浮窗实现


作者Attilax ,  EMAIL:1466519819@qq.com 
来源:attilax的专栏
地址:http://blog.youkuaiyun.com/attilax




功能:一个悬浮窗,一个普通窗体..  双击悬浮窗可以显示或者隐藏普通窗体...


1.建立悬浮窗:
--------------------------
悬浮窗要点:
a.从QWidget 继承..没有工具bar, 状态bar...当然,从QMainWindowi继承也能了.
b.去掉标题栏:       setWindowFlags( Qt::FramelessWindowHint
c.窗体置顶    setWindowFlags(  Qt::WindowStaysOnTopHint 
d. 隐藏任务栏图标 setWindowFlags(    Qt::Tool)   //工具条模式
e:  背景透明      setAttribute(Qt::WA_TranslucentBackground, true);
f:  添加鼠标事件..拖曳..鼠标动态图标等.
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void paintEvent(QPaintEvent *event);
    void enterEvent(QEvent *event);
    void leaveEvent(QEvent *event);
 
 
 2.建立普通窗体.
 3.悬浮窗增添双击事件,
 ---------------------------------
 signals:
    void DoubleClickedSignal();
 void FormWdg:: mouseDoubleClickEvent ( QMouseEvent* event )
{
     qDebug()<< " floqt win double click";
         emit DoubleClickedSignal();


}


4.绑定悬浮窗双击事件信号到执行方法.
---------------------------------------------------------
int main(int argc, char *argv[])
{  MainWindow* w=new MainWindow() ;
    FormWdg*  widget=new FormWdg() ;
 QObject:: connect(widget, SIGNAL(DoubleClickedSignal()), w, SLOT(ShowMainWindow()));
    widget->show();
  w->show();
  
  5.实际的执行方法.
  ---------------------------
 public slots:
       void ShowMainWindow();  //for float invoke


void MainWindow::ShowMainWindow()
{    
    if(windowState() & Qt::WindowMinimized)
     {        show();
        setWindowState(Qt::WindowNoState);
    }   else   {
             setWindowState(Qt::WindowMinimized);
    }
}
   
参考参考
QT中QWidget、QDialog及QMainWindow的区别 - Hi小新 - 博客园.htm
QT:不规则窗口的实现 - 小豪之家 - 博客频道 - youkuaiyun.com.htm
QT:窗口最小化时显示一个小浮标_Linux编程_Linux公社-Linux系统门户网站.htm
QT:窗口最小化时显示一个小浮标_Linux编程_Linux公社-Linux系统门户网站.htm
QT中QWidget、QDialog及QMainWindow的区别 - 柳北风儿~~~~~~~欲宇仙炅 - ITeye技术网站.htm
Qt之二(窗口部件) - wen.shuijie的日志 - 网易博客.htm
QT区分鼠标单击和双击事件_陈伯林的电子备忘录_百度空间.htm
Qt自定义窗口基本事件 - chenjinxian88的专栏 - 博客频道 - youkuaiyun.com.htm
QT中大connect的使用 - imxiangzi的专栏 - 博客频道 - youkuaiyun.com.htm
qt的qmake和shadow build - bailizi的专栏 - 博客频道 - youkuaiyun.com.htm
浅谈 qmake 之 shadow build - 1+1=2 - 博客频道 - youkuaiyun.com.htm
error  No rule to make target `c  Users Administrator Desktop LED_mainWindow pcb_view.ui', needed by - jiong_1988的专栏 - 博客频道 - youkuaiyun.com.htm
Qt 出现“undefined reference to `vtable for”原因总结 - MoMo_KUA_1的专栏 - 博客频道 - youkuaiyun.com.htm



FROM:  http://blog.youkuaiyun.com/attilax/article/details/11950643

### PAIP编程珠玑中的示例代码解释 PAIP(Paradigms of Artificial Intelligence Programming)是一本深入探讨人工智能编程范式的书籍,其中包含了大量 Lisp 编写的程序实例。这些例子不仅展示了如何实现特定的人工智能算法,还提供了关于良好软件工程实践的重要见解。 #### 示例:通用求解器框架 书中介绍了一个名为 `defun` 的宏来定义函数,在构建通用问题解决器时非常有用[^1]: ```lisp (defun solve (problem) "Find a solution to the given problem." (let ((solution nil)) ;; Attempt to find a solution using backtracking. (labels ((try-next-option () (when (not solution) (if (no-more-options-p ()) (return-from try-next-option nil) (let* ((option (next-option))) (cond ((goal-reached-p option) (setf solution option)) (t (push-state option) (solve problem) (pop-state)))))))) (try-next-option) solution))) ``` 这段代码实现了回溯法解决问题的一般模式。通过递归调用自身并尝试不同的选项直到找到解决方案为止。如果当前路径无法通向目标,则会恢复之前的状态继续探索其他可能性。 此方法能够有效地处理许多复杂的组合优化类问题,并且由于其灵活性可以很容易地适应各种具体应用场景下的需求变化。 #### 示例:自然语言理解模块 另一个重要的部分涉及到了自然语言处理技术的应用案例——基于语法分析树结构来进行语义解析: ```lisp (defun parse-sentence (sentence) "Parse SENTENCE into its constituent parts and build an interpretation tree." (multiple-value-bind (subject verb-object) (split sentence 'verb) `(sentence :subject ,(parse-noun-phrase subject) :action ,verb-object))) (defun parse-noun-phrase (np-string) "Interpret NP-STRING as either a simple noun or compound phrase." ...) ``` 上述片段演示了如何将输入字符串分割成主谓宾成分,并进一步解析名词短语的具体含义。这种层次化的表示方式有助于后续更高级别的推理操作以及对话管理等功能的设计与实现。 #### 示例:专家系统规则引擎 最后值得一提的是书中对于专家系统的讨论,特别是有关于事实库管理和匹配机制的部分: ```lisp (defstruct fact id pattern bindings) (defun match-patterns (pattern facts) "Return all FACTS that unify with PATTERN, along with their BINDINGS." ...) (defun add-fact (kb new-fact) "Add NEW-FACT to knowledge base KB after checking consistency against existing rules." ...) ``` 这里展示了一种简单而有效的知识表达形式及其相应的查询接口设计思路。通过对模式进行统一化计算从而快速定位符合条件的事实条目;而在更新数据库前则需确保新加入的信息不会引起逻辑矛盾等问题的发生。 以上仅是从《Programming Pearls》一书摘取的一些精彩片段,实际上该著作涵盖了更为广泛的内容领域和技术细节等待读者去发掘学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值