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;

}

7、QStatusBar

QStatusBar::item{

border: 0px;

}

//不存在分隔线

一般也可以使用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 指按钮窗口部件的前景色

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

时间: 2024-11-13 04:06:18

Qt之界面实现技巧的相关文章

转载:Qt之界面实现技巧

总结一下,在开发Qt的过程中的一些技巧!可遇而不可求... 一.主界面 1.窗口 最小化 最大化 关闭按钮.显示状态自定义 setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮 setWindowFlags(Qt::WindowFlags type) Qt::FrameWindowHint:没有边框的窗口 Qt::WindowStaysOnTopHint:  //总

用户界面设计经验分享:界面设计技巧分享

如此有用的文章我已记不得是什么时候发现的了,但在看完的那一刻便想将之翻译,分享给大家自己也受用. 时间过了很久,来到了2014年,终于静下心来花了大把时间连同图片一起译成了中文.像我这样业余的翻译六级分数只够及格的程序员,不敢说做到信雅达,但求意思到位. 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的掌控.同时用户也可以一目了然内容.而多列而已则会有分散用户注意力的风险使你的主旨无法很好表达.最好的做法是用一个有逻辑的叙述来引导用户并且在文末给出你的操作按钮. 2 放出礼品往往更具

Qt编程的一些技巧

1.Qt程序在运行过程中,调用函数(如lcdNumber->display(num))显示数据到界面上时,并不会马上刷新屏幕显示,而是要等主程序运行到函数a.exec()时,才刷新屏幕,如下 因此想在循环中刷新界面显示数据,需要在显示函数之后加上函数 qApp->processEvents(); 就可以实现刷新屏幕. 2.Qt中隐藏鼠标指针和免去终端中运行程序时需要输参数-qws 在main函数中 QApplication a(argc, argv,QApplication::GuiServe

Qt 中界面间的执行调用QDialog::Accepted

Qt中界面的简单调用model->show();model的界面就会显示出来,早先用QT开发的时候,这个方法用的比较多,随着后来对程序的需求增多,这个方法已经不太合适 了. 比如说,我要调用一个界面,并且把参数传递过去,介于C++的封装和安全性,是不建议直接调用类中的成员变量或过多的调用成员函数,所以,发现了另一种比较灵活的方法: 实例:在A类中调用B类 1.在A类中定义一个B类的对象,直接调用B类中的成员函数 2.在B类的成员函数中,加入语句:this->exec();B界面就出来了. 3.

解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!

本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开Windows下的项目出现乱码,选择编码为"GB2312"即可! 现在主要来说说程序运行后无法显示中文或者出现乱码的情况,被这个问题困扰了很久,网上看了很多资料贴子都没有解决,所有该添加的都添加了都没办法, http://bbs.csdn.net/topics/390610841?page=

界面设计技巧

如此有用的文章我已记不得是什么时候发现的了,但在看完的那一刻便想将之翻译,分享给大家自己也受用. 时间过了很久,来到了2014年,终于静下心来花了大把时间连同图片一起译成了中文.像我这样业余的翻译六级分数只够及格的程序员,不敢说做到信雅达,但求意思到位. 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的掌控.同时用户也可以一目了然内容.而多列而已则会有分散用户注意力的风险使你的主旨无法很好表达.最好的做法是用一个有逻辑的叙述来引导用户并且在文末给出你的操作按钮. 2 放出礼品往往更具

外部进程嵌入到Qt进程界面(使用QWindow::fromWinId)

有时候需要做框架集成的东西,需要把其他客户端像组件一样集成到一个客户端中,类似于一个软件集成的平台客户端,统一用一个中心管理的客户端做类似于控制面板一样的东西去调用不同的软件.此时就必须相应不同的点击图标的事件去嵌入到主界面里面.下面简单的对windows平台上面Qt的界面中嵌入系统自带的计算机程序做简单的说明. 一.首先是获取计算机程序的窗口类名称,只要利用的是VS中的Spy++工具,在vs菜单“工具”中打开之后如图所示.查找计算器的窗口句柄并获取到具体的类名. CTRL+F,搜索句柄,获取到

Qt之界面数据存储与获取(使用setUserData()和userData())

在GUI开发中,往往需要在界面中存储一些有用的数据,这些数据可以来配置文件.注册表.数据库.或者是server. 无论来自哪里,这些数据对于用户来说都是至关重要的,它们在交互过程中大部分都会被用到,例如:单击一个用户头像,显示该用户的详细信息(等级.昵称.姓名.个人说明). 简述 常见接口 数据源 setData和data 单独存储 整体存储 setItemData和itemData setUserData和userData 自定义数据 常见接口 Qt中,可以通过绝大部分已有的接口来存数数据.获

QSS美化Qt程序以及最近做的Qt项目界面

什么是QSS QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制.QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器要少,可以使用的QSS属性也要少很多,并且并不是所有的属性都可以用在Qt的所有控件上. QSS在Qt程序中的使用办法 首先将QSS写在文件中,然后利用如下的代码设置QSS: MainWidget::MainWidget(QWidget *parent) : QWidget(parent), ui(new