• 4441阅读
  • 36回复

Qt编写通用顶部导航源码 [复制链接]

上一主题 下一主题
离线liudianwu
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2017-10-22
懒得说废话,直接上图上源码

最新源码V20171023 在这里下载 uidemo01.zip (292 K) 下载次数:747
18条评分好评度+3贡献值+4金钱+15威望+4
yzq189424658 好评度 +1 向前辈学习了。 03-15
yzq189424658 贡献值 +1 向前辈学习了。 03-15
yzq189424658 威望 +1 向前辈学习了。 03-15
yzq189424658 金钱 +5 向前辈学习了。 03-15
kuainq 金钱 +1 值得借鉴,支持! 03-05
一只小鱼 好评度 +1 - 01-11
一只小鱼 贡献值 +1 - 01-11
一只小鱼 威望 +1 - 01-11
一只小鱼 金钱 +1 - 01-11
jchqsitt 贡献值 +1 - 2017-12-22
12
离线toby520

只看该作者 1楼 发表于: 2017-10-22
      
QtQML多多指教开发社区 http://www.heilqt.com
将QtCoding进行到底,做Qt的宠儿
关注移动互联网,关注手机助手
开发即时通讯,服务于金融行业
群号:312125701
离线bigma

只看该作者 2楼 发表于: 2017-10-22
顶顶顶
离线testuser007

只看该作者 3楼 发表于: 2017-10-23
感谢。。。。下下来学习了
离线liuchangyin

只看该作者 4楼 发表于: 2017-10-23
离线九重水

只看该作者 5楼 发表于: 2017-10-23
我注意到了,老刘好多次的例子都有个‘警’字,公司跟这个业务联系很紧啊
离线九重水

只看该作者 6楼 发表于: 2017-10-23
增加一个标题栏双击最大化、还原功能吧。每次点那个+号有点麻烦
离线九重水

只看该作者 7楼 发表于: 2017-10-23
好吧,窗口外围鼠标拉伸也没有,
总结一下,这是个很帅,略显粗糙的通用顶部导航。
离线liudianwu

只看该作者 8楼 发表于: 2017-10-23
回 九重水 的帖子
九重水:
好吧,窗口外围鼠标拉伸也没有,
总结一下,这是个很帅,略显粗糙的通用顶部导航。[表情] [表情] [表情]  

这两个功能不要太简单!
顶部绑定事件过滤器。
  1. bool UIDemo01::eventFilter(QObject *watched, QEvent *event)
  2. {
  3.     if (event->type() == QEvent::MouseButtonDblClick) {
  4.         if (watched == ui->widgetTitle) {
  5.             on_btnMenu_Max_clicked();
  6.             return true;
  7.         }
  8.     }
  9.     return QWidget::eventFilter(watched, event);
  10. }

设置窗体属性sizeGripEnabled为真即可拖拉窗体改变大小。
离线九重水

