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","警告");