当前位置: 首页 > news >正文

qt:经典窗口操作与控制

1.窗口标题
this->setWindowTitle("to my lovely girl");

2.设置窗口透明度

正常为1.0,透明为0.0

 this->setWindowOpacity(0.0);

 

啥也没有

3.设置图片路径

1.绝对路径(极少用)

2.相对路径:使用方法

 QIcon icon("D:/project/p2.jpg")

 

 

3.资源文件法

 

 

会发现左侧文件栏出现资源文件选项,在路径里面找到对应qrc文件后,在同级目录或者子目录下放置图片,就可以通过资源文件前缀(创建时有显著表示提示创建)+文件名称调用了

4.qrc机制

就是3中的资源文件法,qt使用的qrc机制主要解决两个问题,第一个是文件所在路径在用户机器上存在,第二个是文件不会被用户误删或修改,但是会存在一个问题,就是资源文件不能过大

qrc文件的特点:

        1.XML格式的资源文件

        2.用 XML 记录硬盘上的文件和对应的随意指定的资源名称,应用程序通过资源名称来访问这些资源

        3.在 Qt 开发中,可以通过将资源文件添加到项目中来方便地访问和管理这些资源,这些资源文件可以位于 qrc 文件所在目录的同级或其子目录下

        4.在构建程序的过程中,Qt 会把资源文件的二进制数据转成 cpp 代码,编译到 exe 中,从而使依赖的资源变得 “路径无关”

 5.ToolTips

 就是鼠标放在某个按钮上会在一定时间显示一段话,可以使用两个函数来控制

    q1->setToolTip("please");
    q1->setToolTipDuration(3000);

下面时间是毫秒

 

6. 控件状态与控制

一个控件肯定有能使用和不能使用,而使用对象可以是鼠标或者是按键如Tab,这里演示用按钮控制另一个按钮是否可以被鼠标选中(q是一个按钮)

void MainWindow::changecq()
{
    bool able=q->isEnabled();
    if(able)
    {
        q->setEnabled(false);
    }
    else
    {
        q->setEnabled(true);
    }

}

 

 7.自主设置鼠标图标

在按下某些按钮后可以设置鼠标变换图标,比如经典的蓝圈,现在介绍一种自定义图片的方法

  QPixmap qp("D:/project/p1.jpg");
QPixmap dp = qp.scaled(10, 10, Qt::KeepAspectRatio);
    QCursor cd(dp, dp.width()/2, dp.height()/2);
     QApplication::setOverrideCursor(cd);

找到图片路径,设置图片大小,设置热点(类似鼠标箭头),再使用,就会发现我的鼠标箭头变成了图片

8.颜色控制

白天模式与黑夜模式的颜色设置

void MainWindow::turnon()
{
    this->centralWidget()->setStyleSheet("background-color:white");

       this->setStyleSheet("QPushButton { background-color:black; color: white; }");

}
void MainWindow::turnoff()
{
    this->centralWidget()->setStyleSheet("background-color:black");

           this->setStyleSheet("QPushButton { background-color:white; color: black; }");
}

centralWidget()设置主窗口颜色,然后再使用以上语句对按钮颜色和字体颜色进行选择

 

 

 颜色方面,

rgb(255, 0, 0) 或者 #FF0000 或者 #F00 表示纯红色。
rgb(0, 255, 0) 或者 #00FF00 或者 #0F0 表示纯绿色。
rgb(0, 0, 255) 或者 #0000FF 或者 #00F 表示纯蓝色。
rgb(255, 255, 255) 或者 #FFFFFF 或者 #FFF 表示纯白色。
rgb(0, 0, 0) 或者 #000000 或者 #000 表示纯黑色。

9.加入演示后的表白窗口的完整代码

pro

QT       += core gui
QMAKE_PROJECT_DEPTH = 0

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    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

RESOURCES += \
    mysource.qrc

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QPushButton>
#include<ctime>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void changeq1();
    void changeq2();
    void changecq();
    void turnon();
    void turnoff();

private:
    Ui::MainWindow *ui;
public:
    QPushButton *q1;
    QPushButton*q2;
    QPushButton*q;
    QPushButton*cq;
    QPushButton*light;
    QPushButton*dark;
};
#endif // MAINWINDOW_H

main.h

#include "mainwindow.h"

