Qt实现自定义按钮的三态效果
qt特效按钮
查看文章qt特效按鈕QPushButton[轉載]2010-01-29 13:22Reprintedfrom /index.php?title=AeroButton//Declaration#include <QtCore>#include <QtGui>class AeroButton : public QPushButton{Q_OBJECTpublic:AeroButton(QWidget * parent = 0);AeroButton(const QString & text, QWidget * parent = 0);AeroButton(const QIcon & icon, const QString & text, QWidget * parent = 0);virtual ~AeroButton();void setColor(QColor color) { m_color = color; }void setHighlight(QColor highlight) { m_highlight = highlight; }void setShadow(QColor shadow) { m_shadow = shadow; }//Range: 0.0 [invisible] - 1.0 [opaque]void setOpacity(qreal opacity) { m_opacity = opacity; }//Range: 0 [rectangle] - 99 [oval]void setRoundness(int roundness) { m_roundness = roundness; }protected:void paintEvent(QPaintEvent * pe);void enterEvent(QEvent * e);void leaveEvent(QEvent * e);void mousePressEvent(QMouseEvent * e);void mouseReleaseEvent(QMouseEvent * e);private:QRect calculateIconPosition(QRect button_rect, QSize icon_size);private:bool m_hovered;bool m_pressed;QColor m_color;QColor m_highlight;QColor m_shadow;qreal m_opacity;int m_roundness;};//Implementation#include "AeroButton.h"AeroButton::AeroButton(QWidget * parent): QPushButton(parent),m_hovered(false),m_pressed(false),m_color(Qt::gray),m_highlight(Qt::lightGray),m_shadow(Qt::black),m_opacity(1.0),m_roundness(0){}AeroButton::AeroButton(const QString & text, QWidget * parent) : QPushButton(text, parent),m_hovered(false),m_pressed(false),m_color(Qt::gray),m_highlight(Qt::lightGray),m_shadow(Qt::black),m_opacity(1.0),m_roundness(0){}AeroButton::AeroButton(const QIcon & icon, const QString & text, QWidget * parent): QPushButton(icon, text, parent),m_hovered(false),m_pressed(false),m_color(Qt::gray),m_highlight(Qt::lightGray),m_shadow(Qt::black),m_opacity(1.0),m_roundness(0){}AeroButton::~AeroButton(){}void AeroButton::paintEvent(QPaintEvent * pe){Q_UNUSED(pe);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);//test for state changesQColor button_color;if(this->isEnabled()){m_hovered ? button_color = m_highlight : button_color = m_color;if(m_pressed){button_color = m_highlight.darker(50);}}else{button_color = QColor(50, 50, 50);}QRect button_rect = this->geometry();//outlinepainter.setPen(QPen(QBrush(Qt::black), 2.0));QPainterPath outline;outline.addRoundedRect(0, 0, button_rect.width(),button_rect.height(), m_roundness, m_roundness);painter.setOpacity(m_opacity);painter.drawPath(outline);//gradientQLinearGradient gradient(0, 0, 0, button_rect.height());gradient.setSpread(QGradient::ReflectSpread);gradient.setColorAt(0.0, button_color);gradient.setColorAt(0.4, m_shadow);gradient.setColorAt(0.6, m_shadow);gradient.setColorAt(1.0, button_color);QBrush brush(gradient);painter.setBrush(brush);painter.setPen(QPen(QBrush(button_color), 2.0));//main buttonQPainterPath painter_path;painter_path.addRoundedRect(1, 1, button_rect.width() - 2, button_rect.height() - 2, m_roundness, m_roundness);painter.setClipPath(painter_path);painter.setOpacity(m_opacity);painter.drawRoundedRect(1, 1, button_rect.width() - 2, button_rect.height() - 2, m_roundness, m_roundness);//glass highlightpainter.setBrush(QBrush(Qt::white));painter.setPen(QPen(QBrush(Qt::white), 0.01)); painter.setOpacity(0.30);painter.drawRect(1, 1, button_rect.width() - 2, (button_rect.height() / 2) - 2);//textQString text = this->text();if(!text.isNull()){QFont font = this->font();painter.setFont(font);painter.setPen(Qt::white);painter.setOpacity(1.0);painter.drawText(0, 0, button_rect.width(), button_rect.height(), Qt::AlignCenter, text);}//iconQIcon icon = this->icon();if(!icon.isNull()){QSize icon_size = this->iconSize();QRect icon_position =this->calculateIconPosition(button_rect, icon_size); painter.setOpacity(1.0);painter.drawPixmap(icon_position,QPixmap(icon.pixmap(icon_size)));}}void AeroButton::enterEvent(QEvent * e){m_hovered = true;this->repaint();QPushButton::enterEvent(e);}void AeroButton::leaveEvent(QEvent * e){m_hovered = false;this->repaint();QPushButton::leaveEvent(e);}void AeroButton::mousePressEvent(QMouseEvent * e){m_pressed = true;this->repaint();QPushButton::mousePressEvent(e);}void AeroButton::mouseReleaseEvent(QMouseEvent * e){m_pressed = false;this->repaint();QPushButton::mouseReleaseEvent(e);}QRect AeroButton::calculateIconPosition(QRect button_rect, QSize icon_size){int x = (button_rect.width() - icon_size.width()) / 2;int y = (button_rect.height() - icon_size.height()) / 2; int width = icon_size.width();int height = icon_size.height();QRect icon_position;icon_position.setX(x);icon_position.setY(y);icon_position.setWidth(width);icon_position.setHeight(height);return icon_position;}//Usage#include "AeroButton.h"AeroButton * button = new AeroButton("Test", this);button->setColor(QColor(Qt::darkRed));button->setShadow(QColor(Qt::black));button->setHighlight(QColor(Qt::red));button->setRoundness(20);button->setOpacity(0.65);connect(button, SIGNAL(clicked()), myWidget, SLOT(handleClick()));。
QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例
QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例为了实现添加按钮点击弹出信息提示框的功能,我们可以使用Qt来创建一个窗口控制程序。
首先,我们需要创建一个Qt窗口应用程序项目。
在Qt Creator中选择"新建项目",然后选择"C++"和"Qt Widgets应用",填写项目名称和路径,然后点击"下一步"。
在下一个界面,可以选择使用预设的窗口模板。
选择一个适合的窗口模板,例如"MainWindow",然后点击"下一步"。
接下来,在"项目管理器"中,展开源文件夹,找到"mainwindow.cpp"文件。
双击打开该文件。
在"mainwindow.cpp"文件中,我们需要添加按钮和相应的点击事件。
如果不存在"MainWindow"类的构造函数,则需要手动创建构造函数。
我们可以在构造函数中添加按钮。
```cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)ui->setupUi(this);//创建按钮QPushButton *btn = new QPushButton("添加按钮", this);btn->setGeometry(100, 100, 100, 30);//连接按钮的点击事件到槽函数connect(btn, SIGNAL(clicked(), this, SLOT(showMessageBox());MainWindow::~MainWindowdelete ui;//槽函数:点击按钮弹出信息提示框void MainWindow::showMessageBoxQMessageBox::information(this, "提示", "按钮已点击");```在上面的代码中,我们首先在构造函数中创建了一个按钮,并设置了按钮的位置和尺寸。
QtQSS样式化菜单QmenuQAction
QtQSS样式化菜单QmenuQAction项⽬是⼀款平板上的软件,菜单放在了右下⾓,没有⽤qss设置样式之前,菜单⾮常的⼩,菜单项也都挤在了⼀块,设置样式后效果⾮常好。
先上⼀张效果图吧,可以看到QSS样式化后的菜单的特点:上下左右间距增⼤了,调整到很是的⼤⼩,菜单项⽬中间有⼀条间隔的横线区分各个菜单项,菜单中的QAction⿏标经过时菜单背景会变成蓝⾊等。
实现这种效果如果在Qt中⽤C++语句实现可能有些困难,我也没有这么做过,后来参考了Qt帮助⽂档的⼀些QSS的例⼦做出了这种效果。
具体实现做法将⼀下样式添加到Qt的QSS样式表⽂件中,要根据你的实际情况调整相应的长宽等值,具体的参数说明下⾯代码注释中已经说明。
如果你想对QSS有个好的了解建议学习⼀些简单的CSS语法,QSS就是借鉴了CSS,但是⽐它简单多了,之后你会发现QSS⾮常简单,⽽且⾮常便捷好⽤,为程序美化开发省下很多时间。
1/*Qmenu Style Sheets*/2 QMenu {3 background-color: white; /* sets background of the menu 设置整个菜单区域的背景⾊,我⽤的是⽩⾊:white*/4 border: 1px solid white;/*整个菜单区域的边框粗细、样式、颜⾊*/5 }67 QMenu::item {8/* sets background of menu item. set this to something non-transparent9 if you want menu color and menu item color to be different */10 background-color: transparent;11 padding:8px 32px;/*设置菜单项⽂字上下和左右的内边距,效果就是菜单中的条⽬左右上下有了间隔*/12 margin:0px 8px;/*设置菜单项的外边距*/13 border-bottom:1px solid #DBDBDB;/*为菜单项之间添加横线间隔*/14 }1516 QMenu::item:selected { /* when user selects item using mouse or keyboard */17 background-color: #2dabf9;/*这⼀句是设置菜单项⿏标经过选中的样式*/18 }。
QT关于控件的教程
QT关于控件的教程本文将介绍QT控件的基本用法和常见功能。
1. 按钮(QPushButton)是最常用的控件之一,它可以用于触发特定的操作。
使用QT的QPushButton类创建按钮对象,并将其添加到窗口中,通过connect函数将按钮的clicked信号与特定的槽函数关联起来,当按钮被点击时,槽函数会被调用。
3. 文本框(QLineEdit)用于获取用户输入的文本信息。
使用QT的QLineEdit类创建文本框对象,并将其添加到窗口中,通过textChanged信号可以获取到用户输入的文本内容。
4. 列表(QListWidget)用于显示一组可选项,并允许用户从中选择一个或多个选项。
使用QT的QListWidget类创建列表对象,并向其中添加项,通过itemClicked和itemDoubleClicked信号可以捕获用户的点击事件。
5. 菜单(QMenu)用于创建应用程序的菜单栏和上下文菜单。
使用QT的QMenu类创建菜单对象,并添加菜单项,通过addAction函数将动作与菜单项关联,当用户点击菜单项时,动作中的槽函数会被调用。
6. 复选框(QCheckBox)用于允许用户从一组选项中选择一个或多个选项。
使用QT的QCheckBox类创建复选框对象,并将其添加到窗口中,通过isChecked函数可以获取复选框的选中状态。
7. 滑块(QSlider)用于允许用户通过拖动滑块来选择一个范围内的数值。
使用QT的QSlider类创建滑块对象,并将其添加到窗口中,通过valueChanged信号可以获取滑块的当前值。
8. 进度条(QProgressBar)用于显示任务的进度。
使用QT的QProgressBar类创建进度条对象,并在任务进行过程中更新进度,通过setValue函数设置进度条的当前值。
9. 树状视图(QTreeView)用于显示层级结构数据,如文件系统或数据库表。
使用QT的QTreeView类创建树状视图对象,并通过QStandardItemModel类设置数据模型,通过setItem函数向视图中添加数据项。
qt 按钮的用法
Qt按钮的用法Qt是一个跨平台的C++应用程序开发框架,提供了丰富的GUI(图形用户界面)组件和工具。
其中,按钮是Qt中最常用和重要的控件之一。
在本文中,我们将详细介绍Qt按钮的用法,包括创建按钮、设置按钮属性、处理按钮点击事件等。
1. 创建按钮在Qt中创建一个按钮非常简单。
可以通过以下步骤来实现:#include <QPushButton>// 创建一个父级窗口QWidget *parent = new QWidget;// 创建一个按钮QPushButton *button = new QPushButton("Click me", parent);// 设置按钮位置和大小button->setGeometry(100, 100, 200, 50);// 显示窗口和按钮parent->show();button->show();上述代码首先包含了QPushButton头文件,然后创建了一个父级窗口对象parent和一个按钮对象button。
接下来,使用setGeometry()方法设置了按钮的位置和大小,并使用show()方法显示了窗口和按钮。
2. 设置按钮属性除了基本的位置和大小设置外,我们还可以为按钮设置其他属性,如文本、图标、样式等。
下面是一些常用的设置方法:2.1 设置文本可以使用setText()方法为按钮设置文本内容:button->setText("Click me");2.2 设置图标可以使用setIcon()方法为按钮设置图标:button->setIcon(QIcon(":/icons/button_icon.png"));其中:icons/button_icon.png是按钮图标的路径。
2.3 设置样式可以使用setStyleSheet()方法为按钮设置样式:button->setStyleSheet("background-color: blue; color: white;");上述代码将按钮的背景色设置为蓝色,文本颜色设置为白色。
Qt数字键盘实现
Qt实现数字键盘要在多个控件中输入内容,难点在于区分控件。
每个人的思路不同实现方式也不同,这是我的两种实现方式:1、重写焦点事件void focusInEvent(QFocusEvent *);鼠标点击控件时会进入控件的焦点事件,重写此事件可以知道用户点击了那个控件,来区分输入的对象。
2、添加事件过滤器bool eventFilter(QObject *obj, QEvent *ev);过滤出需要的事件信息,来区分要在那个控件中输入信息。
下面以QlineEdit为例来实现数字键盘,下图是UI界面,使用Qt Designer 进行界面设计。
左侧是输入栏,当点击数字键盘时,在里面输入内容。
数字键盘下面的输入栏在程序中加载显示的。
当点击确认按钮时,右侧显示栏输入的内容。
下面是代码实现的内容1、重写焦点事件void MyLineEdit::focusInEvent( QFocusEvent *ev ){emit EditinEvent();//发送自定义信号__super::focusInEvent(ev);}2、事件过滤器//把需要按键输入的QLineEdit加入事件过滤器ui.lineEdit_1->installEventFilter(this);ui.lineEdit_2->installEventFilter(this);ui.lineEdit_3->installEventFilter(this);//事件过滤器bool Qtkeyboard::eventFilter( QObject *obj, QEvent * ev){//判断是否为焦点进入属性if (ev->type() !=QEvent::FocusIn){return__super::eventFilter(obj,ev);}QString str = obj->objectName();if(str == "lineEdit_1"){lineEdit = dynamic_cast<QLineEdit*> (obj);}elseif (str == "lineEdit_2"){lineEdit = dynamic_cast<QLineEdit*> (obj);}elseif (str == "lineEdit_3"){lineEdit = dynamic_cast<QLineEdit*> (obj);}else{}return__super::eventFilter(obj,ev);}按键部分的实现,首先为了减少代码中的信号和槽的链接,使用QbuttonGroup然后发送按键事件消息来,实现按键的功能。
QT入门-在窗体中添加按钮以及对窗体进行设置
QT⼊门-在窗体中添加按钮以及对窗体进⾏设置1) QT中,按钮类叫做QPushButton。
在mywidget.h的MyWidget类的私有变量中:QPushButton b1; 或者QPushButton* b2;按住F4可以直接跳到.cpp⽂件。
2)按钮初始化:在窗⼝类的构造函数⾥初始化即可。
b2=new QPushButton(…)选中按F1可以查看构造函数以及其参数。
(const QIcon &icon, const QString &text, QWidget *parent = nullptr)//图标以及……(const QString &text, QWidget *parent = nullptr)//按钮上显⽰的内容以及…(QWidget *parent = nullptr)//⽗窗⼝⾄于修改内容的函数,需要从⽗类(QAbstractButton)⾥找。
即void setText(const QString& text);因此找不到相应的成员函数实现其功能的时候,可以从⽗类⾥找⼀下。
b2->setText(“Hello QT”);b2=new QPushButton(“Hello QT”);b2->show();想要的效果是把按钮显⽰到窗⼝⾥(按钮实际上也是窗⼝?),但这时候按钮是独⽴显⽰出来的。
如果窗⼝需要依附于另⼀个窗⼝,就应该给该窗⼝指定⽗类,这可以在构造函数内实现。
因为此处实例化按钮是在MyWidget构造函数内实现的,所以⽗类指针是this,即b2=new QPushButton(“Hello QT”,this);或者:QPushButton b1; b1.setParent(this);注意,如果指定了⽗亲的话,就不⽤调⽤show函数了,因为直接在⽗类窗⼝显⽰了。
3)两个按钮默认在同⼀个位置的话会发⽣覆盖,需要改变按钮的位置,相当于移动。
Qt精美的button合集
Qt精美的button合集常⽤精美buttonqss样式如下:QPushButton#pushButton{background-color:rgb(134,183,200);border:2px solid #5F92B2;border-radius:5px;color:white}QPushButton#pushButton:hover{background-color:rgb(0,130,150);border:2px solid #5F92B2;border-radius:5px;color:white;}QPushButton#pushButton:hover:pressed{background-color:rgb(85,170,255);border:2px solid #3C80B1;border-radius:5px;color:white;}QPushButton#pushButton_2{border: 1px solid #333333;padding: 4px;min-width: 65px;min-height: 12px;}QPushButton#pushButton_2:hover {background-color: #333333;border-color: #444444;}QPushButton#pushButton_2:pressed {background-color: #111111;border-color: #333333;color: yellow;}QPushButton#pushButton_2:disabled {color: #333333;}QPushButton#pushButton_3{color:white;background-color:rgb(14 , 150 , 254);border-radius:5px;}QPushButton#pushButton_3:hover{color:white;background-color:rgb(44 , 137 , 255);}QPushButton#pushButton_3:pressed{color:white;background-color:rgb(14 , 135 , 228);padding-left:3px;padding-top:3px;}QPushButton#pushButton_4{border: 1px solid #C0C0C0;background-color:#C0C0C0;border-style: solid;border-radius:0px;width: 40px;height:20px;padding:0 0px;margin:0 0px;}QPushButton#pushButton_4:pressed{ border: 1px solid black;background-color:#C0C0C0;border-style: solid;border-radius:0px;width: 40px;height:20px;padding:0 0px;margin:0 0px;}QPushButton#pushButton_5{border: 1px solid #C0C0C0;background-color:#FFFFFF;border-style: solid;border-radius:0px;width: 100px;height:20px;padding:0 0px;}QPushButton#pushButton_5:hover{ border: 1px solid #E3C46F;background-color:#FEF4BF;border-style: solid;border-radius:2px;width: 40px;height:20px;padding:0 0px;}QPushButton#pushButton_5:pressed{ background-color:#EAF0FF;border: 1px solid #AAB4C4;width: 40px;height:20px;padding:0 0px;border-radius:1px;}QPushButton#pushButton_6{color:red;background-color:rgb(30,75,10);border-style:outset;border-width:2px;border-color:rgb(10,45,110);border-radius:10px;font:bold 14px;min-width:100px;min-height:20px;padding:4px;}QPushButton#pushButton_6:pressed { background-color:rgb(40,85,20);border-style:inset;padding-left:6px;padding-top:6px;}QPushButton#pushButton_7{border:2px solid red;}QPushButton#pushButton_7:pressed { border:2px solid black;}Qt添加渐变⾊:右键控件渐变⾊的样式。
qt的qss常用样式总结
qt的qss常用样式总结Qt的QSS(Qt Style Sheets)是一种用于定义Qt应用程序界面样式的技术。
它允许开发者通过简单的CSS语法来改变Qt应用程序的外观和样式。
本文将总结一些常用的Qt QSS样式,帮助开发者快速掌握Qt QSS的基本用法。
一、窗口样式1.设置窗口背景颜色可以使用background-color属性来设置窗口的背景颜色,例如:```QWidget{background-color: #F0F0F0;}```2.设置窗口边框可以使用border属性来设置窗口的边框样式,例如:```QWidget{border: 1px solid #CCCCCC;}```3.设置窗口圆角可以使用border-radius属性来设置窗口的圆角半径,例如:```QWidget{border-radius: 5px;}```二、按钮样式1.设置按钮背景颜色可以使用background-color属性来设置按钮的背景颜色,例如:```QPushButton{background-color: #FF0000;}```2.设置按钮边框样式可以使用border属性来设置按钮的边框样式,例如:```QPushButton{border: 1px solid #000000;}```3.设置按钮文本颜色可以使用color属性来设置按钮的文本颜色,例如:```QPushButton{color: #FFFFFF;}```三、标签样式1.设置标签背景颜色可以使用background-color属性来设置标签的背景颜色,例如:```QLabel{background-color: #00FF00;}2.设置标签文本颜色可以使用color属性来设置标签的文本颜色,例如:```QLabel{color: #0000FF;}```3.设置标签字体大小可以使用font-size属性来设置标签的字体大小,例如:```QLabel{font-size: 12px;}```四、文本框样式1.设置文本框背景颜色可以使用background-color属性来设置文本框的背景颜色,例如:```QLineEdit{background-color: #FFFF00;}```2.设置文本框边框样式可以使用border属性来设置文本框的边框样式,例如:```QLineEdit{border: 1px solid #000000;}3.设置文本框文本颜色可以使用color属性来设置文本框的文本颜色,例如:```QLineEdit{color: #000000;}```五、进度条样式1.设置进度条背景颜色可以使用background-color属性来设置进度条的背景颜色,例如:```QProgressBar{background-color: #CCCCCC;}```2.设置进度条前景颜色可以使用QProgressBar::chunk子控件来设置进度条的前景颜色,例如:```QProgressBar::chunk{background-color: #FF0000;}```3.设置进度条高度可以使用QProgressBar::chunk子控件的height属性来设置进度条的高度,例如:QProgressBar::chunk{height: 10px;}```六、列表样式1.设置列表背景颜色可以使用background-color属性来设置列表的背景颜色,例如:```QListWidget{background-color: #F0F0F0;}```2.设置列表项背景颜色可以使用QListWidget::item子控件来设置列表项的背景颜色,例如:```QListWidget::item{background-color: #FFFFFF;}```3.设置列表项文本颜色可以使用QListWidget::item子控件的color属性来设置列表项的文本颜色,例如:```QListWidget::item{color: #000000;}```以上是一些常用的Qt QSS样式。
QT关于控件的教程
QT关于控件的教程QLabel是显示文本和图像的控件,可以用来显示静态文本或图像。
可以通过setText(方法设置文本内容,setPixmap(方法设置图像。
2. QPushButton(按钮)QPushButton是一个常见的交互控件,用于触发操作。
可以通过setText(方法设置按钮上显示的文本内容,通过clicked信号与槽函数进行连接,在槽函数中执行相应的操作。
3. QLineEdit(文本框)5. QRadioButton(单选按钮)QRadioButton用于在多个选项中选择单个选项。
可以通过setText(方法设置选项的文本内容,通过toggled信号与槽函数进行连接,在槽函数中处理选项的状态改变事件。
6. QCheckBox(复选框)QCheckBox用于选择多个选项,可以同时选中多个选项。
可以通过setText(方法设置选项的文本内容,通过stateChanged信号与槽函数进行连接,在槽函数中处理选项的状态改变事件。
8. QSpinBox(微调框)QSpinBox提供一个微调框,用于选择一个数字。
可以通过setValue(方法设置默认值,通过valueChanged信号与槽函数进行连接,在槽函数中处理数值的改变事件。
9. QSlider(滑动条)QSlider用于通过滑动选择一个数值。
可以通过setMinimum(和setMaximum(方法设置滑动条的范围,通过valueChanged信号与槽函数进行连接,在槽函数中处理数值的改变事件。
10. QProgressBar(进度条)QProgressBar显示一个进度条,用于表示任务的完成进度。
可以通过setValue(方法设置当前进度,通过setText(方法设置进度条旁边显示的文本。
以上是一些常见的QT控件,通过它们可以实现各种各样的交互界面。
QT控件的使用非常灵活,通过信号与槽的机制,可以方便地进行控件间的交互。
掌握了这些控件的使用方法,可以更简单高效地开发出功能强大的图形界面程序。
QMenu常规使用和样式设置——Qt
QMenu常规使用和样式设置——Qt常规使用:1. 创建QMenu对象:可以通过构造函数直接创建,也可以通过父对象的menu(函数创建。
2. 添加菜单项:可以通过添加QAction对象或添加子菜单实现。
menu1->addAction(tr("New"), this, SLOT(method()); // 添加菜单项,并设置关联的槽函数menu1->addSeparator(; // 添加分隔线menu1->addMenu(subMenu); // 添加子菜单3. 显示菜单:可以通过exec(函数在指定位置显示,也可以通过popup(函数在当前鼠标位置显示。
menu1->exec(pos); // 在指定位置显示menu1->popup(QCursor::pos(); // 在当前鼠标位置显示样式设置:1.设置背景:menu1->setStyleSheet("QMenu {background-color: white;}"); // 设置背景颜色为白色menu1->setStyleSheet("QMenu {background-image:url(menubackground.png);}"); // 设置背景图片2.设置边框:menu1->setStyleSheet("QMenu {border: 1px solid black;}"); // 设置1px的黑色边框3.设置字体和颜色:menu1->setStyleSheet("QMenu {font-family: Arial; color: red;}"); // 设置字体为Arial,颜色为红色4.调整菜单项样式:menu1->setStyleSheet("QMenu::item {padding: 5px;}"); // 设置菜单项的内边距为5pxmenu1->setStyleSheet("QMenu::item:selected {background-color: blue;}"); // 设置选中的菜单项背景为蓝色5.设置子菜单样式:subMenu->setStyleSheet("QMenu {color: green;}"); // 设置子菜单字体颜色为绿色注意事项:1.样式设置需要在菜单显示前进行,否则可能不生效。
qt checkbox用法
qt checkbox用法Qt checkbox是一种用户界面控件,允许用户从一组预定义选项中选择一个或多个选项。
在本篇文章中,我们将介绍Qt checkbox的用法和实现方式,帮助您更好地理解如何使用和管理该控件。
Checkbox也叫做复选框,是一种控件,用户可以从预定义选项中进行选择或取消选择。
Checkbox通常用于从多个选项中选择一个或多个选项的场景,例如在选取电影票房、餐厅预订等场景。
Qt checkbox是Qt框架中的复选框控件,它可以设置勾选和取消勾选状态,支持单选和多选。
程序员可以通过checkbox控件来实现程序中多选按钮的设计,使程序更加美观和用户友好。
在Qt中,checkbox通常和QButtonGroup和QAbstractButton等控件结合使用。
Qt checkbox的使用需要关注一些回调函数:void stateChanged(int state): 状态改变时会自动调用该函数。
int checkState() const: 返回当前checkbox的勾选状态,返回“Qt::Checked”表示当前checkbox处于勾选状态,“Qt::Unchecked”表示当前checkbox处于非勾选状态,“Qt::PartiallyChecked”表示当前checkbox处于部分勾选状态。
void setCheckState(int state): 设置checkbox的勾选状态,可以设置为“Qt::Checked”、“Qt::Unchecked”、“Qt::PartiallyChecked”。
void setTristate(bool y): 设置是否三态,即“Qt::PartiallyChecked”状态是否可用。
bool isTristate() const: 获取是否三态。
Qt checkbox的代码实现下面我们来看一个Qt checkbox的实例:#include <QApplication>#include <QCheckBox>#include <QWidget>QWidget w;//创建checkboxQCheckBox* checkbox = new QCheckBox(&w);checkbox->setGeometry(QRect(0, 0, 141, 31));checkbox->setObjectName(QStringLiteral("checkbox"));checkbox->setText(QStringLiteral("Qt Checkbox"));w.show();return a.exec();}上述代码中,我们创建了一个QWidget控件,用于显示Qt checkbox。
qt下的三态按钮
#include <QtGui>class CoolButton : public QToolButton{Q_OBJECTprivate:QIcon m_NormalIcon;QIcon m_FocusIcon;QIcon m_PressedIcon;protected:void enterEvent(QEvent *event);void leaveEvent(QEvent *event);void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);public:CoolButton(QWidget *parent = 0);virtual ~CoolButton();void SetButtonIcons(const QIcon &normal,const QIcon &focus = QIcon(),const QIcon &pressed = QIcon() );};CoolButton::CoolButton(QWidget *parent): QToolButton(parent){//为了让图标看起来自然一点而设置了这两个操作setDown(false);setFocusPolicy(Qt::NoFocus);}CoolButton::~CoolButton(){}//重载“进入”和“离开”事件,进入时切换为另一个图标,离开时还原 void CoolButton::enterEvent(QEvent *event){if( isEnabled() && !m_FocusIcon.isNull() )setIcon(m_FocusIcon);}void CoolButton::leaveEvent(QEvent *event){if( isEnabled() )setIcon(m_NormalIcon);}//重载鼠标事件void CoolButton::mousePressEvent(QMouseEvent *event) {if( isEnabled() && !m_PressedIcon.isNull() )setIcon(m_PressedIcon);QToolButton::mousePressEvent(event);}void CoolButton::mouseReleaseEvent(QMouseEvent *event) {if( isEnabled() && m_FocusIcon.isNull() )setIcon(m_FocusIcon);QToolButton::mouseReleaseEvent(event);}void CoolButton::SetButtonIcons(const QIcon &normal, const QIcon &focus, const QIcon &pressed){m_NormalIcon = normal;m_FocusIcon = focus;m_PressedIcon = pressed;setIcon(m_NormalIcon);}#include "main.moc"int main(int argc, char **argv){QApplication app(argc, argv);CoolButton *button = new CoolButton;//QObject::connect(button, SIGNAL(clicked()), qApp, SLOT(quit())); button->setIconSize(QSize(40, 40));button->SetButtonIcons(QIcon("normal.png"), QIcon("focus.png"), QIcon("pressed.png"));button->show();return app.exec();}。
Qt基本控件及三大布局
Qt基本控件及三⼤布局Qt基本控件及三⼤布局来源: /a2604539133/article/details/73920696Qt基本模块⼀、Qt的三⼤布局1. QHBoxLayout:1. ⽔平显⽰布局,所有在其上⾯摆放的控件只能⽔平排列下去;2. QVBoxLayout:1. 垂直显⽰布局,所有在其上⾯摆放的控件只能垂直排列下去;3. QGridLayout1. 格⼦显⽰布局,可以按照表格的形式显⽰布局;⼆、Qt的控件1. label:标签,可以显⽰⽂本信息,只读;2. pushbutton :普通按钮;3. radiobutton :单选按钮,多个单选按钮中只能选择⼀个,但是必须放⼊groupbox中,类似单选题;4. checkbox :多选复选按钮,可以选择同时选择多个,类似多选题;5. lineedit :单⾏⽂本编辑框,可以输⼊单⾏⽂本;6. textedit :多⾏⽂本输⼊框,可以输⼊显⽰多⾏⽂本和图⽚;7. combobox :下拉⽂本输⼊框,在输⼊框的最右边有个三⾓下拉按钮,可以选择输⼊,也可以⼿动输⼊;8. textbrower :多⾏⽂本显⽰框,只读;9. groupbox :可以在⾥⾯放⼊特点的东西,统⼀管理;10. slider :模拟显⽰滑动条;11. spinbox :数值显⽰滑动条;12. dateedit :13. timeedit :14. datetimeedit :15. lcdnumber :三、Qt的信号槽1. 在Qt中所有的对象(继承QObject类)都有connect函数,只要有这个函数就能建⽴信号槽(通过触发某个控件的信号函数,执⾏槽中相应的函数);(暂时这样理解,还是有点理解不全⾯的,之后学习到再来修改);2. 在Qt中信号槽中可以使⽤⾃带的函数,四个参数;也可以执⾏⾃定义的函数,三个参数;具体看下⾯test4的例⼦就明⽩了。
#include <QtWidgets/QApplication>#include <QtCore/qdebug.h>#include <QtWidgets/qcompleter.h>#include <QtWidgets/qlineedit.h>#include <QtWidgets/qlabel.h>#include <QtWidgets/qcombobox.h>#include <QtWidgets/qcheckbox.h>#include <QtWidgets/qradiobutton.h>#include <QtWidgets/qtextedit.h>#include <QtWidgets/qtextbrowser.h>#include <QtWidgets/qgroupbox.h>#include <QtWidgets/qslider.h>#include <QtWidgets/qspinbox.h>#include <QtWidgets/qdatetimeedit.h>#include <QtWidgets/qtabwidget.h>#include <QtWidgets/qlcdnumber.h>#include <QtGui/qpixmap.h>#include <QtCore/qobject.h>#include <QtWidgets/qboxlayout.h>#include <QtWidgets/qpushbutton.h>#include "MyWidgetEvent.h"void test() ;int main(int argc, char *argv[]) {QApplication a(argc, argv);test() ;return a.exec();}void test(){}void test5ManyKongJian() {QWidget *nanWidget = new QWidget() ;QVBoxLayout *nanVLayout = new QVBoxLayout() ;/***测试label控件*/QLabel *label=nullptr ;nanVLayout->addWidget( label = new QLabel("<a href=>baidu</a>") ) ;//QPixmap me("./me.png") ;//label->setPixmap( me ) ;//问题:链接和图⽚重复了,怎么分开label->setWordWrap( true ) ;label->adjustSize() ;nanVLayout->connect( label , &QLabel::linkActivated , []( QString str){qDebug()<<str ;} ) ;/***测试lineedit控件*/QLineEdit *lineEdit ;nanVLayout->addWidget( lineEdit = new QLineEdit("hello") ) ;/***测试button控件*/QPushButton *button ;nanVLayout->addWidget( button = new QPushButton("???") ) ;button->setStyleSheet("QPushButton {font:bold 16px; color:red;padding:5px}") ;nanWidget->connect( button , &QPushButton::clicked , [](bool flag){qDebug()<< "button" ;}) ;/***测试radiobutton控件*/QRadioButton *radioButton ;nanVLayout->addWidget( radioButton = new QRadioButton("qradiobutton") ) ;radioButton->setStyleSheet("QRadioButton {font:bold 16px;color:blue;padding:5px}") ;radioButton->connect( radioButton , &QRadioButton::clicked , [](bool flag){qDebug()<< flag ;}) ;/***测试ckeckbox控件*/QCheckBox *check ;nanVLayout->addWidget( check = new QCheckBox("chekcbox") ) ;/***测试combobox控件*/QComboBox *combobox ;nanVLayout->addWidget( combobox = new QComboBox() ) ;combobox->addItem("select item1") ;combobox->addItem("select item2") ;combobox->addItem("... ...") ;combobox->setEditable(true) ;lineEdit->setText("start") ;combobox->connect( combobox , SIGNAL(activated(const QString &)) , lineEdit , SLOT(setText(const QString &)) ) ;//这⾥的下标要跟着显⽰ combobox->setCompleter( new QCompleter(combobox->model()) ) ;/***测试textedit*/QTextEdit *textEdit ;nanVLayout->addWidget( textEdit = new QTextEdit("textedit") ) ;textEdit->setText("<table border=2> ""<tr><td>good</td><td>good</td><td>good</td></tr>""<tr><td>nice</td><td>nice</td><td>nice</td></tr>""</table>""<img src=./me.png></img>") ;textEdit->connect( textEdit , &QTextEdit::textChanged,[&](){//问题:textEdit->toPlainText() ;怎么才能获取到textEdit的实体,this->sender()//QTextEdit _edit = (QTextEdit *)QObject::sender();qDebug()<<textEdit->toPlainText() ;}) ;textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded) ;textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) ;/***测试groupbox控件*/QGroupBox *groupBox ;nanVLayout->addWidget( groupBox = new QGroupBox("groupbox") ) ;QHBoxLayout *hLayout ;groupBox->setLayout( hLayout = new QHBoxLayout() ) ;hLayout->addWidget( new QRadioButton("boy") ) ;hLayout->addWidget( new QRadioButton("girl") ) ;/***测试模拟显⽰条slider*/QSlider *slider ;nanVLayout->addWidget( slider = new QSlider() ) ;slider->setMinimum( -100 ) ;slider->setMaximum( 100 ) ;/***测试数字显⽰条*/QSpinBox *spinBox ;nanVLayout->addWidget( spinBox = new QSpinBox() ) ;spinBox->setMinimum( -100 ) ;spinBox->setMaximum( 100 ) ;slider->connect( slider , SIGNAL(valueChanged(int)) , spinBox , SLOT(setValue(int)) ) ;spinBox->connect( spinBox , SIGNAL(valueChanged(int)) , slider , SLOT(setValue(int)) ) ;/***测试时间设置*/nanVLayout->addWidget( new QDateTimeEdit() ) ;/***测试显⽰时间,只读*/QLCDNumber *number ;nanVLayout->addWidget( number = new QLCDNumber() ) ;number->display("1314") ;number->setMode(QLCDNumber::Hex) ;number->setSegmentStyle(QLCDNumber::Filled) ;nanWidget->setLayout( nanVLayout ) ;nanWidget->setWindowTitle("control") ;nanWidget->show() ;}void test4GridAndHBox() {QWidget *nanWidget = new QWidget() ;QGridLayout *nanGridLayout = new QGridLayout() ;QHBoxLayout *nanHBoxLayout = new QHBoxLayout() ;nanGridLayout->addWidget( new QLabel("Username") , 1 , 1 ) ;nanGridLayout->addWidget( new QLineEdit() , 1 , 2 ) ;nanGridLayout->addWidget( new QLabel("Username") , 2 , 1 ) ;nanGridLayout->addWidget( new QLineEdit() , 2 , 2 ) ;nanGridLayout->addLayout( nanHBoxLayout , 3 , 2 ) ;nanHBoxLayout->addStretch(1) ;nanHBoxLayout->addWidget( new QPushButton("Login") , 1 ) ;nanWidget->setLayout( nanGridLayout ) ;nanWidget->show() ;}void test3GridLayout() {QWidget *nanWidget = new QWidget() ;QGridLayout *nanLayout = new QGridLayout() ;QPushButton *nanButton = new QPushButton() ;QLineEdit *nanLineEdit = new QLineEdit() ;nanLayout->addWidget( nanLineEdit , 1 , 1 , 1 , 2 ) ;nanLayout->addWidget( new QPushButton , 1, 3 ) ;nanLayout->addWidget( new QLineEdit , 2, 1 , 2 , 1 ) ;nanLayout->addWidget( new QPushButton , 2, 2 ) ;nanLayout->addWidget( new QPushButton , 2, 3 ) ;nanLayout->addWidget( nanButton , 3 , 3 ) ;nanLayout->setColumnStretch( 1 , 1 ) ;nanLayout->setColumnStretch( 2 , 1 ) ;/*设置每列的⽐重*/nanLayout->setColumnStretch( 3 , 1 ) ;nanWidget->setLayout( nanLayout ) ;nanWidget->show() ;}void test2HBoxLayout() {QWidget *nanQWidget = new QWidget() ;QLineEdit *nanQLineEdit = new QLineEdit() ;QHBoxLayout *nanHLayout = new QHBoxLayout() ;nanHLayout->addWidget( nanQLineEdit , 1 ) ;//添加,两个控件之间的距离addspaceing,两个控件在layout中的⽐重addstretchnanQWidget->setLayout( nanHLayout ) ;nanQWidget->show() ;}void test1(){QWidget *w = new QWidget ;QVBoxLayout *vLayout = new QVBoxLayout( ) ;QPushButton *nanButton ;QLineEdit *nanLineEdit ;QLabel *nanLabel ;QString content("null") ;QCompleter nanQCompleter( QStringList()<<"nich"<<"chen"<<"good") ;vLayout->addWidget( nanLineEdit = new QLineEdit() ) ;vLayout->addWidget( nanButton = new QPushButton("right") ) ;nanQCompleter.setFilterMode( Qt::MatchFlag::MatchContains ) ;nanLineEdit->setCompleter( &nanQCompleter ) ;nanLineEdit->setPlaceholderText( "Please input your name" ) ;vLayout->addWidget( nanLabel = new QLabel() ) ;nanLabel->setText( content ) ;w->connect( nanButton , &QPushButton::clicked , [&](){nanLabel->setText( nanLineEdit->text() ) ;} ) ;w->setLayout( vLayout) ;w->show() ;}⼀、dialog、widget、mainwindow的区别1)、dialog有exec函数,如果是dialog窗⼝,后边的窗⼝时不可选的;2)、widget和dialog都有show函数,如果通过这个函数显⽰这两种类型的窗⼝,则两个窗⼝都是可选的;3)、widget主要是在上⾯放置布局和控件;4)、mainwindow可以显⽰菜单,⼯具栏,状态栏、托盘等功能。
qtdesigner里按钮的用法
qtdesigner里按钮的用法Qt Designer 是一个可视化界面设计工具,用于创建Qt应用程序的用户界面。
在Qt Designer中,按钮是常用的控件之一,用于触发特定的操作或执行特定的功能。
本文将详细介绍Qt Designer中按钮的用法,并一步一步回答与按钮相关的问题。
第一步:创建按钮在Qt Designer中创建按钮非常简单。
首先,打开Qt Designer并创建一个新的窗体文件。
然后,从工具箱中拖动按钮控件到窗口中,即可创建按钮。
你还可以设置按钮的初始属性,例如按钮的名称、文本、大小和位置等。
当你完成按钮的创建后,可以继续下一步来配置按钮的功能。
第二步:配置按钮功能通过Qt Designer,你可以轻松地配置按钮的功能。
按钮的功能通常是通过信号与槽机制实现的。
信号是在某个特定事件发生时由对象发出的消息,槽是接收信号的对象的函数。
在按钮的属性编辑器中,你可以找到信号和槽相关的设置。
首先,选择按钮对象并打开属性编辑器。
在属性编辑器的信号和槽部分,你可以看到按钮对象可用的信号和槽。
例如,按钮的clicked()信号会在用户点击按钮时发出,你可以选择一个槽函数来接收该信号。
第三步:实现按钮的槽函数在Qt Designer中创建按钮的槽函数非常简单。
可以通过两种方式来实现槽函数:手动编码或使用Qt Creator。
如果选择手动编码,你需要在你的代码中声明一个槽函数,并手动将该槽函数与按钮的信号进行连接。
以C++语言为例,假设你在代码中创建了一个槽函数slotButtonClicked(),你可以在构造函数中添加以下代码来连接按钮的clicked()信号和该槽函数:cppconnect(ui->pushButton, &QPushButton::clicked, this,&MainWindow::slotButtonClicked);如果选择使用Qt Creator,则可以打开Qt Designer界面,在「信号与槽编辑器」视图中直接将按钮的信号与槽函数进行连接。
Qt自定义组件风格说明(QStyle和paintEvent)
Qt⾃定义组件风格说明(QStyle和paintEvent)需要说明⼀点的是,组件的 style 是⼀个⾮常复杂的内容,仅在这⾥不可能全部讲解清楚。
如果需要⾃定义组件 style,还是⾃⼰仔细阅读相关⽂档。
另外,这部分牵扯的类很多,函数也很复杂,步步为营才是最好的对待⽅法。
除⾮⾮常必要,还是建议不要轻易去碰 style 这部分。
⾃定义 style,顾名思义,也就是⾃⼰实现样式。
这⾥通常有两种实现⽅式:第⼀,重写 widget 的paintEvent()函数;第⼆,使⽤QStyle类。
两种⽅式的侧重点有所不同:重写组件的paintEvent()函数,可以简单地实现某⼀类组件的样式;继承QStyle类,则可以实现对全部组件的⼀致性处理,例如,将程序中所有的 text 变成红⾊等。
⾸先我们来看看重写paintEvent()函数。
paintEvent()是QWidget的⼀个函数,⽤于实现⾃⾝的绘制。
⼀个组件显⽰到屏幕上,就是通过调⽤paintEvent()函数把它画出来。
看看⼀个组件有多复杂,全部要使⽤QPainter提供的画点、画线的函数绘制出来,就知道这⾥的⼯作量了。
当然也有偷懒的办法,就是重写paintEvent()的时候使⽤⼀张图⽚代替。
我们这⾥就不讨论这种思路了,⽽是完全从代码开始。
我们以QPushButton为例。
这⾥,我们创建⼀个 button,这个 button 在点击时可以凹下显⽰。
为了重写paintEvent()函数,我们必须继承QPushButton类。
头⽂件很简单,暂且略去,下⾯只看paintEvent()这个函数:void MyPushButton::paintEvent(QPaintEvent *){QStyleOptionButton option;option.initFrom(this);// qDebug() << option.state;option.state |= isDown() ? QStyle::State_Sunken : QStyle::State_Raised;// qDebug() << option.state;if (isDefault())option.features |= QStyleOptionButton::DefaultButton;option.text = text();option.icon = icon();QPainter painter(this);style()->drawControl(QStyle::CE_PushButton, &option, &painter, this);}尽管前⾯说过,我们需要重头绘制整个组件,但实际上,Qt 为我们提供了⼀系列⽅便的函数,⽤于绘制出各个组件的组成部分。
如何一个创建三态下压按钮
如何一个创建三态下压按钮如何一个创建三态下压按钮可以使用新的BS_PUSHBUTTON 风格位和检测框以及按钮来创建一个三态下压按钮。
这很容易,只需将检测框和按钮拖拉到对话中并指定属性Push—like即可。
不用任何附加程序就可以成为三态下压按钮。
42、如何动态创建控件分配一个控件对象的实例并调用其Create成员函数。
开发者最容易忽略两件事:忘记指定WS_VISBLE标签和在栈中分配控件对象。
下例动态地创建一个下压按钮控件://In class declaration (.H file ).private :CButton* m _pButton ;//In class implementation (.cpp file ) .m_pButton =new CButton ;ASSERT_VALID (m_pButton);m_pButton —>Create (_T ("Button Title ") , WS_CHILD |WS_VISIBLE |BS_PUSHBUTTON.Crect ( 0, 0, 100 , 24) , this , IDC _MYBUTTON )43、如何限制编辑框中的准许字符如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指定新的创建标志ES_NUMBERS,它是Windows 95新增加的标志,该标志限制编辑控件只按收数字字符。
如果用户需要复杂的编辑控件,可以使用Microsoft 的屏蔽编辑控件,它是一个很有用的OLE定制控件。
如果希望不使用OLE 定制控件自己处理字符,可以派生一个CEdit 类并处理WM_CHAR消息,然后从编辑控件中过滤出特定的字符。
首先,使用ClassWizard 建立一个 CEdit的派生类,其次,在对话类中指定一个成员变量将编辑控件分类在OnInitdialog 中调用CWnd: : SubclassDlgItem .//In your dialog class declaration (.H file )有两种方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Qt实现自定义按钮的三态效果
好久之前做的一个小软件,好长时间没动过了,在不记录下有些细节可能都忘了,这里整理下部分功能的实现。
按钮的三态,指的是普通态、鼠标的停留态、点击态,三态是界面交互非常基本的一项功能,Qt中如果使用的是原始的按钮,三态的效果是有的,鼠标放上去会变色,点击的时候有凹陷的效果,工具栏中的图标也具备三态效果,但是如果自定义的图标这个效果就没有了。
下面整理下自定义按钮图标的方法,先看下我做的效果图:图中表示了鼠标放在按钮上和按下的效果,完成了基本的三态,下面说下我的具体实现过程。
资源准备首先要准备好对应状态的按钮图标,按钮图标可以从网上搜集,图标需要找png格式的,ico格式的可以使用工具转换为png格式的,而且是背景透明的png格式,要想实现不同状态对应不同的效果还需要处理出其他状态,这就得靠PS来完成了,使用PS也非常简单,我这里使用PS的内阴影来实现按下的效果,用斜面和浮雕来实现鼠标停留效果。
具体设置如下面两幅图所示:图:使用内阴影实现的按下效果图:使用斜面和浮雕实现的鼠标停留效果处理好后的图标如下图。
加入工程将处理好的图标文件放入工程文件夹下,新建Qt-Qt资源文件。
输入文件名保存并加入工程。
依次添加前缀,添加文件将文件
加入工程,如下图所示。
这些文件添加到工程后就可以在界面设计中使用,很多人在界面设计中改变按钮的样式会直接选择按钮图标,如下图所示。
通过选择按钮的icon设置对应大小来实现,然而这样的一个效果就是按钮仍然是有背景和边框的,效果如下图所示。
因此很多人的实现方法是通过继承QToolButton或者重绘按钮来实现,然而这些操作仍然相对麻烦,经过对比和查找,这里使用StyleSheet来实现。
找到对应的按钮,先在界面编辑中编辑对应的样式表,这里添加border-image,对应普通情况下的按钮图标。
然后在主程序中在按钮使用之前指定其他两种状态所对应的图标,代码非常直接,就是指定每种状态对应的文件,QPushButton:hover标示鼠标悬停所对应的状态,QPushButton:pressed则对应鼠标点击的状态,代码如下,注意包含的头文件。
#include
ui->play_button->setStyleSheet("QPushButton{border-ima ge: url(:/new/icons/icons/play-pause.png);}"
"QPushButton:hover{border-image:
url(:/new/icons/icons/play-pause-hover.png);}"
"QPushButton:pressed{border-image:
url(:/new/icons/icons/play-pause-pressed.png);}");
void MainWindow::button_init()
{
ui->play_button->setStyleSheet("QPushButton{border-ima ge: url(:/new/icons/icons/play.png);}"
"QPushButton:hover{border-image:
url(:/new/icons/icons/play-hover.png);}"
"QPushButton:pressed{border-image:
url(:/new/icons/icons/play-pressed.png);}");
ui->rec_button->setStyleSheet("QPushButton{border-imag e: url(:/new/icons/icons/play-rec.png);}"
"QPushButton:hover{border-image:
url(:/new/icons/icons/play-rec-hover.png);}"
"QPushButton:pressed{border-image:
url(:/new/icons/icons/play-rec-pressed.png);}");
ui->stop_button->setStyleSheet("QPushButton{border-ima ge: url(:/new/icons/icons/play-stop.png);}"
"QPushButton:hover{border-image:
url(:/new/icons/icons/play-stop-hover.png);}"
"QPushButton:pressed{border-image:
url(:/new/icons/icons/play-stop-pressed.png);}");
ui->options_button->setStyleSheet("QPushButton{border-i mage: url(:/new/icons/icons/play-options.png);}"
"QPushButton:hover{border-image:
url(:/new/icons/icons/play-options-hover.png);}"
"QPushButton:pressed{border-image:
url(:/new/icons/icons/play-options-pressed.png);}");
ui->save_button->setStyleSheet("QPushButton{border-im age: url(:/new/icons/icons/play-star.png);}"
"QPushButton:hover{border-image:
url(:/new/icons/icons/play-star-hover.png);}"
"QPushButton:pressed{border-image:
url(:/new/icons/icons/play-star-pressed.png);}");
}
同样,按钮可以根据当前状态来进行变化,如下图中设计软件界面的最左边的按钮,会根据图像采集状态显示为播放或者暂停按钮,而右侧的一个按钮则用来模拟一个LED,根据采集状态来显示对应的颜色。
最后在运行的时候即可实现对应的效果。