QtQuickQml自定义控件(3)-自定义对话框

QtQuickQml自定义控件(3)-自定义对话框,第1张

目前自定义窗体涉及到的几种效果

首先我们来看看QtQuick默认窗体在Windows10上的表现

可以看出来 贴近桌面边缘时的效果, 这是windows10的系统特性, 并不是QtQuick的效果
然后我们自定义窗体一般会选择自定义标题栏, 我们去掉标题栏 再试试

然后默认的窗体效果没有了
为此如果要保持自定义风格和窗体的系统特性, 只能开发了

首先, 拖放到桌面边界 鼠标出现波纹放大的效果

看样子还是可以了 桌面顶部和左侧也是同样的效果
然后再加上窗体位置的设置

基本上还是达到效果了

然后下面进入自定义的各个环节
首先是标题栏的logo图标 标题 这个两个都比较好现实
然后窗体的最小化, 最大化, 以及关闭按钮, 这些可以用一个Row 加上自定义按钮就搞定了

然后可以增加窗体的阴影效果
这个可以使用QtGraphicalEffects图形特效中的DropShadow

接下来我们看看圆角效果

然后我们自由拉伸的功能

首先 我们规划处鼠标可拉伸的区域出来, 这个是可以设置的

然后当鼠标进入对应的区域时 改变鼠标显示状态

最后我们看看异形窗体
这块同样使用QtGraphicalEffects图形特效中的OpacityMask

访问三峰驼Qml控件大全

<img src=">

QML (Qt Markup Language)是基于JavaScript、宣告式编程的编程语言,用于设计用户界面为主的应用程序。它是Qt Quick,诺基亚开发的用户界面创建包的一部分。

QML 主要用于移动应用程序,注重于触控输入、流畅的动画(60张/秒)和用户体验。QML documents 描述元素的对象树。

Qt 附带的QML 模块包括原始图形构建块(例如,矩形、图像)、建模组件;行为组件(例如,TapHandler、DragHandler、State、Transition、Animation)以及更复杂的组件控件(例如,按钮、滑块、抽屉、菜单)。

这些元素可以组合起来构建从简单的按钮和滑块到完整的支持 Internet 的程序的复杂组件。

QML 元素可以通过标准JavaScript内联和通过包含的 js 文件进行扩充。元素也可以通过使用 Qt 框架的C++组件无缝集成和扩展。

QML 是语言;它的 JavaScript 运行时是自定义的 V4 引擎,自 Qt 52 起;而Qt Quick是2D场景图和基于它的UI框架。这些都是 Qt Declarative 模块的一部分,而该技术不再称为 Qt Declarative。

QML 和 JavaScript 代码可以使用 Qt Quick Compiler 编译成原生 C++ 二进制文件。或者,还有一种 QML 缓存文件格式,它动态存储 QML 的编译版本,以便在下次运行时更快地启动。

开发工具

由于 QML 和 JavaScript 非常相似,几乎所有支持 JavaScript 的代码编辑器都可以使用。

但是,自 21 版以来的免费跨平台 IDEQt Creator和许多其他 IDE 中都提供了对语法突出显示、代码完成、集成帮助和所见即所得编辑器的全面支持。

qml 可执行文件可用于将 QML 文件作为脚本运行。如果 QML 文件以shebang开头,则它可以直接执行。为部署打包应用程序(尤其是在移动平台上)通常涉及编写一个简单的 C++ 启动器并将必要的 QML 文件打包为资源。