只看该作者 9楼 发表于: 2017-10-23
回 liudianwu 的帖子
liudianwu:这两个功能不要太简单!
顶部绑定事件过滤器。
bool UIDemo01::eventFilter(QObject *watched, QEvent *event)
{
....... (2017-10-23 11:28) 

离线crazy

只看该作者 10楼 发表于: 2017-10-23
赞赞赞赞!支持
C/C++/Qt爱好者
邮箱:kevinlq0912@163.com
企鹅:2313828706
博客:http://kevinlq.com/
离线hp_201111

只看该作者 11楼 发表于: 2017-10-23
        
离线w642833823

只看该作者 12楼 发表于: 2017-10-24
大师制造非同凡响,辛苦了
离线cycloveu

只看该作者 13楼 发表于: 2017-10-24
    
大道至简 悟在天成
离线九重水

只看该作者 14楼 发表于: 2017-10-24
sizeGripEnabled这个变量在QDialog是什么时候引入的?
以前用QWidget类的时候,在四个角还有四条边拉伸窗口的时候还不是很容易玩。
不过用QDialog的这个设置,好像也只能在角落里玩玩,边上就没得玩了。
离线rekols

只看该作者 15楼 发表于: 2017-10-24
这玩意很容易实现。
离线twodiamond

只看该作者 16楼 发表于: 2017-10-25
一直很崇拜刘工的举重若轻,以前研究过刘工的ECS工程(基于九宫格的图标页面),这个是基于 QStackedWidget 的,有问题想要请教:
1、在这个工程的AppInit::Instance函数中,QMutex的作用是什么?

AppInit *AppInit::Instance()
{
    if (!self) {
        QMutex mutex;
        QMutexLocker locker(&mutex);
        if (!self) {
            self = new AppInit;
        }
    }
    return self;
}

2、QStackedWidget 的addWidget是否为硬copy?
QWidget *widget1 = new QWidget();

QWidget *widget2 = new QWidget();

QWidget *widget2 = new QWidget();

QStackedWidget *pWidgets;

pStackPage->addWidget(widget1 );

pStackPage->addWidget(widget2 );

pStackPage->addWidget(widget2 );

在此处,QStackedWidget  还是只象 QListWidget 一样,仅仅是一个指针入栈呢?

谢谢!

离线thematic971

只看该作者 17楼 发表于: 2017-10-27
学习了 感谢分享
离线liudianwu

只看该作者 18楼 发表于: 2017-10-27
回 twodiamond 的帖子
twodiamond:一直很崇拜刘工的举重若轻,以前研究过刘工的ECS工程(基于九宫格的图标页面),这个是基于 QStackedWidget 的,有问题想要请教:
1、在这个工程的AppInit::Instance函数中,QMutex的作用是什么?
AppInit *AppInit::Instance()
{
....... (2017-10-25 10:04) 

QMutex锁住,就可以防止多线程调用此函数造成多次实例化。
QStackedWidget 每次new之后,都分配了一个内存给该窗体,应该可以理解为硬copy
离线twodiamond

只看该作者 19楼 发表于: 2017-10-28
多谢刘工
离线joeaaron

只看该作者 20楼 发表于: 2017-10-30
刘大师,我在顶部导航栏加入QComboBox为何起不了作用?
离线lengji22

只看该作者 21楼 发表于: 2017-10-30
大神,膜拜
离线icemen

只看该作者 22楼 发表于: 2017-11-06
有个BUG,建议 UIDemo01::buttonClick() 中的 b->text(); 改成
b->objectName();
否则换肤及换语言时无法执行换页。

void UIDemo01::buttonClick(){    QToolButton *b = (QToolButton *)sender();    QString name = b->objectName();            //b->text();
    QList<QToolButton *> tbtns = ui->widgetTop->findChildren<QToolButton *>();    foreach (QToolButton *btn, tbtns) {        if (btn == b) {            btn->setChecked(true);        } else {            btn->setChecked(false);        }    }
    if (name == "btnMain") {        ui->stackedWidget->setCurrentIndex(0);    } else if (name == "btnConfig") {        ui->stackedWidget->setCurrentIndex(1);    } else if (name == "btnData") {        ui->stackedWidget->setCurrentIndex(2);    } else if (name == "btnHelp") {        ui->stackedWidget->setCurrentIndex(3);    } else if (name == "btnExit") {        exit(0);    }}
离线wjjontheway

只看该作者 23楼 发表于: 2017-11-06
刘大师,我是新手,最近在学习界面设计,看了您的代码,想请教下两个问题:
1.UIDemo01.cpp里面对“form”,和“canMove”属性进行设置
this->setProperty("form", true);
this->setProperty("canMove", true);
UIDemo01集成QDialog,我在QDialog的属性列表里面没有找到这两个属性,在QWidget和QObject里面也没有找到。请问这两个是自定义的还是什么,困惑。
2.另外一个就是psblack.css中的样式表语句中也提到了类似[form="bottom"]的选择器,还有[nav="top"]选择器中的“nav”属性,这是在哪个类的属性呢?
离线wjjontheway

只看该作者 24楼 发表于: 2017-11-06
刚看了下setProperty(),
"If the property is not defined using Q_PROPERTY, and therefore not listed in the meta-object, it is added as a dynamic property and false is returned."
所以这里的"form",“nav”都是自己添加的一种动态属性对吗
离线liudianwu

只看该作者 25楼 发表于: 2017-11-07
回 wjjontheway 的帖子
wjjontheway:刚看了下setProperty(),
"If the property is not defined using Q_PROPERTY, and therefore not listed in the meta-object, it is added as a dynamic property and false is returned."
所以这里的"form",“nav”都是自己添加的一种动态属性对吗 (2017-11-06 22:51) 

是的,你也可以写成this->setProperty("niubi", true);
能移动无边框是因为在appinit类中定义了!安装了全局事件过滤器。
离线liudianwu

只看该作者 26楼 发表于: 2017-11-08
回 icemen 的帖子
icemen:
有个BUG,建议 UIDemo01::buttonClick() 中的 b->text(); 改成
b->objectName();
否则换肤及换语言时无法执行换页。
void UIDemo01::buttonClick(){    QToolButton *b = (QToolButton *)sender();    QString name = b->objectName();            //b->text();
.......

那只是举例而已,其实我的真实用法是一行代码。
ui->stackedWidget->setCurrentIndex(btns.indexOf(b));
离线victoire

只看该作者 27楼 发表于: 2017-11-17
很好的呢,借鉴下
离线vitty1984

只看该作者 28楼 发表于: 2017-12-15
点击最小化按钮,好像不起作用
离线一只小鱼

只看该作者 29楼 发表于: 01-11
学习了,刘大师
离线核心科技

只看该作者 30楼 发表于: 01-11
这两天我在用纯代码实现该功能,因水平问题,遇到好多问题,感觉心好累啊。
离线petrelli1112

只看该作者 31楼 发表于: 01-12
离线核心科技

只看该作者 32楼 发表于: 01-14
我用纯代码终于实现了,后续功能还要丰富一下。等做好了拿出来分享一下。
离线新垣结衣

只看该作者 33楼 发表于: 01-17
真的很感谢分享的楼主~~~感谢感谢
离线kuainq

只看该作者 34楼 发表于: 03-05
值得借鉴,支持!
离线rock1411

只看该作者 35楼 发表于: 03-05
谢谢楼主分享,学习了
离线xue6_xi6

只看该作者 36楼 发表于: 04-02
非常感谢楼主的分享!!!
快速回复
限100 字节
 
上一个 下一个