转载:Qt之界面实现技巧

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

一、主界面

1、窗口 最小化 最大化 关闭按钮、显示状态自定义

setWindowFlags(Qt::CustomizeWindowHint);

setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮

setWindowFlags(Qt::WindowFlags type)

Qt::FrameWindowHint:没有边框的窗口

Qt::WindowStaysOnTopHint:  //总在最上面的窗口

Qt::CustomizeWindowHint:  //自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏

Qt::WindowTitleHint  //显示窗口标题栏

Qt::WindowSystemMenuHint  //显示系统菜单

Qt::WindowMinimizeButtonHint  //显示最小化按钮

Qt::WindowMaximizeButtonHint  //显示最大化按钮

Qt::WindowMinMaxButtonsHint  //显示最小化按钮和最大化按钮

Qt::WindowCloseButtonHint  //显示关闭按钮

2、隐藏任务栏显示

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

3、关闭按钮实现的功能

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

quit(); //退出系统

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

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像素

}

5、设置应用程序的字体

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

QApplication::setFont(font);

6、设置组件字体

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);  //设置对齐方式

7、超链接

QLabel *url_label = new QLabel();

url_label->setOpenExternalLinks(true);//这句比较关键,也可以通过连接linkActivated信号到自定义槽函数中打开

url_label->setText(tr("Google"));

8、打开本地文件(夹)

QDesktopServices::openUrl(QUrl::fromLocalFile(local_file));

9、显示窗口并激活/提升

showNormal();
raise();
activateWindow();
 
10、设置滚动条值
textEdit->verticalScrollBar()->setValue(0);  //滚动到最顶层
textEdit->verticalScrollBar()->setValue(textEdit->verticalScrollBar()->maximum());  //滚动到最底层

二、全屏显示与还原

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

全屏显示:

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  指按钮窗口部件的前景色

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

有待完善。。。

注:

技术在于交流、沟通,转载请注明出处并保持作品的完整性。

作者:╰☆奋斗ing?孩子`  原文:http://blog.sina.com.cn/s/blog_a6fb6cc90101dech.html

时间: 2024-08-30 12:40:34

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

Qt之界面实现技巧

一.主界面 1.无边框 setWindowFlags(Qt::FramelessWindowHint) 2.界面始终位于顶部位置 setWindowFlags(Qt::WindowStaysOnTopHint) 3.任务栏图标点击时进行显示/不显示切换 setWindowFlags(Qt::WindowMinimizeButtonHint) 4.隐藏任务栏显示 setWindowFlags(Qt::Tool | Qt::X11BypassWindowManagerHint) 5.关闭按钮实现的功

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

如此有用的文章我已记不得是什么时候发现的了,但在看完的那一刻便想将之翻译,分享给大家自己也受用. 时间过了很久,来到了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开发界面程序

前言        Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程.2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具.2012年,Qt被Digia收购.2014年4月,跨平台集成开发环境Qt Creator 3.1

转载------------------关于android的一些技巧

Android eclipse中程序调试 一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoint菜单项即可. 2 在debug模式下运行程序进入调试状态:通过点击工具栏上的小虫按钮或者是在项目右键点击然后选择Debug As,Android Application菜单,启动程序的调试模式.第一次运行调试模式eclipse会弹出如下确认窗口 当程序运