去年做过这个,给你我的程序你参考看看,能调的通。
1设计要求
设计一个数字时钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且设置的时间显示要求闪烁。
2设计原理
计数器在正常工作下是对1Hz的频率计数,在调整时间状态下是对需要调整的时间模块进行计数;控制按键用来选择是正常计数还是调整时间并决定调整时、分、秒;当置数键按下时,表示相应的调整块要加一,如果对小时调整时,显示时间的LED数码管将闪烁且当置数按键按下时,相应的小时显示要加一。显示时间的LED数码管均用动态扫描显示来实现。其原理图如9-7-1所示。
module clock(seg7,scan,clk,clr,en,mode,inc);
output[6:0] seg7;
output[5:0] scan;
input clk; //时钟输入20MHz
input clr; //清零端
input en; //暂停信号
input mode; //控制信号,用于选择模式
input inc; //置数信号
reg[6:0] seg7; //7段显示控制信号(abcdefg)
reg[5:0] scan; //数码管地址选择信号
reg[1:0] state; //定义4种状态
reg[3:0] qhh,qhl,qmh,qml,qsh,qsl; //小时、分、秒的高位和低位
reg[3:0] data;
reg[2:0] cnt; //扫描数码管的计数器
reg clk1khz,clk1hz,clk2hz; //1kHz、1Hz、2Hz的分频信号
reg[2:0] blink; //闪烁信号
reg inc_reg;
reg[7:0] sec,min;
reg[7:0] hour;
parameter state0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;
reg[13:0] count1;
reg[8:0] count2;
reg[8:0] count3;
//-----------------------------1kHz分频,用于扫描数码管地址--------
always @(posedge clk)
begin
if(count1=='d10000)
begin clk1khz<=~clk1khz;count1<=0; end
else
begin count1<=count1+1; end
end
//---------------------- 1Hz分频,用于计时-----------------------------
always @(posedge clk1khz)
begin
if(count2=='d500)
begin clk1hz<=~clk1hz;count2<=0; end
else
begin count2<=count2+1; end
if(count3=='d250) //2Hz分频,用于数码管闪烁
begin clk2hz<=~clk2hz;count3<=0; end
else
begin count3<=count3+1; end
if(cnt=='d5) //数码管动态扫描计数
begin cnt<='d0; end
else
begin cnt<=cnt+1; end
end
//------------------------- 模式转换-------------------------
always @(posedge mode)
begin
if(clr)
begin state<=state0; end
else
begin state<=state+1; end
end
//-------------------------状态控制-----------------------------
always @(posedge clk1hz)
begin
if(en)
begin hour<=hour;
min<=min;
sec<=sec;
end
else if(clr)
begin hour<=0;
min<=0;
sec<=0;
end
else
begin
case(state)
state0:begin //模式0,正常计时
if(sec==8'd59)
begin sec<='d0;
if(min==8'd59)
begin min<='d0;
if(hour==8'd23)
begin hour<=8'd0; end
else
begin hour<=hour+1; end
end
else
begin min<=min+1; end
end
else
begin sec<=sec+1; end
end
state1:begin //模式1,设定小时时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(hour==8'd23)
begin hour<=8'd0; end
else
begin hour<=hour+1; end
end
end
else
begin inc_reg<=0; end
end
state2:begin //模式2,设定分钟时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(min==8'd59)
begin min<=8'd0; end
else
begin min<=min+1; end
end
end
else
begin inc_reg<=0; end
end
state3:begin //模式3,设定秒钟时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(sec==8'd59)
begin sec<=8'd0; end
else
begin sec<=sec+1; end
end
end
else
begin inc_reg<=0; end
end
endcase
end
end
//--------------------------------当进行时间设定时,令数码管闪烁-----------------------
always @(state,clk2hz)
begin
case(state)
state0:blink[2:0]<='b111;
state1:blink[2]<=clk2hz;
state2:blink[1]<=clk2hz;
state3:blink[0]<=clk2hz;
default:blink[2:0]<='bx;
endcase
end
//--------------------------秒计数的十进制转BCD码---------------------------
always @(sec)
begin
case(sec[7:0])
8'd0:begin qsh[3:0]<='b0000;qsl[3:0]<='b0000; end
8'd1:begin qsh[3:0]<='b0000;qsl[3:0]<='b0001; end
8'd2:begin qsh[3:0]<='b0000;qsl[3:0]<='b0010; end
8'd3:begin qsh[3:0]<='b0000;qsl[3:0]<='b0011; end
8'd4:begin qsh[3:0]<='b0000;qsl[3:0]<='b0100; end
8'd5:begin qsh[3:0]<='b0000;qsl[3:0]<='b0101; end
8'd6:begin qsh[3:0]<='b0000;qsl[3:0]<='b0110; end
8'd7:begin qsh[3:0]<='b0000;qsl[3:0]<='b0111; end
8'd8:begin qsh[3:0]<='b0000;qsl[3:0]<='b1000; end
8'd9:begin qsh[3:0]<='b0000;qsl[3:0]<='b1001; end
8'd10:begin qsh[3:0]<='b0001;qsl[3:0]<='b0000; end
8'd11:begin qsh[3:0]<='b0001;qsl[3:0]<='b0001; end
8'd12:begin qsh[3:0]<='b0001;qsl[3:0]<='b0010; end
8'd13:begin qsh[3:0]<='b0001;qsl[3:0]<='b0011; end
8'd14:begin qsh[3:0]<='b0001;qsl[3:0]<='b0100; end
8'd15:begin qsh[3:0]<='b0001;qsl[3:0]<='b0101; end
8'd16:begin qsh[3:0]<='b0001;qsl[3:0]<='b0110; end
8'd17:begin qsh[3:0]<='b0001;qsl[3:0]<='b0111; end
8'd18:begin qsh[3:0]<='b0001;qsl[3:0]<='b1000; end
8'd19:begin qsh[3:0]<='b0001;qsl[3:0]<='b1001; end
8'd20:begin qsh[3:0]<='b0010;qsl[3:0]<='b0000; end
8'd21:begin qsh[3:0]<='b0010;qsl[3:0]<='b0001; end
8'd22:begin qsh[3:0]<='b0010;qsl[3:0]<='b0010; end
8'd23:begin qsh[3:0]<='b0010;qsl[3:0]<='b0011; end
8'd24:begin qsh[3:0]<='b0010;qsl[3:0]<='b0100; end
8'd25:begin qsh[3:0]<='b0010;qsl[3:0]<='b0101; end
8'd26:begin qsh[3:0]<='b0010;qsl[3:0]<='b0110; end
8'd27:begin qsh[3:0]<='b0010;qsl[3:0]<='b0111; end
8'd28:begin qsh[3:0]<='b0010;qsl[3:0]<='b1000; end
8'd29:begin qsh[3:0]<='b0010;qsl[3:0]<='b1001; end
8'd30:begin qsh[3:0]<='b0011;qsl[3:0]<='b0000; end
8'd31:begin qsh[3:0]<='b0011;qsl[3:0]<='b0001; end
8'd32:begin qsh[3:0]<='b0011;qsl[3:0]<='b0010; end
8'd33:begin qsh[3:0]<='b0011;qsl[3:0]<='b0011; end
8'd34:begin qsh[3:0]<='b0011;qsl[3:0]<='b0100; end
8'd35:begin qsh[3:0]<='b0011;qsl[3:0]<='b0101; end
8'd36:begin qsh[3:0]<='b0011;qsl[3:0]<='b0110; end
8'd37:begin qsh[3:0]<='b0011;qsl[3:0]<='b0111; end
8'd38:begin qsh[3:0]<='b0011;qsl[3:0]<='b1000; end
8'd39:begin qsh[3:0]<='b0011;qsl[3:0]<='b1001; end
8'd40:begin qsh[3:0]<='b0100;qsl[3:0]<='b0000; end
8'd41:begin qsh[3:0]<='b0100;qsl[3:0]<='b0001; end
8'd42:begin qsh[3:0]<='b0100;qsl[3:0]<='b0010; end
8'd43:begin qsh[3:0]<='b0100;qsl[3:0]<='b0011; end
8'd44:begin qsh[3:0]<='b0100;qsl[3:0]<='b0100; end
8'd45:begin qsh[3:0]<='b0100;qsl[3:0]<='b0101; end
8'd46:begin qsh[3:0]<='b0100;qsl[3:0]<='b0110; end
8'd47:begin qsh[3:0]<='b0100;qsl[3:0]<='b0111; end
8'd48:begin qsh[3:0]<='b0100;qsl[3:0]<='b1000; end
8'd49:begin qsh[3:0]<='b0100;qsl[3:0]<='b1001; end
8'd50:begin qsh[3:0]<='b0101;qsl[3:0]<='b0000; end
8'd51:begin qsh[3:0]<='b0101;qsl[3:0]<='b0001; end
8'd52:begin qsh[3:0]<='b0101;qsl[3:0]<='b0010; end
8'd53:begin qsh[3:0]<='b0101;qsl[3:0]<='b0011; end
8'd54:begin qsh[3:0]<='b0101;qsl[3:0]<='b0100; end
8'd55:begin qsh[3:0]<='b0101;qsl[3:0]<='b0101; end
8'd56:begin qsh[3:0]<='b0101;qsl[3:0]<='b0110; end
8'd57:begin qsh[3:0]<='b0101;qsl[3:0]<='b0111; end
8'd58:begin qsh[3:0]<='b0101;qsl[3:0]<='b1000; end
8'd59:begin qsh[3:0]<='b0101;qsl[3:0]<='b1001; end
default: begin qsh[3:0]<='bx;qsl[3:0]<='bx; end
endcase
end
//---------------------------分计数的十进制转BCD码--------------------
always @(min)
begin
case(min[7:0])
8'd0:begin qmh[3:0]<='b0000;qml[3:0]<='b0000; end
8'd1:begin qmh[3:0]<='b0000;qml[3:0]<='b0001; end
8'd2:begin qmh[3:0]<='b0000;qml[3:0]<='b0010; end
8'd3:begin qmh[3:0]<='b0000;qml[3:0]<='b0011; end
8'd4:begin qmh[3:0]<='b0000;qml[3:0]<='b0100; end
8'd5:begin qmh[3:0]<='b0000;qml[3:0]<='b0101; end
8'd6:begin qmh[3:0]<='b0000;qml[3:0]<='b0110; end
8'd7:begin qmh[3:0]<='b0000;qml[3:0]<='b0111; end
8'd8:begin qmh[3:0]<='b0000;qml[3:0]<='b1000; end
8'd9:begin qmh[3:0]<='b0000;qml[3:0]<='b1001; end
8'd10:begin qmh[3:0]<='b0001;qml[3:0]<='b0000; end
8'd11:begin qmh[3:0]<='b0001;qml[3:0]<='b0001; end
8'd12:begin qmh[3:0]<='b0001;qml[3:0]<='b0010; end
8'd13:begin qmh[3:0]<='b0001;qml[3:0]<='b0011; end
8'd14:begin qmh[3:0]<='b0001;qml[3:0]<='b0100; end
8'd15:begin qmh[3:0]<='b0001;qml[3:0]<='b0101; end
8'd16:begin qmh[3:0]<='b0001;qml[3:0]<='b0110; end
8'd17:begin qmh[3:0]<='b0001;qml[3:0]<='b0111; end
8'd18:begin qmh[3:0]<='b0001;qml[3:0]<='b1000; end
8'd19:begin qmh[3:0]<='b0001;qml[3:0]<='b1001; end
8'd20:begin qmh[3:0]<='b0010;qml[3:0]<='b0000; end
8'd21:begin qmh[3:0]<='b0010;qml[3:0]<='b0001; end
8'd22:begin qmh[3:0]<='b0010;qml[3:0]<='b0010; end
8'd23:begin qmh[3:0]<='b0010;qml[3:0]<='b0011; end
8'd24:begin qmh[3:0]<='b0010;qml[3:0]<='b0100; end
8'd25:begin qmh[3:0]<='b0010;qml[3:0]<='b0101; end
8'd26:begin qmh[3:0]<='b0010;qml[3:0]<='b0110; end
8'd27:begin qmh[3:0]<='b0010;qml[3:0]<='b0111; end
8'd28:begin qmh[3:0]<='b0010;qml[3:0]<='b1000; end
8'd29:begin qmh[3:0]<='b0010;qml[3:0]<='b1001; end
8'd30:begin qmh[3:0]<='b0011;qml[3:0]<='b0000; end
8'd31:begin qmh[3:0]<='b0011;qml[3:0]<='b0001; end
8'd32:begin qmh[3:0]<='b0011;qml[3:0]<='b0010; end
8'd33:begin qmh[3:0]<='b0011;qml[3:0]<='b0011; end
8'd34:begin qmh[3:0]<='b0011;qml[3:0]<='b0100; end
8'd35:begin qmh[3:0]<='b0011;qml[3:0]<='b0101; end
8'd36:begin qmh[3:0]<='b0011;qml[3:0]<='b0110; end
8'd37:begin qmh[3:0]<='b0011;qml[3:0]<='b0111; end
8'd38:begin qmh[3:0]<='b0011;qml[3:0]<='b1000; end
8'd39:begin qmh[3:0]<='b0011;qml[3:0]<='b1001; end
8'd40:begin qmh[3:0]<='b0100;qml[3:0]<='b0000; end
8'd41:begin qmh[3:0]<='b0100;qml[3:0]<='b0001; end
8'd42:begin qmh[3:0]<='b0100;qml[3:0]<='b0010; end
8'd43:begin qmh[3:0]<='b0100;qml[3:0]<='b0011; end
8'd44:begin qmh[3:0]<='b0100;qml[3:0]<='b0100; end
8'd45:begin qmh[3:0]<='b0100;qml[3:0]<='b0101; end
8'd46:begin qmh[3:0]<='b0100;qml[3:0]<='b0110; end
8'd47:begin qmh[3:0]<='b0100;qml[3:0]<='b0111; end
8'd48:begin qmh[3:0]<='b0100;qml[3:0]<='b1000; end
8'd49:begin qmh[3:0]<='b0100;qml[3:0]<='b1001; end
8'd50:begin qmh[3:0]<='b0101;qml[3:0]<='b0000; end
8'd51:begin qmh[3:0]<='b0101;qml[3:0]<='b0001; end
8'd52:begin qmh[3:0]<='b0101;qml[3:0]<='b0010; end
8'd53:begin qmh[3:0]<='b0101;qml[3:0]<='b0011; end
8'd54:begin qmh[3:0]<='b0101;qml[3:0]<='b0100; end
8'd55:begin qmh[3:0]<='b0101;qml[3:0]<='b0101; end
8'd56:begin qmh[3:0]<='b0101;qml[3:0]<='b0110; end
8'd57:begin qmh[3:0]<='b0101;qml[3:0]<='b0111; end
8'd58:begin qmh[3:0]<='b0101;qml[3:0]<='b1000; end
8'd59:begin qmh[3:0]<='b0101;qml[3:0]<='b1001; end
default:begin qmh[3:0]<='bx;qml[3:0]<='bx; end
endcase
end
//----------------------------小时计数的十进制转BCD码------------------------
always @(hour)
begin
case(hour)
8'd0:begin qhh[3:0]<='b0000;qhl[3:0]<='b0000; end
8'd1:begin qhh[3:0]<='b0000;qhl[3:0]<='b0001; end
8'd2:begin qhh[3:0]<='b0000;qhl[3:0]<='b0010; end
8'd3:begin qhh[3:0]<='b0000;qhl[3:0]<='b0011; end
8'd4:begin qhh[3:0]<='b0000;qhl[3:0]<='b0100; end
8'd5:begin qhh[3:0]<='b0000;qhl[3:0]<='b0101; end
8'd6:begin qhh[3:0]<='b0000;qhl[3:0]<='b0110; end
8'd7:begin qhh[3:0]<='b0000;qhl[3:0]<='b0111; end
8'd8:begin qhh[3:0]<='b0000;qhl[3:0]<='b1000; end
8'd9:begin qhh[3:0]<='b0000;qhl[3:0]<='b1001; end
8'd10:begin qhh[3:0]<='b0001;qhl[3:0]<='b0000; end
8'd11:begin qhh[3:0]<='b0001;qhl[3:0]<='b0001; end
8'd12:begin qhh[3:0]<='b0001;qhl[3:0]<='b0010; end
8'd13:begin qhh[3:0]<='b0001;qhl[3:0]<='b0011; end
8'd14:begin qhh[3:0]<='b0001;qhl[3:0]<='b0100; end
8'd15:begin qhh[3:0]<='b0001;qhl[3:0]<='b0101; end
8'd16:begin qhh[3:0]<='b0001;qhl[3:0]<='b0110; end
8'd17:begin qhh[3:0]<='b0001;qhl[3:0]<='b0111; end
8'd18:begin qhh[3:0]<='b0001;qhl[3:0]<='b1000; end
8'd19:begin qhh[3:0]<='b0001;qhl[3:0]<='b1001; end
8'd20:begin qhh[3:0]<='b0010;qhl[3:0]<='b0000; end
8'd21:begin qhh[3:0]<='b0010;qhl[3:0]<='b0001; end
8'd22:begin qhh[3:0]<='b0010;qhl[3:0]<='b0010; end
8'd23:begin qhh[3:0]<='b0010;qhl[3:0]<='b0011; end
default:begin qhh[3:0]<='bx;qhl[3:0]<='bx; end
endcase
end
//------------------------------数码管动态扫描-------------------------------------
always @(cnt,qhh,qhl,qmh,qml,qsh,qsl,blink)
begin
case(cnt)
3'b000:begin data[3:0]<=qsl[3:0];scan[5:0]<='b000001&{6{blink[0]}}; end
3'b001:begin data[3:0]<=qsh[3:0];scan[5:0]<='b000010&{6{blink[0]}}; end
3'b010:begin data[3:0]<=qml[3:0];scan[5:0]<='b000100&{6{blink[1]}}; end
3'b011:begin data[3:0]<=qmh[3:0];scan[5:0]<='b001000&{6{blink[1]}}; end
3'b100:begin data[3:0]<=qhl[3:0];scan[5:0]<='b010000&{6{blink[2]}}; end
3'b101:begin data[3:0]<=qhh[3:0];scan[5:0]<='b100000&{6{blink[2]}}; end
default:begin data<='bx;scan<='bx; end
endcase
end
//-----------------------------------7段译码----------------------------------------
always @(data)
begin
case(data[3:0])
4'b0000:seg7[6:0]=7'b1111110;
4'b0001:seg7[6:0]=7'b0110000;
4'b0010:seg7[6:0]=7'b1101101;
4'b0011:seg7[6:0]=7'b1111001;
4'b0100:seg7[6:0]=7'b0110011;
4'b0101:seg7[6:0]=7'b1011011;
4'b0110:seg7[6:0]=7'b1011111;
4'b0111:seg7[6:0]=7'b1110000;
4'b1000:seg7[6:0]=7'b1111111;
4'b1001:seg7[6:0]=7'b1111011;
default:seg7[6:0]=7'b0000000;
endcase
end
endmodule
具体的内容请参考周润景老师的那本书。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13386587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存