QT

QT在VS Studio中,如何改变生成exe的图标

这里唯一需要注意的事情是,这个ICON的ID名字,要是 IDI_ICON1 这个好像不是这个的话,不会是你指定的

QT在VS Studio中,如何改变程序运行时的图标

在去完成下面图片的内容之前,首先应该是去 .qrc 文件中添加一个ico文件,添加完之后,记得保存,要不然你看不到

QT在VS Studio中,如何创建一个系统托盘,并且添加菜单(这里添加的菜单是在系统托盘右键出现的菜单)

    const QString PROGRAM_NAME{ "Testv" };
void iiiii(){
    QSystemTrayIcon* mSystrayIcon;//用于系统托盘
    QMenu* mSystrayMenu;//用于菜单
    QAction* mAboutAction;
    QAction* mOpenMain;

    if (!QSystemTrayIcon::isSystemTrayAvailable()) {//判断系统托盘是否可用
        mSystrayIcon = nullptr;
        return;
    }
    mAboutAction = new QAction(QIcon(":/QTTest/ico/me.ico"), tr("about test"),this);
    connect(mAboutAction, &QAction::triggered, this, &QTTest::onAbout);//当点击了这个选择
    mOpenMain = new QAction(QIcon(":/QTTest/ico/me.ico"),tr("open main interface"),this);
    connect(mOpenMain, &QAction::triggered, this, &QTTest::onOpenMainInterface);//当点击了这个选择

    mSystrayMenu = new QMenu(this);
    mSystrayMenu->addAction(mAboutAction);//将这个菜单项放到此菜单中
    mSystrayMenu->addSeparator();//系统托盘里面一个分隔符
    mSystrayMenu->addAction(mOpenMain); //将这个菜单项放到此菜单中

    mSystrayIcon = new QSystemTrayIcon(QIcon(":/QTTest/ico/me.ico"), this);
    
    mSystrayIcon->setContextMenu(mSystrayMenu);//将菜单放到系统托盘的菜单中去
    

    mSystrayIcon->setToolTip(PROGRAM_NAME);//鼠标悬停上去显示的内容
    mSystrayIcon->show();//显示
}

void onOpenMainInterface() {
    showNormal();//显示正常的窗口
    setWindowState(Qt::WindowNoState);//设置界面的状态
    qApp->processEvents();//执行一些在等待线程处理的事件
    return;
}

QT在代码中修改应用程序标题

//void setWindowTitle(const QString &);
this->setWindowTitle(tr("哈哈哈哈哈哈"));

QT中文显示乱码时

//请在文件得前面添加下面这行代码
#pragma execution_character_set("utf-8")

QT获取运行文件位置

QString strTemp = QCoreApplication::applicationFilePath();

QT 线程结束后释放

connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
workerThread->start();

QT 读取INI文件

/*
* 函数名:getConfigINIFile
* 返回值:bool
* 返回内容:返回获取的内容是不是为1,是1的话返回真,否则为假
* 作用:获取INI文件中的指定的键名
* 参数1:arg1 是节名
* 参数2:arg2 是键名
* 参数3:arg3 是键值
*/
bool QRfAttTestTool::getConfigINIFile(QString arg1, QString arg2,QString& result) {
    QString strTemp = strGAppFilePath + "/setting.ini";
    QSettings* settings = new QSettings(strTemp, QSettings::IniFormat);
    strTemp = QString("%1/%2").arg(arg1).arg(arg2);
    result = settings->value(strTemp).toString();
    if (result == tr("1")) {
        return true;
    }
    else {
        return false;
    }
}

QT的QLabel设置换行

ui->TextLabel->setWordWrap(true);

QT的QLabel设置字体

    QFont fontTextLabel("楷体", 10);//字体,大小
    ui->TextLabel->setFont(fontTextLabel);

QT如何显示另外一个窗口,以模态窗口显示

    setting* sett = new setting();
    sett->setModal(true);
    sett->exec();

QT 界面隐藏

this->hide()

创建第一个QT程序
1、创建项目名字和路径
2、名称:不能有中文,不能有空格
3、路径:不能有中文路径
4、默认创建有窗口类,基类有三种选择,QWidget->QMainwindow,QDialog
5、mian函数:
1、 QApplication a(argc, argv); //a应用程序对象
2、 myWidget w; //窗口对象
3、 w.show(); //显示窗口
4、 return a.exec();//让应用程序进入消息循环
6、pro文件:
QT += core gui //QT包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //QT版本大于4以上包含widget模块
TARGET = 01_FistPoject //生成exe的名字
TEMPLATE = app //模板
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \ //源文件
main.cpp
mywidget.cpp

		HEADERS += \			//头文件
			mywidget.h
	
	7、快捷键:
		注释 ctrl + /
		自动对齐 ctrl + i
		切换头文件 F4 	

关于QT帮助文档:

关于QT的信号和槽 和 自定义信号与槽

connent(发送者,触发的信号,接收者,执行的函数)
同时也可以信号连接信号,总要有一个信号去连接到槽函数,不然只是连接了信号,没有触发槽函数
也可以多个信号连接同一个槽函数
也可以断开信号和槽的连接

  • 在QT的帮助文档中信号函数为:

如何没有这个,请留意signals

  • 槽函数

