1.圆形按钮
首先,设置圆形按钮,首先要将setGeometry(x位置,y位置,长,宽)中的长和宽设置为相等,再使用一下模板
q2->setStyleSheet("QPushButton {"" background-color: black;"" color: white;"" border-radius: 25px;"" border: none;""}");
将border_radius设置为长或宽的一半,就可以得到一个圆形按钮了
2.图片按钮
cq->setIcon(icon);cq->setIconSize(QSize(100,50));
那么问题来了,如何在图片上显示字呢?
最好的方法是在图片上直接p,如果使用样式表就需要绝对路径,一般不会使用绝对路径
3.按钮快捷键
方法
up->setShortcut(QKeySequence("w"));
up是按钮,而且w的位置也可以是ctrl+w等组合键
在使用这钟快捷键方式后,不点击小兔子,点键盘上的wasd,就能控制猫的移动了
4. 重复触发
键盘:默认支持
鼠标:setAutoReapeat,setAutoReapeatDelay(触发延迟),setAutoReapeatInterval(触发间隔)
up->setAutoRepeat(true);down->setAutoRepeat(true);left->setAutoRepeat(true);right->setAutoRepeat(true);
现在按住兔子,猫就可以一直向上了
5.选择按钮
QRaioButton,属性:checkable:能否被选中,true表示可以被选中,false表示不可以,checked,表示是否已经被选中
对应槽函数,clicked是点击时,pressed是鼠标按下时,released是鼠标释放时,toggled是checked属性改时(最适合)
所有按钮默认排他,QButtonGroup可以进行分组,组内排他,QCheckbox可以复选
应用:模拟菜单(选择标题可以将按钮和标签放入一个显示组里面管理,具体可以看代码)
注意,QButtonGroup默认排他,在对复选按钮进行管理时需要setExclusive函数取消排他性,要设置标签的话可以在旁边搞一个不可选中的黑底白字按钮,或进行显示控制(之后会讲)
代码
pro
QT += core gui
QMAKE_PROJECT_DEPTH = 0greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QPushButton>
#include<QRadioButton>
#include<QCheckBox>
#include<QButtonGroup>
#include<QGroupBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
public slots:void getup();void getdown();void getleft();void getright();
private:Ui::MainWindow *ui;QPushButton*example;QPushButton*up;QPushButton*down;QPushButton*left;QPushButton*right;QRadioButton*q1;QRadioButton*q2;QCheckBox*q3;QCheckBox*q4;QCheckBox*q5;QButtonGroup*g1;QButtonGroup*g2;
};
#endif // MAINWINDOW_H
main
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QLabel>
#include<QVBoxLayout>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);example=new QPushButton(this);up=new QPushButton(this);down=new QPushButton(this);left=new QPushButton(this);right=new QPushButton(this);example->setGeometry(100,100,50,50);up->setGeometry(375,200,100,100);down->setGeometry(375,400,100,100);left->setGeometry(275,300,100,100);right->setGeometry(475,300,100,100);QIcon cat("D:/project/cat.jpg");example->setIcon(cat);example->setIconSize(QSize(55,75));QIcon upsign("D:/project/p1.jpg");up->setIcon(upsign);up->setIconSize(QSize(100,100));down->setIcon(upsign);down->setIconSize(QSize(100,100));left->setIcon(upsign);left->setIconSize(QSize(100,100));right->setIcon(upsign);right->setIconSize(QSize(100,100));up->setShortcut(QKeySequence("w"));down->setShortcut(QKeySequence("s"));left->setShortcut(QKeySequence("a"));right->setShortcut(QKeySequence("d"));up->setAutoRepeat(true);down->setAutoRepeat(true);left->setAutoRepeat(true);right->setAutoRepeat(true);connect(up,&QPushButton::clicked,this,&MainWindow::getup);connect(down,&QPushButton::clicked,this,&MainWindow::getdown);connect(left,&QPushButton::clicked,this,&MainWindow::getleft);connect(right,&QPushButton::clicked,this,&MainWindow::getright);q1=new QRadioButton("麦辣鸡腿",this);q1->setGeometry(600,100,100,100);q2=new QRadioButton("双层吉士",this);q2->setGeometry(500,100,100,100);q3=new QCheckBox("蛋挞",this);q3->setGeometry(100,200,100,100);q4=new QCheckBox("可乐",this);q4->setGeometry(100,300,100,100);q5=new QCheckBox("雪碧",this);q5->setGeometry(100,400,100,100);g1=new QButtonGroup(this);g2=new QButtonGroup(this);g1->addButton(q1);g1->addButton(q2);g2->setExclusive(false);g2->addButton(q3);g2->addButton(q4);g2->addButton(q5);//QLabel*l=new QLabel("汉堡",this);// l->setGeometry(400,100,100,100);// QVBoxLayout *layout = new QVBoxLayout(this);// layout->addWidget(l);// layout->addWidget(q1);// layout->addWidget(q2);}
void MainWindow::getup()
{QPoint mypos = example->pos();mypos.setY(mypos.y() -5);example->move(mypos);
}void MainWindow::getdown()
{QPoint mypos = example->pos();mypos.setY(mypos.y() +5);example->move(mypos);
}
void MainWindow::getleft()
{QPoint mypos = example->pos();mypos.setX(mypos.x() - 5);example->move(mypos);
}
void MainWindow::getright()
{QPoint mypos = example->pos();mypos.setX(mypos.x() + 5);example->move(mypos);
}
MainWindow::~MainWindow()
{delete ui;
}