#include <QApplication>
#include<QObject>
#include<QPushButton>
#include<QDir>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.show();
    qDebug()<<QCoreApplication::applicationDirPath()<<'\n';
    qDebug()<<QDir::currentPath();

    return a.exec();
}

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPixmap>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{

    ui->setupUi(this);
     this->setWindowTitle("to my lovely girl");
    this->setWindowOpacity(1.0);
    QIcon icon(":/new/p3.jpg");//("D:/project/p2.jpg");
     this->setWindowIcon(icon);
    q1=new QPushButton("yes",this);
    q1->setGeometry(300,200,50,50);
    q1->setToolTip("please");
    q1->setToolTipDuration(3000);
   q2=new QPushButton("no",this);
    q2->setGeometry(450,200,50,50);
   q=new QPushButton("do you love me?",this);
   q->setGeometry(300,300,200,100);
   q->setEnabled(false);
   cq=new QPushButton("control the button",this);
   cq->setGeometry(100,300,100,50);
   std::srand(std::time(nullptr));
   light=new QPushButton("light",this);
   light->setGeometry(375,50,50,50);
   dark=new QPushButton("dark",this);
  dark->setGeometry(375,100,50,50);
    connect(q1, &QPushButton::clicked, this, &MainWindow::changeq1);
    connect(q2, &QPushButton::clicked, this, &MainWindow::changeq2);
    connect(cq,&QPushButton::clicked,this,&MainWindow::changecq);
    connect(light,&QPushButton::clicked, this, &MainWindow::turnon);
    connect(dark,&QPushButton::clicked, this, &MainWindow::turnoff);
}

void MainWindow::changeq1()
{
    QPixmap qp("D:/project/p1.jpg");
QPixmap dp = qp.scaled(10, 10, Qt::KeepAspectRatio);
    QCursor cd(dp, dp.width()/2, dp.height()/2);
     QApplication::setOverrideCursor(cd);
   QPushButton* q3=new QPushButton("have a dinner?",this);
    q3->setGeometry(250,500,300,100);
   q3->show();
    connect(q3, &QPushButton::clicked, this, &MainWindow::close);
}
void MainWindow:: changeq2()
{
    int x=std::rand()%100;
    int y=std::rand()%100;
    q2->setGeometry(x,y,50,50);
}
void MainWindow::changecq()
{
    bool able=q->isEnabled();
    if(able)
    {
        q->setEnabled(false);
    }
    else
    {
        q->setEnabled(true);
    }

}
void MainWindow::turnon()
{
    this->centralWidget()->setStyleSheet("background-color:white");

       this->setStyleSheet("QPushButton { background-color:black; color: white; }");

}
void MainWindow::turnoff()
{
    this->centralWidget()->setStyleSheet("background-color:black");

           this->setStyleSheet("QPushButton { background-color:white; color: black; }");
}
MainWindow::~MainWindow()
{
    delete ui;
}

相关文章:

  • 使用 Flask 和 pdfkit 生成带透明 PNG 盖章的 PDF 并上传到阿里云 OSS
  • 【NLP 25、模型训练方式】
  • 数据结构:栈(Stack)及其实现
  • AI与互联网交互的四种技术路线分析
  • Linux在shell中如何提前结束脚本
  • leetcode88.合并两个有序数组
  • springboot021-基于协同过滤算法的个性化音乐推荐系统
  • Java并发编程——锁升级机制
  • SSE:用于流式传输的协议
  • 百度热力图数据获取,原理,处理及论文应用6
  • Java 开发者需要了解的 PDF 基础知识
  • 安全防御综合练习2 nat+智能选路
  • 串的基本操作--数据结构
  • 算法日常刷题笔记(1)
  • 【数据分享】1929-2024年全球站点的逐日降雪深度数据(Shp\Excel\免费获取)
  • vLLM专题(二):安装-CPU
  • Retrofit+OkHttp+ViewModel
  • Go入门之语言变量 常量介绍
  • MongoDB 7 分片副本集升级方案详解(上)
  • CentOS 8 配置bond
  • 做网站 做什么网站好/鸣蝉智能建站
  • 电商平台网站建设/google关键词搜索工具
  • 广州网站建设+致茂/google seo实战教程
  • 网站在线客服如何做/百度竞价排名查询网站
  • 淘宝网站建设 推广 上海/百度官网首页登录入口
  • 网站在香港能备案吗/网推放单平台