connect(btn,&QPushButton::clicked,this,&QWidget::close);//点击按钮关闭窗口

//在某个.h文件中
signals:
    //这里可以写信号函数
//可以有参数,可以重载,不需要实现
public slots:
    //这里可以写槽函数
//可以有参数,可以重载,需要实现

//emit 这个关键字用于触发信号
Teacher *t1 = new Teacher;
emit t1->hurrry();//触发信号


//当自定义了一个带参数的信号和槽函数,并发生重载,在连接时,需要指定
//函数指针,指向的是带参数的函数
    void (Teacher::*t2)(QString) = &Teacher::hurrry;//信号
    void (Studer::*s2)(QString) = &Studer::eat;//槽
    connect(t1,t2,s1,s2);//连接
    emit t1->hurrry("哈哈");//触发
//使用lambda表达表可以进行多种操作
connect(btn2,&QPushButtn::clicked,[=](){
    在这里面可以有多行你想要的操作
});
//lambda表达式常用的是:
[=](){};//声明未调用
[=](){}();//声明并且调用
  • 转换
QString.toUtf8().data();//QString转char*
  • 如何使用自己的图标呢?
    /*
    *将.ico文件放到工程目录下面(和代码放到一起)
    *在.pro文件中增加一行 RC_ICONS = ***.ico
    *这时图标就发生了变化
    */
  • 关于工具栏和菜单栏
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <QLabel>
#include <QPushButton>
#include <QStatusBar>
#include <QDockWidget>
#include <QTextEdit>
   //可以有多个的是用add,只能有一个的是set
   QMenuBar * bar = menuBar();//创建一个菜单栏
   setMenuBar(bar);//将菜单栏放到窗口中
   //创建菜单
   QMenu *fileMenu = bar->addMenu("文件");

   QMenu *editMenu = bar->addMenu("编辑");


   QAction * newfile = fileMenu->addAction("新建");
   //添加分隔符
   fileMenu->addSeparator();
   QAction * openfile = fileMenu->addAction("打开");

   //工具栏
   QToolBar * toolBar = new QToolBar(this);
   addToolBar(Qt::LeftToolBarArea,toolBar);
   //设置停靠范围
   toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
   //设置浮动
   toolBar->setFloatable(false);
   //设置能否移动
   toolBar->setMovable(false);

   //添加选项
   toolBar->addAction(newfile);
   toolBar->addSeparator();//分隔符
   toolBar->addAction(openfile);

   //在工具栏中添加一个窗口部件
   QPushButton * btn = new QPushButton(QObject::tr("哈哈"),this);
   toolBar->addWidget(btn);

   //状态栏
   QStatusBar * stuBar = statusBar();
   setStatusBar(stuBar);
   //状态栏放置标签,默认是在左侧
   QLabel * label = new QLabel(QObject::tr("哈哈"),this);
   stuBar->addWidget(label);

   //设置右侧
   QLabel * label2 = new QLabel(QObject::tr("哈哈"),this);
   stuBar->addPermanentWidget(label2);

   //浮动窗口,可以有多个
   QDockWidget *dockWidget = new QDockWidget(QObject::tr("哈哈"),this);
   addDockWidget(Qt::BottomDockWidgetArea,dockWidget);//设置它在那个位置

   dockWidget->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);//设置限制的停靠范围
   
   //设置一个文本框,如何放到中间去,这个地址只能放一个部件
   QTextEdit * edit = new QTextEdit(this);
   setCentralWidget(edit);
   		
  • 添加资源文件
    1、右键添加新文件,然后按照下图选择

    2、先添加前缀、再添加文件
    前缀用于分类

    3、在代码中添加图标,使用ui,ui可以访问到ui中所有的类型
    ui->actionopen->setIcon(QIcon(":/ico/image/bitbug_favicon.ico"));//使用方法是:":+前缀名+文件名"
  • 模态和非模态窗口
    模态窗口,会阻塞窗口,不能对别的窗口进行操作
    非模态窗口,不会阻塞,可以对别的窗口进行操作
#include <QDialog>
//QAction::triggered 是部件被点击
    connect(ui->actionnew,QAction::triggered,this,[=](){

        //模态对话框
        QDialog dlg(this);
        dlg.resize(200,100);
        dlg.exec();

        //非模态对话框
        QDialog * dlg2 = new QDialog(this);//将对话框创建在堆区
        dlg2->resize(200,100);
        dlg2->setAttribute(Qt::WA_DeleteOnClose);//当关闭了对话框,会释放内存
        dlg2->show();

    });
  • 消息对话框
#include <QMessageBox>
//QMessageBox(父类,标题,消息,按钮类型可以有多个,默认激活的按钮
        //错误消息对话框
//        QMessageBox::critical(this,"error","错误");

        //信息消息对话框
//        QMessageBox::information(this,"info","信息");

        //提问消息对话框
        if (QMessageBox::Close == QMessageBox::question(this,"question","问题",QMessageBox::Close|QMessageBox::Cancel,QMessageBox::Cancel)){
            qDebug("点击了关闭按钮");
        }else{
            qDebug("点击了取消按钮");
        }

        //警告消息对话框
//        QMessageBox::warning(this,"waring","警告");
posted @ 2023-05-20 19:06  剑客猫  阅读(6)  评论(0编辑  收藏  举报