查看完整版本: [-- Qt编写通用顶部导航源码 --]

QTCN开发网 -> Qt 作品展 -> Qt编写通用顶部导航源码 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

liudianwu 2017-10-22 17:28

Qt编写通用顶部导航源码

懒得说废话,直接上图上源码
[attachment=18040]
最新源码V20171023 在这里下载:[attachment=18046]

toby520 2017-10-22 17:47
      

bigma 2017-10-22 19:27
顶顶顶

testuser007 2017-10-23 09:07
感谢。。。。下下来学习了

liuchangyin 2017-10-23 09:10

九重水 2017-10-23 10:11
我注意到了,老刘好多次的例子都有个‘警’字,公司跟这个业务联系很紧啊

九重水 2017-10-23 10:15
增加一个标题栏双击最大化、还原功能吧。每次点那个+号有点麻烦

九重水 2017-10-23 10:16
好吧,窗口外围鼠标拉伸也没有,
总结一下,这是个很帅,略显粗糙的通用顶部导航。

liudianwu 2017-10-23 11:28
九重水:
好吧,窗口外围鼠标拉伸也没有,
总结一下,这是个很帅,略显粗糙的通用顶部导航。[表情] [表情] [表情]  

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

        return QWidget::eventFilter(watched, event);
    }

设置窗体属性sizeGripEnabled为真即可拖拉窗体改变大小。
[attachment=18045]

九重水 2017-10-23 11:31
liudianwu:这两个功能不要太简单!
顶部绑定事件过滤器。
bool UIDemo01::eventFilter(QObject *watched, QEvent *event)
{
....... (2017-10-23 11:28) 


crazy 2017-10-23 19:07
赞赞赞赞!支持

hp_201111 2017-10-23 22:04
        

w642833823 2017-10-24 09:22
大师制造非同凡响,辛苦了

cycloveu 2017-10-24 09:57
    

九重水 2017-10-24 14:06
sizeGripEnabled这个变量在QDialog是什么时候引入的?
以前用QWidget类的时候,在四个角还有四条边拉伸窗口的时候还不是很容易玩。
不过用QDialog的这个设置,好像也只能在角落里玩玩,边上就没得玩了。

rekols 2017-10-24 16:11
这玩意很容易实现。

twodiamond 2017-10-25 10:04
一直很崇拜刘工的举重若轻,以前研究过刘工的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 2017-10-27 09:36
学习了 感谢分享

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

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

twodiamond 2017-10-28 14:45
多谢刘工

joeaaron 2017-10-30 14:37
刘大师,我在顶部导航栏加入QComboBox为何起不了作用?
[attachment=18074]

lengji22 2017-10-30 16:42
大神,膜拜

icemen 2017-11-06 21:22
有个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 2017-11-06 22:17
刘大师,我是新手,最近在学习界面设计,看了您的代码,想请教下两个问题:
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 2017-11-06 22:51
刚看了下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 2017-11-07 08:30
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 2017-11-08 11:13
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));
[attachment=18132]

victoire 2017-11-17 09:11
很好的呢,借鉴下

vitty1984 2017-12-15 16:07
点击最小化按钮,好像不起作用

一只小鱼 2018-01-11 13:49
学习了,刘大师

核心科技 2018-01-11 19:45
这两天我在用纯代码实现该功能,因水平问题,遇到好多问题,感觉心好累啊。

petrelli1112 2018-01-12 15:05

核心科技 2018-01-14 13:11
我用纯代码终于实现了,后续功能还要丰富一下。等做好了拿出来分享一下。

新垣结衣 2018-01-17 13:43
真的很感谢分享的楼主~~~感谢感谢

kuainq 2018-03-05 13:05
值得借鉴,支持!

rock1411 2018-03-05 20:18
谢谢楼主分享,学习了

xue6_xi6 2018-04-02 10:16
非常感谢楼主的分享!!!

liuyuanan 2018-05-26 11:16
  

171887239 2019-07-29 17:19

xt1505 2019-09-14 19:38
非常感谢,学习了

luoshangying 2020-03-31 18:00
您好,我下载的压缩包大小只有4kb。

xiaokelecc 2020-06-19 13:25
非常感谢分享

papabbb 2020-06-30 10:45
为什么我下载了解压失败呢?资源出问题了吗?

ncience 2020-11-12 11:27
下不了呀,刘大师能不能受累发下邮箱 925058631@qq.com 谢谢大师拉

18921600177 2021-01-08 10:29
这个界面挺简约的,非常棒。刘大神厉害了!!!!

mountainhigh 2021-02-09 12:03
真的很感谢分享的楼主

benn6821 2021-03-12 10:30
感谢分享!!!!

iamtsl 2021-04-12 10:16
感谢。。。。下下来学习了~!

rootbook 2021-08-12 15:59
作为一个界面布局跟渲染是一个很好的学习例子

fealee 2021-12-07 14:45
谢谢



查看完整版本: [-- Qt编写通用顶部导航源码 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled