转自 --》 http://blog.sina.com.cn/s/blog_a6fb6cc90101dech.html

总结一下,在开发Qt的过程中的一些技巧!可遇而不可求。。。

一、主界面

1、无边框

setWindowFlags(Qt::FramelessWindowHint)

2、界面始终位于顶部位置

setWindowFlags(Qt::WindowStaysOnTopHint)

3、任务栏图标点击时进行显示/不显示切换

setWindowFlags(Qt::WindowMinimizeButtonHint)

4、隐藏任务栏显示

setWindowFlags(Qt::Tool | Qt::X11BypassWindowManagerHint)

5、关闭按钮实现的功能

hide(); //进行界面隐藏,但是显示托盘,可通过点击托盘实现界面的重新显示

quit(); //退出系统

6、绘制背景图片并且实现圆角效果

void LoginDialog::paintEvent(QPaintEvent *)

{

QPainter painter(this);

        QBrush brush;

        brush.setTextureImage(QImage(background_image)); //背景图片

        painter.setBrush(brush);

        painter.setPen(Qt::black);  //边框色

        painter.drawRoundedRect(this->rect(), 5, 5); //圆角5像素

}

7、设置应用程序的字体

QFont font("Courier", 10, QFont::Normal, false);

QApplication::setFont(font);

8、设置组件字体

    QFont font = this->font();
    font.setFamily("Courier");  //字体名称
    font.setPixelSize(16);  //字体点大小
    font.setPointSize(18);  //字体像素大小
    font.setBold(true);  //是否加粗
    font.setItalic(true);  //是否斜体
    font.setUnderline(true);  //是否下划线
    this->setFont(font);

字体风格,包括类型、大小、是否加粗、是否斜体等!

也可以使用:setStyleSheet("text-align:center; font-size:18px; font-weight:bold; font-style:Courier; color:white; ");

setAlignment(Qt::AlignCenter);  //设置对齐方式

二、全屏显示与还原

关于这个问题,当做一个大的标题来讨论,因为比起其它小技巧要稍微复杂一些!

全屏显示:

1、遮挡任务栏:

showFullScreen()、showMaximized()这两个都可以!

2、不遮挡任务栏:

void MainWidget::showMaximize()

{

//若已经最大化

if(is_max)

{

//恢复界面位置,并设置按钮图标为最大化图标,提示“最大化”

this->setGeometry(location);

max_button->setIcon(QIcon("maxbtn"));

max_button->setToolTip(tr("max"));

}

else

{

//设定当前界面的位置,还原时使用

location = this->geometry();

//获取桌面位置,设置为最大化,并设置按钮图标为还原图标,提示“还原”

QDesktopWidget *desk = QApplication::desktop();

this->setGeometry(desk->availableGeometry());

max_button->setIcon(QIcon("restorbtn"));

max_button->setToolTip(tr("restor"));

}

is_max = !is_max;

}

注意:窗口既然可以最大化,当然还要进行还原,is_max为一个bool值变量,表示窗口是否最大化,初始值为false。location为桌面的位置,每次最大化开始先记录当前的位置,等待还原时候使用。

三、QSS样式

1、QComboBox:

combo_box->setStyleSheet("QComboBox{border:1px solid gray;}"

  "QComboBox QAbstractItemView::item{height:25px;}"

  "QComboBox::down-arrow{image:url(:/icon/arrowdown);}"

  "QComboBox::drop-down{border:0px;}");

 combo_box->setView(new QListView());

(包括设置下拉箭头、下拉选项高度等)、

2、QSpinBox:

spin_box->setStyleSheet("QSpinBox{border:1px solid gray;}"

  "QSpinBox::up-button{image:url(:/icon/arrow_up);}"

  "QSpinBox::down-button{image:url(:/icon/arrow_down);}");

3、QMenu:

QMenu{

padding:5px;

background:white;

border:1px solid gray;

}

QMenu::item{

padding:0px 40px 0px 30px;

height:25px;

}

QMenu::item:selected:enabled{

background:lightgray;

color:white;

}

QMenu::item:selected:!enabled{

background:transparent;

}

QMenu::separator{

height:1px;

background:lightgray;

margin:5px 0px 5px 0px;

}

4、QSlider:

QSlider::groove:horizontal{

border:0px;

height:4px;

}

QSlider::sub-page:horizontal{

background:white;

}

QSlider::add-page:horizontal{

background:lightgray;

}

QSlider::handle:horizontal{

background:white;

width:10px;

border-radius:5px;

margin:-3px 0px -3px 0px;

}

5、QCheckBox:

QCheckBox{

spacing: 2px;

}

QCheckBox::indicator {

width: 20px;

height: 20px;

}

QCheckBox::indicator:unchecked {

image: url(:/login/checkbox);

}

QCheckBox::indicator:unchecked:hover {

image: url(:/login/checkbox_hover);

}

QCheckBox::indicator:unchecked:pressed {

image: url(:/login/checkbox_press);

}

QCheckBox::indicator:checked {

image: url(:/login/checkbox_selected);

}

QCheckBox::indicator:checked:hover {

image: url(:/login/checkbox_selected_hover);

}

QCheckBox::indicator:checked:pressed {

image: url(:/login/checkbox_selected_press);

}

6、QScrollBar:

QScrollBar{

background:transparent;

width: 10px;

}

QScrollBar::handle{

background:rgb(180, 180, 180, 150);

}

QScrollBar::handle:hover{

background:rgb(150, 150, 150, 180);

}

QScrollBar::add-page{

background:transparent;

}

QScrollBar::sub-page{

background:transparent;

}

QScrollBar::sub-line{

background:transparent;

}

QScrollBar::add-line{

background:transparent;

}

一般也可以使用QPalette

QPalette palette;

palette.setBrush(QPalette::WindowText, QBrush(Qt::white));

check_box->setPalette(palette);

check_box->setStyleSheet("color:white");

调色板类QPalette提供了颜色角色(color roles)的概念,指当前界面中颜色的职责,通过枚举变量

QPalette::ColorRole来定义,比较常用的角色有:

QPalette::Window  通常指窗口部件背景色

QPalette::WindowText  通常指窗口部件的前景色

QPalette::Base  指文本的背景色(QTextEdit、QLineEdit等)

QPalette::Text  与QPalette::Base一块使用,指文本输入窗口部件前景色

QPalette::Button   指按钮窗口部件的背景色

QPalette::ButtonText  指按钮窗口部件的前景色

以上是遇到的常用但有资料较少的组件的样式,注重细节才能做出好的产品!

有待完善。。。

Qt之界面实现技巧-- 窗体显示,绘制背景,圆角,QSS样式的更多相关文章

  1. WPF界面设计技巧(4)—自定义列表项样式

    原文:WPF界面设计技巧(4)-自定义列表项样式 有前面修改按钮样式的基础,我们可以尝试来定制一个即好看又好用的 ListBox ,今天先来讲“好看”部分. 打开 Microsoft Visual S ...

  2. 转载:Qt之界面实现技巧

    总结一下,在开发Qt的过程中的一些技巧!可遇而不可求... 一.主界面 1.窗口 最小化 最大化 关闭按钮.显示状态自定义 setWindowFlags(Qt::CustomizeWindowHint ...

  3. Qt之界面实现技巧

    一.主界面 1.窗口 最小化 最小化 关闭按钮 显示状态自定义 setWindowFlags(Qt::CustomireWindowHint); setWindowFlags(Qt::WindowCl ...

  4. [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...

  5. WPF界面设计技巧(1)—不规则窗体图文指南

    原文:WPF界面设计技巧(1)-不规则窗体图文指南 初到园子,奉上第一篇入门级教程,请勿见笑. 以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理.而 ...

  6. [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-opengl-widget-per-visualizzare-imm ...

  7. WPF界面设计技巧(3)—实现不规则动画按钮

    原文:WPF界面设计技巧(3)-实现不规则动画按钮 发布了定义WPF按钮的教程后,有朋友问能否实现不规则形状的按钮,今天我们就来讲一下不规则按钮的制作. 不规则按钮的做法实际上和先前我们做不规则窗体的 ...

  8. WPF界面设计技巧(6)—玩玩数字墨水手绘涂鸦

    原文:WPF界面设计技巧(6)-玩玩数字墨水手绘涂鸦 想让你的程序支持鼠标及手写笔涂鸦吗?只要敲入“<InkCanvas/>”这几个字符,你就会领悟什么叫“很好很强大”,今天我们来做一个手 ...

  9. 使用Qss设置QT程序界面的样式和皮肤

    1         使用Qss设置QT程序界面的样式和皮肤 1.1  Qss的功能 Qt程序界面中控件的背景图片.大小.字体颜色.字体类型.按钮状态变化等属性可以通过Qss文件来设置,美化UI界面.实 ...

随机推荐

  1. angularjs2中的父子组件通信

    父组件模板中引用子组件 // father template: ... <child-item [name] = "fatherItemName" > </chi ...

  2. Cygwin 版本的 Curl 安装,提取,使用笔记

    Cygwin 版本的 Curl 安装,提取,使用笔记 Cygwin 版本的 Curl 使其恢复 HTTPS 请求功能Cygwin 版本的 Curl 依赖的 DLL 清单提取 Cygwin 版本的 Cu ...

  3. Android Activity去除标题栏和状态栏

    一.在代码中设置public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除ti ...

  4. 【Github】之突然访问不了Github地址

    访问Github突然上不去了 解决办法: 一.修改hosts 1.打开Dns检测|Dns查询 - 站长工具2.在检测输入栏中输入http://github.com官网3.把检测列表里的TTL值最小的I ...

  5. 常用PhpStorm 快捷键

    函数列表 打开某一个源码文件后,保证鼠标焦点在源文件内,按键盘组合键: alt + 7 返回原文件导航:双击最上面的工程名即可 PhpStorm折叠文件内所有函数 按下快捷`Ctrl`+`Shift` ...

  6. redis php 执行命令时,单引号和双引号的区别。

    #今天遇到一个坑爹的问题,写成单引号就不行,被原样输出了. /** *判断key是否存在 */ function exists_key($key){ return $this->cmd('EXI ...

  7. 浅谈 MVP in Android(转)

    我自己写的demo:https://pan.baidu.com/s/1dFImVYD 一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让 ...

  8. RecyclerView 踩坑

    一.RecyclerView设置拖动后怎么监听拖动的开始和结束 ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.Cal ...

  9. shell脚本注释方法

    [1]单行注释 利用“#”对单行进行注释. 示例应用,新建文本,命名为test_single.sh 输入内容: # 单行注释 echo '单行注释' echo '123' # echo '456' e ...

  10. ORA-24408: could not generate unique server group name

    一台新虚拟机,CentOS 6.5系统,用lnmp一键安装包安装好Nginx + PHP环境,再安装Oracle客户端,准备搭建PHP连接Oracle,访问oracle.php,测试连接Oracle的 ...