概述
自己备忘的常见的qt小知识点
- 知识点
- 文件判断是否存在、可读、可写、可编辑
- QString转成char
- 接上面 c_str和.data()区别
- 1.拼接
- 2.格式化
- 3.数字转字符串
- 文版框输出数字转字符串函数QString::number(a,10,2);
- 4.判断字符串是否为空
- 5.格式化
- 6.数字转字符串
- 7.移出空白字符
- 8.字符串转换
- 9.比较 > < >= <= ==
- 10.nsert()//字符串加入
- 11.prepend() 在原字符串开头插入另一个字符串
- 12.引用外部资源extern
- 13.互斥锁
- 14.replace() 用指定的字符串替换原字符串中的某些字符
- 15.文件存取
- 16.qt鼠标定位以及定时器
- 键盘按下事件
- 鼠标按下事件
- 鼠标按下换图标
- 鼠标移动事件
- 鼠标按住进行页面移动
- 鼠标双击事件
- 鼠标双击进行
- 鼠标抬起事件
- 鼠标抬起恢复原本指针
- 鼠标滚轮事件
- 定时器事件
- 17.模态窗口setModal
- 18.文件选择对话框、颜色选择对话框、字体选择对话框
- 19.消息框
- 疑问消息框question
- infomation对话框information
- "Critical消息框"critical
- 警告消息框warning
- 自定义消息框
- 关于qt消息框aboutQt
- 关于消息框about
- 输入对话框getText;getInt;getDouble
- 向导对话框
- 进度对话框
- 20.文本框的选择toPlainText();toHtml();text();currentText()
- 21.控件样式动态更改
- 22.字体更改
- 23.label中添加动画以及图片
- 动态添加label
- 按键进行隐藏窗口
- 24.lcdNumber显示系统时间
- lcdNumber位移
- 25.菜单栏设置
- 26.文本处理
- 富文本框处理TextEdit
- 使用拖放来打开文本
- 设置图片拖拽
- 设置打印转换格式pdf
- 27正则表达式
- 控件提示框
- 28定时器
- 29comBox 添加信息及其美化
- 30button删除tableWidget中某一行
- 页面删除deleteLater
- extern
- writeDatagram通信发送函数
- tablewidget用法
- tablewidget加按钮
- 二 页面美化设置
- 1. 伪状态(鼠标放在页面上的状态)
- 2.屏蔽窗口
- 3.页面透明度
- 窗口部件提升
- 更改list中.at特定位置中的值 [ ]
- 定时器周期
- .其他未整理
- 常用插件函数
- 常用MIME类型数据处理函数
- settoolTep函数
- 三 qt小程序
- 1.读取xml
知识点
文件判断是否存在、可读、可写、可编辑
头文件:<io.h>
函数原型:int _access(const char *pathname, int mode);
参数:pathname 为文件路径或目录路径 mode 为访问权限(在不同系统中可能用不能的宏定义重新定义)
返回值:如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1.
备注:当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限。
mode的值和含义如下所示:
00——只检查文件是否存在
02——写权限
04——读权限
06——读写权限
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
if ( ( _access ( “IsExist.txt” , 0 ) ) != - 1 )
{
printf ( “File IsExist.txt exists.n” ) ;
if ( ( _access ( “IsExist.txt” , 2 ) ) != - 1 )
printf ( “File IsExist.txt does not have write permission.n” ) ;
}
return 0 ;
}
QString转成char
1、方式1:QString ->QByteArray->char*
QString str = "hello";
char * ch = str.toLatin1().data();
//都是QString转QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode
//或者
char * ch = str.toLocal8Bit().data();
2、方式2:QStirng---->String —>char*
QString str = "hello";
char * ch = str.toStdString().c_str();
接上面 c_str和.data()区别
c_str()和data():生成一个const char*指针,指向一个临时数组。
c_str()函数返回一个指向正规C字符串的指针,内容与string串相同。
C++中c_str()主要用法就是为了与C语言兼容,在C语言中没有string类型,故必须通过string的对象的成员函数c_str()把string对象转换成C中的字符串样式。
c_str()以char*形式传回string内含字符串。
char c[20];
string s = "1234";
strcpy(c,s.c_str());
//这样才不会出错,c_str返回的是一个临时指针,不能对其进行操作。
1.拼接
QString s1 = "hello ";
QString s2 = "world";
s1 += s2;
s1.append(" farsight");
2.格式化
s1.sprintf("%s %d","哈哈",100);
s1 = QString("%1 was born in %2").arg("小明").arg(1900);
3.数字转字符串
QString s = QString().setNum(16);
文版框输出数字转字符串函数QString::number(a,10,2);
ui->lineEdit_5->setText(QString::number(a[0],10,2));
这个文章进行了详细介绍
4.判断字符串是否为空
QString s ;
s.isEmpty()
示例:
if(!s.isEmpty())
{
s.append('0');
ui->label_choose->setText(s);
}
5.格式化
将"哈哈" 100 输出;
char buf[100];
sprintf(buf,"%s %d",“哈哈”,100);
//替换 1替换成第一个arg中的参数 2替换第二个arg中的参数
s1 = QString("%1 was born in %2").arg(“小明”).arg(1900);
6.数字转字符串
QString s = QString().setNum(16);
QString s1 = QString("%1").arg(16);
7.移出空白字符
QString s5 = " hello good farsight ";
//移出两端空白字符
s5 = s5.trimmed();
qDebug()<<s5;
//移出两端空白字符,使用单个空格代替字符串中间的空白字符
s5 = s5.simplified();
qDebug()<<s5;
8.字符串转换
toInt() toDouble() toFloat() toLong() toLongLong()
QString s6 = "123";
bool ok;
int hex = s6.toInt(&ok,16);//转换成十六进制
if(ok)//转换是否成功 转换成功 返回值为true
{
qDebug()<<hex;
}
int dec = s6.toInt(&ok);//参数2位默认10进制
qDebug()<<dec;
9.比较 > < >= <= ==
QString s7 = "hello";
QString s8 = "helo";
if(s7 > s8)
qDebug()<<"s7>s8";
else
qDebug()<<"not";
10.nsert()//字符串加入
11.prepend() 在原字符串开头插入另一个字符串
wordhello
12.引用外部资源extern
extern int DataSize;//引用了main函数中定义的DataSize
t1.cpp中:
#include “t1.h” //如果你的不是当前路径,自己弄好路径
int myData; //只在一个文件件中这样做一次,后面别的文件想用时,只包头文件就可以了
// int myData =0; //可以定义可以赋值,可以不赋值
t2.cpp中:
#include “t1.h” //如果你的不是当前路,自己弄好路径,这个不用说吧
//注意在t1.cpp中已经定义了,后面使用的文件就不要定义myData,直接拿来用即可
//假如你的t2.cpp中有一个方法需要用到myData,这个方法就int getMyData();于是可以这样
[原文链接](https://blog.csdn.net/Soar_dream/article/details/101025153)
13.互斥锁
互斥锁 QMutex类和QMutexLocker类 作用:解决由于覆盖,导致的结果不正确
目的:保护一个对象,同一时间只有一个线程可以访问它。
当多个线程访问共享内存时,应使用锁讲对共享变量的操作代码包裹,易保证同步访问共享变量;
c++中引起线程安全的共享资源有两种:全局变量和静态变量。
void consummer::run()
{
for(int i = 0 ; i < DataSize; i++)
{
//加锁
mutex.lock();
buffer--;
qDebug()<<"consummer:"<<buffer;
//解锁
mutex.unlock();
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
consummer con;
producer pro;
con.start();
pro.start();
//线程进入等待模式,
con.wait();
pro.wait();
14.replace() 用指定的字符串替换原字符串中的某些字符
s1.replace(“e”,s2);这样竟然也行?
ui界面的设置:
ui->lineEdit_psw->setMaxLength(6);//密码长度6位
ui->lineEdit_psw->setEchoMode(QLineEdit::Password);//密码不可见
15.文件存取
void MainWindow::on_pushButton_clicked()
{
//指定创建的目录 wd 是要创建的文件夹名字
QString path = "d:/wd/";
//创建目录 包含头文件 #include <QDir>
QDir dir(path);
if(!dir.exists())//如果目录不存在的话,创建目录路径dirPath //bool exists()如果文件名存在,返回true;否则返回false。
{
dir.mkpath(path);//mkpath(const QString &dirPath) 函数将创建该目录所需的所有父目录。如果成功返回true;否则返回false。
}
//列取文件目录下的文件名称 1.放到QStringList中
// 2.注意:遍历要从2开始,前两项为. ..
QStringList fileList = dir.entryList();//1.返回的是当前目录下所有的文件名;2.entryList()返回目录中所有文件和目录的名称列表,
for(int i = 2; i<fileList.size(); i++)
{
//文件名添加到listwight中显示 addItem()
ui->listWidget->addItem(fileList.at(i));//列表中的每一项是fileList.at(i)
}
qDebug()<<fileList.at(0)<<" "<<fileList.at(1);
}
16.qt鼠标定位以及定时器
键盘按下事件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//开启鼠标的实时跟踪
setMouseTracking(true);
ui->centralWidget->setMouseTracking(true);
timerCount1 = 0;
timerCount2 = 0;
}
MainWindow::~MainWindow()
{
delete ui;
}
//键盘按下事件
void MainWindow::keyPressEvent(QKeyEvent *e)
{
QString head;
if(e->modifiers() == Qt::NoModifier)//没有修饰键
{
}else if(e->modifiers() == Qt::ControlModifier)// 按下修饰符 ctrl
{
head+="Ctrl +";
}else if(e->modifiers() == Qt::ShiftModifier)// 按下修饰符 shift
{
head+="shift +";
}else if(e->modifiers() == Qt::AltModifier)// 按下修饰符 Alt
{
head+="alt +";
}
//通过函数e->key()的返回值 判断是对应哪个按键
switch (e->key()) {
case Qt::Key_A:
ui->label_key->setText(head+"A");
break;
case Qt::Key_Up:
ui->label_key->setText(head+"up");
break;
default:
//转换 成字符
ui->label_key->setText(QString().setNum(e->key()));
break;
}
}
鼠标按下事件
//鼠标按下事件
void MainWindow::mousePressEvent(QMouseEvent *e)
{ //获取x坐标
int x = e->x();
//获取y坐标
int y = e->y();
//判断点击的是鼠标的哪个按键 e->button()的返回值
QString position = QString("x: %1 y: %2").arg(x).arg(y);//x,y左边拼接成字符串
switch (e->button()) {//函数的返回值为点下的是哪个按键
case Qt::LeftButton://鼠标左键
//label中显示:按下鼠标左键 + postion
ui->label_mousepress->setText("按下左键"+position);
break;
case Qt::RightButton://鼠标右键
//label中显示:按下鼠标右键 + postion
ui->label_mousepress->setText("按下右键"+position);
break;
case Qt::MidButton://中键
//label中显示:按下鼠标中键 + postion
ui->label_mousepress->setText("按下中键"+position);
break;
default:
break;
}
}
鼠标按下换图标
void MainWindow::mousePressEvent(QMouseEvent *even)
{
if(even->button()==Qt::LeftButton)
{
QCursor cursor;
cursor.setShape(Qt::PointingHandCursor);//设置光标形状
QApplication::setOverrideCursor(cursor);//使鼠标暂时改变形状
}
else if(even->button()==Qt::RightButton)
{
QCursor corcle(QPixmap("../mymouseevent/logo.png"));//../C基础补习/QT/heads/head25.jpg"
QApplication::setOverrideCursor(corcle);
}
}
鼠标移动事件
//鼠标移动事件
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
QString position = QString("移动 x: %1 y: %2").arg(e->x()).arg(e->y());
ui->label_mousemove->setText(position);
}
鼠标按住进行页面移动
void Widget::mouseMoveEvent(QMouseEvent *event) // 鼠标移动事件
{
if(event->buttons() & Qt::LeftButton){ // 这里必须使用buttons()
QPoint temp;
temp = event->globalPos() - offset;
move(temp);// 使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置
}
}
鼠标双击事件
//鼠标双击事件
void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)
{ //获取x坐标
int x = e->x();
//获取y坐标
int y = e->y();
//判断点击的是鼠标的哪个按键 e->button()的返回值
QString position = QString("x: %1 y: %2").arg(x).arg(y);//x,y左边拼接成字符串
switch (e->button()) {//函数的返回值为点下的是哪个按键
case Qt::LeftButton://鼠标左键
//label中显示:鼠标双击左键 + postion
ui->label_mousedouble->setText("双击左键"+position);
break;
case Qt::RightButton://鼠标右键
//label中显示:鼠标双击右键 + postion
ui->label_mousedouble->setText("双击右键"+position);
break;
case Qt::MidButton://中键
//label中显示:按下鼠标双击中键 + postion
ui->label_mousedouble->setText("双击中键"+position);
break;
default:
break;
}
}
鼠标双击进行
void Widget::mouseDoubleClickEvent(QMouseEvent *event) // 鼠标双击事件
{
if(event->button() == Qt::LeftButton){ // 如果是鼠标左键按下
if(windowState() != Qt::WindowFullScreen) // 如果现在不是全屏
setWindowState(Qt::WindowFullScreen); // 将窗口设置为全屏
else setWindowState(Qt::WindowNoState); // 否则恢复以前的大小
}
}
鼠标抬起事件
//鼠标抬起事件
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
//获取x坐标
int x = e->x();
//获取y坐标
int y = e->y();
//判断点击的是鼠标的哪个按键 e->button()的返回值
QString position = QString("x: %1 y: %2").arg(x).arg(y);//x,y左边拼接成字符串
switch (e->button()) {//函数的返回值为点下的是哪个按键
case Qt::LeftButton://鼠标左键
//label中显示:鼠标抬起左键 + postion
ui->label_mouserelease->setText("抬起左键"+position);
break;
case Qt::RightButton://鼠标右键
//label中显示:鼠标抬起右键 + postion
ui->label_mouserelease->setText("抬起右键"+position);
break;
case Qt::MidButton://中键
//label中显示:按下抬起双击中键 + postion
ui->label_mouserelease->setText("抬起中键"+position);
break;
default:
break;
}
}
鼠标抬起恢复原本指针
void Widget::mouseReleaseEvent(QMouseEvent *event) // 鼠标释放事件
{
//Q_UNUSED(event);
QApplication::restoreOverrideCursor(); // 恢复鼠标指针形状
}
鼠标滚轮事件
void Widget::wheelEvent(QWheelEvent *event)
{
if(event->delta()>0){
ui->textEdit->zoomIn();
}
else{
ui->textEdit->zooOut();
}
}
定时器事件
Qt中进行定时器#include<QTime>
QTimer* my_time=new QTimer();//创建定时器
connect(my_time,SIGNAL(timeout()),this,SLOT(MyFunction()));//定时器绑定槽函数
my_time->start(200);//进行定时器输入200ms为停顿
//定时器事件
void MainWindow::timerEvent(QTimerEvent *e)
{
if(e->timerId() == timerId1) //一秒的定时器
{
timerCount1++;
ui->progressBar->setValue(timerCount1);
ui->label_timer1->setNum(timerCount1);
}else if(e->timerId() == timerId2)
{
timerCount2++;
ui->label_timer2->setNum(timerCount2);
}
}
//开启定时器
void MainWindow::on_pushButton_start_clicked()
{
//id 用来标识 是哪个定时器
timerId1 = startTimer(1000);
timerId2 = startTimer(2000);
}
//关闭定时器
void MainWindow::on_pushButton_stop_clicked()
{
//参数:定时器的id
killTimer(timerId1);
//进度条显示0 清空label
ui->progressBar->setValue(0);
ui->label_timer1->clear();
killTimer(timerId2);
ui->label_timer2->clear();
}
//头文件
public:
//重写四个函数,鼠标的四种情况 包含头文件#include <QMouseEvent>
//鼠标按下
void mousePressEvent(QMouseEvent *e);
//鼠标抬起 释放
void mouseReleaseEvent(QMouseEvent *e);
//鼠标移动
void mouseMoveEvent(QMouseEvent *e);
//鼠标双击
void mouseDoubleClickEvent(QMouseEvent *e);
//键盘事件 #include <QKeyEvent> 重写方法
void keyPressEvent(QKeyEvent *e);
//重写方法
void timerEvent(QTimerEvent *e);
int timerId1;
int timerId2;
int timerCount1;
int timerCount2;
private slots:
void on_pushButton_start_clicked();
void on_pushButton_stop_clicked();
17.模态窗口setModal
//测试模态窗口
void MainWindow::on_pushButton_clicked()
{
//显示我的dialog 包含头文件
//里面参数 指定父类,如果父类消亡时,自动消亡子孩子
//默认状态:非模态状态
MyDialog *md = new MyDialog(this);
//模态对话框:即在没有关闭之前,不能再与同一个应用程序的其它窗口进行交互,比如新建项目时弹出的对话框。
//设置模态状态 参数:true设置 模态 false 非模态
md->setModal(true);
md->setWindowModality(Qt::WindowModal);
/*
非模态对话框:可以在同一程序中与他交互,如查找替换对话框,默认的对话框为非模态。
//设置成非模态状态
md->setModal(false);
md->setWindowOpacity(Qt::NonModal);*/
//显示窗口
md->show();
//Qt::NonModal:非模态窗口
//Qt::WindowModal:模态窗口 对应于父窗口,及祖父窗口,和相关的兄弟窗口
}
18.文件选择对话框、颜色选择对话框、字体选择对话框
文件选择对话框
- QString fileName = QFileDialog::getOpenFileName(this, tr(“Open File”), “/home”, tr(“Images (*.png *.xpm *.jpg)”));
QString selectFilter;
QString fileName = QFileDialog::getOpenFileName(
this,//指定父类 指定父组件
"选择文件对话框测试",//对话框的标题
"/",//当前目录下
"C++ files(*.cpp);;C files(*.c);;Head files(*.h)",//过滤器
//过滤器名称+(),括号里是文件的过滤规则,如*.c,多过滤器之间用;;隔开,默认是无过滤
&selectFilter//选择的是哪个过滤器
);
//但行输入框 显示选择后的文件路径名
ui->lineEdit_filename->setText(fileName);
qDebug()<<selectFilter;
颜色选择对话框
QColor color = QColorDialog::getColor(Qt::blue,//默认颜色
this,//指定父类
"标准颜色对话框"//对话框的标题
);
if(color.isValid())//颜色是否有效 isValid//检查对象是否已经实例化
{
//设置图形为盒状
ui->label_color->setFrameShape(QFrame::Box);
//自动填充背景
ui->label_color->setAutoFillBackground(true);
//设置调色板为获取到的颜色
ui->label_color->setPalette(QPalette(color));
}
字体选择对话框
void MainWindow::on_pushButton_font_clicked()
{
bool ok;
QFont f("宋体");
QFont font = QFontDialog::getFont(
&ok,
f,
this,
"标准字体选择对话框"
);
ui->lineEdit_font->setText("测试文本");
ui->lineEdit_font->setFont(font);
}
19.消息框
疑问消息框question
void MyDialog::on_pushButton_question_clicked()
{
int ques = QMessageBox::question(
this,
"question消息框",//标题
"是否退出消息对话框",//内容
QMessageBox::Ok|QMessageBox::Cancel,//界面显示的按钮
QMessageBox::Ok//默认选中的,焦点在哪个按钮上
);
switch (ques) {
case QMessageBox::Ok:
ui->label->setText("question 对话框 ok");
break;
case QMessageBox::Cancel:
ui->label->setText("question 对话框 cancle");
break;
default:
break;
}
infomation对话框information
void MyDialog::on_pushButton_infomation_clicked()
{
int choose = QMessageBox::information(
this,
"Infomation消息框",
"欢迎来到InfomationMsg测试",
QMessageBox::Ok,
QMessageBox::NoButton);//默认选中的,焦点在哪个按钮上
//QMessageBox::NoButton 此时messageBox会自动选择合适的默认值
if(choose == QMessageBox::Ok)
ui->label->setText("infomation对话框 ok");
}
"Critical消息框"critical
void MyDialog::on_criticalMsg_clicked()
{
ui->label->setText("Critical Message Box");
int choose = QMessageBox::critical(
this,
"Critical消息框",
"这是一个Critical消息框测试",
QMessageBox::Cancel|QMessageBox::Ok,
QMessageBox::NoButton//默认选中的,焦点在哪个按钮上
);
}
警告消息框warning
v
oid MyDialog::on_warningMsg_clicked()
{
ui->label->setText("Warning Message Box");
int choose = QMessageBox::warning(
this,
"Warning消息框",
"您的文档尚未保存,是否要保存",
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
QMessageBox::Save);
switch(choose)
{
case QMessageBox::Save:
ui->label->setText("Warning/save");
break;
case QMessageBox::Discard:
ui->label->setText("Warning/discard");
break;
case QMessageBox::Cancel:
ui->label->setText("Warning/Cancel");
break;
}
}
自定义消息框
void MyDialog::on_customMsg_clicked()
{
ui->label->setText("Custom Message Box");
//创建消息框对象
QMessageBox customMsg;//*************************
//向消息框中添加按钮 addButton()方法
QPushButton* pyes = customMsg.addButton("yes",QMessageBox::ActionRole);
QPushButton* pno = customMsg.addButton("no",QMessageBox::ActionRole);
QPushButton* pcancel = customMsg.addButton(QMessageBox::Cancel);
//消息框的上方 标题
customMsg.setWindowTitle("Custom消息框");
//消息框的提示内容文本
customMsg.setText("这是我们自定义的消息框!");
//添加前方的图片图标
customMsg.setIconPixmap(QPixmap(":/head23.jpg"));
//消息框执行
//exec(); QDialog()中的一个函数,消息循环会在这个函数里面更新,等用户点击按钮后,调用exec()函数,执行
customMsg.exec();//模态窗口
/*
* static在函数结束时不会被回收的
static QMessageBox mb;
mb.show();
//也能显示对话框,引起内存泄漏
QMessageBox* qb = new QMessageBox;
qb->show();
* */
//判断点击了消息框中的哪个按钮
if(customMsg.clickedButton() == pyes)
{
ui->label->setText("Custom/yes");
}
else if(customMsg.clickedButton() == pno)
{
ui->label->setText("Custom/no");
}
else if(customMsg.clickedButton() == pcancel)
{
ui->label->setText("Custom/cancel");
}
}
关于qt消息框aboutQt
void MyDialog::on_aboutQTMsg_clicked()
{
ui->label->setText("AboutQt Message Box");
QMessageBox::aboutQt(this,"终于完事了!!");
}
关于消息框about
void MyDialog::on_aboutMsg_clicked()
{
ui->label->setText("About Message Box");
QMessageBox::about(this,"About消息框","看到这里你还好么?");
}
输入对话框getText;getInt;getDouble
void MyWidget::on_pushButton_4_clicked()
{
bool ok;
// 获取字符串
QString string = QInputDialog::getText(this, tr("输入字符串对话框"),
tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
if(ok) qDebug() << "string:" << string;
// 获取整数
int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),
tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
if(ok) qDebug() << "value1:" << value1;
// 获取浮点数
double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),
tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
if(ok) qDebug() << "value2:" << value2;
QStringList items;
items << tr("条目1") << tr("条目2");
// 获取条目
QString item = QInputDialog::getItem(this, tr("输入条目对话框"),
tr("请选择或输入一个条目"), items, 0, true, &ok);
if(ok) qDebug() << "item:" << item;
}
向导对话框
void MyWidget::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1()); // 添加向导页面
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
QWizardPage * MyWidget::createPage1() // 向导页面1
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
QWizardPage * MyWidget::createPage2() // 向导页面2
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("用户选择信息"));
return page;
}
QWizardPage * MyWidget::createPage3() // 向导页面3
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("结束"));
return page;
}
进度对话框
void MyWidget::on_pushButton_6_clicked()
{
QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
dialog.setWindowTitle(tr("进度对话框")); // 设置窗口标题
dialog.setWindowModality(Qt::WindowModal); // 将对话框设置为模态
dialog.show();
for(int i=0; i<50000; i++) { // 演示复制进度
dialog.setValue(i); // 设置进度条的当前值
QCoreApplication::processEvents(); // 避免界面冻结
if(dialog.wasCanceled()) break; // 按下取消按钮则中断
}
dialog.setValue(50000); // 这样才能显示100%,因为for循环中少加了一个数
qDebug() << tr("复制结束!");
}
20.文本框的选择toPlainText();toHtml();text();currentText()
QPlainTextEdit 多行简单文本框用toPlainText();
QTextEdit富文本框,简单文本用 toPlainText(),富文本用toHtml().
QLineEdit(行编辑时) 时用text().
currentText()保存组合框当前文本
|setValue() 给函数赋值
|value() 值
isChecked() 点击选择
void MainWindow::on_pushButton_combo_clicked()
{
//ui->comboBox->currentText() 获取选中的那条文本内容
ui->label_combo->setText(ui->comboBox->currentText());//currentText()保存组合框当前文本
ui->label_com2->setText(ui->comboBox->currentText().append("aaaaaaaaa"));
}
//radiobutton 单选按钮
void MainWindow::on_pushButton_radiobutton_clicked()
{
//获取按钮上的文本 ui->checkBox->text()
if(ui->radioButton->isChecked())
{
ui->label_radio->setText("falm");
}else if(ui->radioButton_2->isChecked())
ui->label_radio->setText("man");
}
21.控件样式动态更改
ui->frame->setFrameShape(QFrame::Box);
ui->frame->setFrameShadow(QFrame::Sunken);
// 以上两个函数可以使用setFrameStyle(QFrame::Box | QFrame::Sunken)代替
ui->frame->setLineWidth(5);
ui->frame->setMidLineWidth(10);
frame控件
22.字体更改
QFont font;
font.setFamily("华文行楷");
font.setPointSize(20);
font.setBold(true);
font.setItalic(true);
ui->label->setFont(font);//setFont更改字体、颜色
QString string = tr("标题太长,需要进行省略!");
QString str = ui->label->fontMetrics().elidedText(string, Qt::ElideRight, 180);
ui->label->setText(str);
23.label中添加动画以及图片
动态添加label
QLabel *label = new QLabel(this);
label->setText(tr("hello Qt!"));
label->move(100,50);//label 所在位置
ui->label->setPixmap(QPixmap("D:/qtwenjian/src/03/3-8/logo.png"));
QMovie *movie = new QMovie("D:/qtwenjian/src/03/3-8/donghua.gif");
ui->label->setMovie(movie); // 在标签中添加动画
movie->start();
按键进行隐藏窗口
void MyWidget::on_pushButton_toggled(bool checked)
{
ui->textEdit->setVisible(checked); // 设置文本编辑器的显示和隐藏
if(checked) ui->pushButton->setText(tr("隐藏可扩展窗口"));
else ui->pushButton->setText(tr("显示可扩展窗口"));
}
24.lcdNumber显示系统时间
头文件定义
#include <QDateTime>
QTimer *pTimer;
QDateTime dateTime;
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
pTimer =new QTimer();
connect(pTimer, SIGNAL(timeout()), this, SLOT(showtime())); //用一个定时信号来更改时间
pTimer->start(500);
}
void MyWidget::showtime()
{
dateTime=QDateTime::currentDateTime();//获取当地时间
ui->lcdNumber->resize(100,50);//设置大小
ui->lcdNumber->setDigitCount(8);
QString timestr = dateTime.toString("hh:mm:ss"); //设置时间格式
ui->lcdNumber->display(timestr);
}
lcdNumber位移
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
id1 = startTimer(1000); // 开启一个1秒定时器,返回其ID
id2 = startTimer(1500);
id3 = startTimer(2200);
QTimer *timer = new QTimer(this); // 创建一个新的定时器
// 关联定时器的溢出信号到槽上
connect(timer, &QTimer::timeout, this, &Widget::timerUpdate);
timer->start(1000); // 设置溢出时间为1秒,并启动定时器
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
QTimer::singleShot(10000, this, &Widget::close);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
if (event->timerId() == id1) { // 判断是哪个定时器
qDebug() << "timer1";
}
else if (event->timerId() == id2) {
qDebug() << "timer2";
}
else {
qDebug() << "timer3";
}
}
void Widget::timerUpdate() // 定时器溢出处理
{
QTime time = QTime::currentTime(); // 获取当前时间
QString text = time.toString("hh:mm"); // 转换为字符串
if((time.second() % 2) == 0) text[2]=' '; // 每隔一秒就将“:”显示为空格
ui->lcdNumber->display(text);
int rand = qrand() % 200; // 产生300以内的正整数
ui->lcdNumber->move(rand, rand);
}
25.菜单栏设置
QMenu *editMenu = ui->menuBar->addMenu(tr("编辑(&E)")); // 添加编辑菜单
QAction *action_Open = editMenu->addAction( // 添加打开菜单
QIcon("此处添加图标地址"), tr("打开文件(&O)"));
action_Open->setShortcut(QKeySequence("Ctrl+O")); // 设置快捷键
ui->mainToolBar->addAction(action_Open); // 在工具栏中添加动作
QActionGroup *group = new QActionGroup(this); // 建立动作组
QAction *action_L = group->addAction(tr("左对齐(&L)")); // 向动作组中添加动作
action_L->setCheckable(true); // 设置动作checkable属性为true
QAction *action_R = group->addAction(tr("右对齐(&R)"));
action_R->setCheckable(true);
QAction *action_C = group->addAction(tr("居中(&C)"));
action_C->setCheckable(true);
action_L->setChecked(true); // 最后指定action_L为选中状态
editMenu->addSeparator(); // 向菜单中添加间隔器
editMenu->addAction(action_L); // 向菜单中添加动作
editMenu->addAction(action_R);
editMenu->addAction(action_C);
QToolButton *toolBtn = new QToolButton(this); // 创建QToolButton
toolBtn->setText(tr("颜色"));
QMenu *colorMenu = new QMenu(this); // 创建一个菜单
colorMenu->addAction(tr("红色"));
colorMenu->addAction(tr("绿色"));
toolBtn->setMenu(colorMenu); // 添加菜单
toolBtn->setPopupMode(QToolButton::MenuButtonPopup); // 设置弹出模式
ui->mainToolBar->addWidget(toolBtn); // 向工具栏添加QToolButton按钮
QSpinBox *spinBox = new QSpinBox(this); // 创建QSpinBox
ui->mainToolBar->addWidget(spinBox); // 向工具栏添加QSpinBox部件
// 显示临时消息,显示2000毫秒即2秒
ui->statusBar->showMessage(tr("欢迎使用多文档编辑器"), 2000);
// 创建标签,设置标签样式并显示信息,然后将其以永久部件的形式添加到状态栏
QLabel *permanent = new QLabel(this);
permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
permanent->setText("www.qter.org");
ui->statusBar->addPermanentWidget(permanent);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_action_New_triggered()//咋转到槽函数的啊
{
// 新建文本编辑器部件
QTextEdit *edit = new QTextEdit(this);
// 使用QMdiArea类的addSubWindow()函数创建子窗口,以文本编辑器为中心部件
QMdiSubWindow *child = ui->mdiArea->addSubWindow(edit);
child->setWindowTitle(tr("多文档编辑器子窗口"));
child->show();
}
void MainWindow::on_action_Dock_triggered()
{
ui->dockWidget->show();
}
26.文本处理
富文本框处理TextEdit
富文本是可以支持多格式输入:字体颜色、表格、图片等。
头文件#include
QTextDocument *document = ui->textEdit->document(); // 获取文档对象
QTextFrame *rootFrame = document->rootFrame(); // 获取根框架
QTextFrameFormat format; // 创建框架格式
format.setBorderBrush(Qt::red); // 边界颜色
format.setBorder(3); // 边界宽度
rootFrame->setFrameFormat(format); // 框架使用格式
QTextFrameFormat frameFormat;
frameFormat.setBackground(Qt::lightGray); // 设置背景颜色
frameFormat.setMargin(10); // 设置边距
frameFormat.setPadding(5); // 设置填衬
frameFormat.setBorder(2);
frameFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Dotted); // 设置边框样式
QTextCursor cursor = ui->textEdit->textCursor(); // 获取光标
cursor.insertFrame(frameFormat); // 在光标处插入框架
QAction *action_textFrame = new QAction(tr("框架"), this);
connect(action_textFrame, &QAction::triggered, this, &MainWindow::showTextFrame);
ui->mainToolBar->addAction(action_textFrame); // 在工具栏添加动作
QAction *action_textBlock = new QAction(tr("文本块"), this);
connect(action_textBlock, &QAction::triggered, this, &MainWindow::showTextBlock);
// ui->mainToolBar->addAction(action_textBlock);
QAction *action_font = new QAction(tr("字体"), this);
action_font->setCheckable(true); // 设置动作可以被选中
connect(action_font, &QAction::toggled, this, &MainWindow::setTextFont);
// ui->mainToolBar->addAction(action_font);
}
void MainWindow::showTextFrame() // 遍历框架
{
QTextDocument *document = ui->textEdit->document();
QTextFrame *frame = document->rootFrame();
QTextFrame::iterator it; // 建立QTextFrame类的迭代器
for (it = frame->begin(); !(it.atEnd()); ++it) {
QTextFrame *childFrame = it.currentFrame(); // 获取当前框架的指针
QTextBlock childBlock = it.currentBlock(); // 获取当前文本块
if (childFrame)
qDebug() << "frame";
else if (childBlock.isValid())
qDebug() << "block:" << childBlock.text();
}
}
void MainWindow::showTextBlock() // 遍历文本块
{
QTextDocument *document = ui->textEdit->document();
QTextBlock block = document->firstBlock(); // 获取文档的第一个文本块
for (int i = 0; i < document->blockCount(); i++) {
qDebug() << tr("文本块%1,文本块首行行号为:%2,长度为:%3,内容为:")
.arg(i).arg(block.firstLineNumber()).arg(block.length())
<< block.text();
block = block.next(); // 获取下一个文本块
}
}
void MainWindow::setTextFont(bool checked) // 设置字体格式
{
if(checked){ // 如果处于选中状态
QTextCursor cursor = ui->textEdit->textCursor();
QTextBlockFormat blockFormat; // 文本块格式
blockFormat.setAlignment(Qt::AlignCenter); // 水平居中
cursor.insertBlock(blockFormat); // 使用文本块格式
QTextCharFormat charFormat; // 字符格式
charFormat.setBackground(Qt::lightGray); // 背景色
charFormat.setForeground(Qt::blue); // 字体颜色
// 使用宋体,12号,加粗,倾斜
charFormat.setFont(QFont(tr("宋体"), 12, QFont::Bold, true));
charFormat.setFontUnderline(true); // 使用下划线
cursor.setCharFormat(charFormat); // 使用字符格式
cursor.insertText(tr("测试字体")); // 插入文本
}
else{/*恢复默认的字体格式*/} // 如果处于非选中状态,可以进行其他操作
}
使用拖放来打开文本
#include <QDragEnterEvent>
#include <QUrl>
#include <QFile>
#include <QTextStream>
#include <QMimeData>
void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
{
if(event->mimeData()->hasUrls()) // 数据中是否包含URL
event->acceptProposedAction(); // 如果是则接收动作//查找路径
else event->ignore(); // 否则忽略该事件
}
void MainWindow::dropEvent(QDropEvent *event) // 放下事件
{
const QMimeData *mimeData = event->mimeData(); // 获取MIME数据
if(mimeData->hasUrls()){ // 如果数据中包含URL
QList<QUrl> urlList = mimeData->urls(); // 获取URL列表
// 将其中第一个URL表示为本地文件路径
QString fileName = urlList.at(0).toLocalFile();//toLocalFile();转换为本地文件路径
if(!fileName.isEmpty()){ // 如果文件路径不为空
QFile file(fileName); // 建立QFile对象并且以只读方式打开该文件
if(!file.open(QIODevice::ReadOnly)) return;
QTextStream in(&file); // 建立文本流对象
ui->textEdit->setText(in.readAll()); // 将文件中所有内容读入编辑器
}
}
}
设置图片拖拽
setAcceptDrops(true); // 设置窗口部件可以接收拖入
QLabel *label = new QLabel(this); // 创建标签
QPixmap pix("../imagedragdrop/logo.png");
label->setPixmap(pix); // 添加图片
label->resize(pix.size()); // 设置标签大小为图片的大小
label->move(100,100);
label->setAttribute(Qt::WA_DeleteOnClose); // 当窗口关闭时销毁图片
void MainWindow::mousePressEvent(QMouseEvent *event) //鼠标按下事件
{
// 第一步:获取图片
// 将鼠标指针所在位置的部件强制转换为QLabel类型
QLabel *child = static_cast<QLabel*>(childAt(event->pos()));
if(!child->inherits("QLabel")) return; // 如果部件不是QLabel则直接返回
QPixmap pixmap = *child->pixmap(); // 获取QLabel中的图片
// 第二步:自定义MIME类型
QByteArray itemData; // 创建字节数组
QDataStream dataStream(&itemData, QIODevice::WriteOnly); // 创建数据流
// 将图片信息,位置信息输入到字节数组中
dataStream << pixmap << QPoint(event->pos() - child->pos());
// 第三步:将数据放入QMimeData中
QMimeData *mimeData = new QMimeData; // 创建QMimeData用来存放要移动的数据
// 将字节数组放入QMimeData中,这里的MIME类型是我们自己定义的
mimeData->setData("myimage/png", itemData);
// 第四步:将QMimeData数据放入QDrag中
QDrag *drag = new QDrag(this); // 创建QDrag,它用来移动数据
drag->setMimeData(mimeData);
drag->setPixmap(pixmap);//在移动过程中显示图片,若不设置则默认显示一个小矩形
drag->setHotSpot(event->pos() - child->pos()); // 拖动时鼠标指针的位置不变
// 第五步:给原图片添加阴影
QPixmap tempPixmap = pixmap; // 使原图片添加阴影
QPainter painter; // 创建QPainter,用来绘制QPixmap
painter.begin(&tempPixmap);
// 在图片的外接矩形中添加一层透明的淡黑色形成阴影效果
painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
painter.end();
child->setPixmap(tempPixmap); // 在移动图片过程中,让原图片添加一层黑色阴影
// 第六步:执行拖放操作
if (drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction)
== Qt::MoveAction) // 设置拖放可以是移动和复制操作,默认是复制操作
child->close(); // 如果是移动操作,那么拖放完成后关闭原标签
else {
child->show(); // 如果是复制操作,那么拖放完成后显示标签
child->setPixmap(pixmap); // 显示原图片,不再使用阴影
}
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
{
// 如果有我们定义的MIME类型数据,则进行移动操作
if (event->mimeData()->hasFormat("myimage/png")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
void MainWindow::dragMoveEvent(QDragMoveEvent *event) // 拖动事件
{
if (event->mimeData()->hasFormat("myimage/png")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
void MainWindow::dropEvent(QDropEvent *event) // 放下事件
{
if (event->mimeData()->hasFormat("myimage/png")) {
QByteArray itemData = event->mimeData()->data("myimage/png");
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
QPixmap pixmap;
QPoint offset;
// 使用数据流将字节数组中的数据读入到QPixmap和QPoint变量中
dataStream >> pixmap >> offset;
// 新建标签,为其添加图片,并根据图片大小设置标签的大小
QLabel *newLabel = new QLabel(this);
newLabel->setPixmap(pixmap);
newLabel->resize(pixmap.size());
// 让图片移动到放下的位置,不设置的话,图片会默认显示在(0,0)点即窗口左上角
newLabel->move(event->pos() - offset);
newLabel->show();
newLabel->setAttribute(Qt::WA_DeleteOnClose);
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
设置打印转换格式pdf
void MainWindow::doPrint() // 打印
{
QPrinter printer; // 创建打印机对象
QPrintDialog dlg(&printer, this); // 创建打印对话框
// 如果编辑器中有选中区域,则打印选中区域
if (ui->textEdit->textCursor().hasSelection())
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
if (dlg.exec() == QDialog::Accepted) { // 如果在对话框中按下了打印按钮
ui->textEdit->print(&printer); // 则执行打印操作
}
}
void MainWindow::doPrintPreview() // 打印预览
{
QPrinter printer;
QPrintPreviewDialog preview(&printer, this); // 创建打印预览对话框
// 当要生成预览页面时,发射paintRequested()信号
connect(&preview, &QPrintPreviewDialog::paintRequested,
this, &MainWindow::printPreview);
preview.exec();
}
生成pdf格式
void MainWindow::createPdf() // 生成PDF文件
{
QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"),
QString(), "*.pdf");
if (!fileName.isEmpty()) {
if (QFileInfo(fileName).suffix().isEmpty())
fileName.append(".pdf"); // 如果文件后缀为空,则默认使用.pdf
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat); // 指定输出格式为pdf
printer.setOutputFileName(fileName);
ui->textEdit->print(&printer);
}
}
27正则表达式
主要用来限制对话框的输入键盘限制
#define NM_REG_AIRPORT "^(?:200000|1\d\d\d\d\d|[1-9]\d\d\d\d|[1-9]\d\d\d|[1-9]\d\d)$"
宏:?代表禁止输入±,最大数字200000,或者1开头,后面最多5位,此后同理,1-9开头,此后最多4为。
QRegExp AIRport(NM_REG_AIRPORT);
QValidator *validatorAIRport = new QRegExpValidator(AIRport);
ui.lineEdit->setValidator(validatorAIRport);
ui.lineEdit->setToolTip(QString::fromLocal8Bit("输入完别忘了点确定"));
控件提示框
ui.lineEdit->setToolTip(QString::fromLocal8Bit("别瞎输入:0-200000之间,多了也不好使,输入完别忘了点确定"));
//第一个控件设置名字,
28定时器
defaulttime是我想定义的初始值。
后面界面输入数值,进行点击跳转到别的槽函数进行数字更改
此处我写于构造函数
my_time = new QTimer(this); //定时器
my_time->start(defaulttime); //定时器3000ms
connect(my_time, SIGNAL(timeout()), this, SLOT(refresh())); //绑定槽函数
void NcReadPerformanceWnd::okButton()//定时器刷新
{
num = ui.lineEdit->text();
defaulttime = num.toInt();
my_time->setInterval(defaulttime);//刷新定时器周期
}
29comBox 添加信息及其美化
ui.comboBox->setEditable(true);//设置combobox可编辑
ui.comboBox->setCurrentText(list.at(0).toString()); //设置combox初始写入数据,list.at(0)
QComboBox *ComBox=new QComboBox(this);
ComBox->setGeometry(0,0,209,45);
ComBox->addItem(tr("1小时"));
ComBox->addItem(tr("2小时"));
ComBox->addItem(tr("3小时"));
ComBox->addItem(tr("4小时"));
ComBox->setStyleSheet("QComboBox{"//基本样式
"border-image:url(:/Sys/output-box.png);"
"font:黑体;"
"font-size:20px;"
"color:rgb(255,255,255);"
"background-color:transparent;"
"width:209px;"
"height:45px;"
"}"
"QComboBox::down-arrow{"//下拉三角样式
"image:url(:/Sys/btn_pulldown.png);"
"background-color:transparent;"
"width:36px;"
"height:22px;"
"right:2px;"
"}"
"QComboBox QAbstractItemView {"//Box内条目
"outline:0px;" //去掉虚线
"}"
"QComboBox::drop-down {"
"subcontrol-origin: padding;"
"subcontrol-position: top right;"
"width: 36px;"
"}"
);
https://blog.csdn.net/qq_41673920/article/details/93495716
30button删除tableWidget中某一行
void NcStateTable::deleteWidgetLine()
{
QPushButton *btn = (QPushButton *)sender();//bun发送信号
int x = btn->mapToParent(QPoint(0, 0)).x();//将子小部件坐标转化为父部件坐标x
int y = btn->mapToParent(QPoint(0, 0)).y();
QModelIndex index = tablewidget->indexAt(QPoint(x, y));//返回表项坐标的索引位置。
int row = index.row();
tablewidget->removeRow(row);
}
页面删除deleteLater
当在窗口上.children可以返回当前窗口所有子类对象列表
deletelater 可以删除窗口子类对象 ,我觉得和dilete相比最大区别delete是直接删除,deletelater是发一个信号,当信号主窗口接收时删除
//m_pSetValueWnd new出来的窗口
QObjectList objectList = m_pSetValueWnd.children();//children 返回子对象的列表
for (int i=0; i<objectList.size(); i++)
{
objectList[i]->deleteLater();//好像是delete安全形式 // deleteLater并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象
}
extern
NcSymbolTable* Box;
NcSymbolTable::NcSymbolTable(QWidget *parent)
: NRFWidget(parent)
{
Box = this;
extern NcSymbolTable* Box;
writeDatagram通信发送函数
//writeDatagram方法传入4个参数,分别是数据,数据大小,接收端ip,接收端端口
//如果传输成功,该方法返回传输数据的大小(字节),如果失败返回-1
tablewidget用法
ui.ForecastStrike->insertRow(ui.ForecastStrike->rowCount());//添加新一行
ui.tableWidget->item(count, 0)->setText(QString("%1").arg(line))
//ui.tableWidget->setHorizontalHeaderLabels(horHeaderStr); //设置表头内容
//ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //让页面平铺
ui.tableWidget->verticalHeader()->setVisible(false); //隐藏列表头
tablewidget加按钮
QTableWidgetItem * item = new QTableWidgetItem();
item->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
ui.tableWidget->setItem(columnsNum, 0, item);
QCheckBox* CBox = new QCheckBox();
m_mapTableCheckbox.insert(columnsNum, CBox);
CBox->setObjectName("TableCheckBox");
ui.tableWidget->setCellWidget(columnsNum, 0, CBox);
PBuManagers = new QPushButton(QString::fromLocal8Bit("确认审核"));
QTableWidgetItem * itemmm = new QTableWidgetItem();
ui.tableWidget->setItem(columnsNum, 12, itemmm);
ui.tableWidget->setCellWidget(columnsNum, 12, PBuManagers);
connect(PBuManagers, SIGNAL(clicked()), this, SLOT(slotsAuditInformation()));//点击进去审核函数
for (it = orcList.begin(), count = 0, line = 1; it != orcList.end(); it++, count++, line++)
{
emit SignalAdd(count);//添加一行绑定控件
int i = 0;
ui.tableWidget->setItem(count, 0, new QTableWidgetItem());//setItem添加一个单元格
ui.tableWidget->item(count, 0)->setText(QString("%1").arg(line));
ui.tableWidget->item(count, 0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
for (int j = 0; j < orcList.at(0).size(); j++)
{
ui.tableWidget->setItem(count, j + 1, new QTableWidgetItem());//setItem添加一个单元格
if (j == 10)
{
ui.tableWidget->item(count, j + 1)->setBackground(QColor(orcList.at(count).at(j).toInt()));//笔刷颜色
ui.tableWidget->item(count, j + 1)->setData(Qt::UserRole, orcList.at(count).at(j).toInt());//颜色默认值
}
else if (j == 9 || j == 8)
{
QString strText = (orcList.at(count).at(j).toInt() == 1) ? QString::fromLocal8Bit("是") : QString::fromLocal8Bit("否");//查看是否是1,
ui.tableWidget->item(count, j + 1)->setText(strText);
}
else
{
ui.tableWidget->item(count, j + 1)->setText(orcList.at(count).at(j).toString());
}
}
}
二 页面美化设置
// 获取pushButton的调色板
QPalette palette1 = ui->pushButton->palette();
// 设置按钮文本颜色为红色
palette1.setColor(QPalette::ButtonText, Qt::red);
// 设置按钮背景色为绿色
palette1.setColor(QPalette::Button, Qt::green);
// pushButton使用修改后的调色板
ui->pushButton->setPalette(palette1);
// 设置spinBox不可用
ui->spinBox->setDisabled(true);
QPalette palette2 = ui->spinBox->palette();
// 设置spinBox不可用时的背景颜色为蓝色
palette2.setColor(QPalette::Disabled,QPalette::Base,Qt::blue);
ui->spinBox->setPalette(palette2);
1. 伪状态(鼠标放在页面上的状态)
2.屏蔽窗口
QPixmap pix;
// 加载图片
pix.load(":/image/yafeilinux.png");
// 设置窗口大小为图片大小
resize(pix.size());
// 为窗口设置遮罩
setMask(pix.mask());
3.页面透明度
// // 设置窗口的不透明度为0.5
setWindowOpacity(0.5);
窗口部件提升
Qt学习:将ui界面中的默认控件提升为自定义类
https://blog.csdn.net/wzj0808/article/details/96102352
更改list中.at特定位置中的值 [ ]
[][]相当于at,at属于const,不可修改值
QVariant temp = QVariant(QString::fromLocal8Bit("是"));
orcList[z][t] = temp;//[][]相当于at,at属于const,不可修改值,这个不同,但这个不会提醒报错
定时器周期
关键点在于我后面虽然对初始值进行了传值处理,但是不好使。我只能刷新定时器周期,才可以正常运行
.其他未整理
//3.关联两个对象 connect 四个参数:1. 发送信号的对象 2. 发送的信号 3. 接受者所在的位置 4.对应处理的槽函数
connect(ui->btn_1,SIGNAL(clicked()),this,SLOT(btn_showHello_slot()));
字符串转换
toint
//setItem添加一个单元格
//toLocal8Bit把字符串转换成字节数组
push_back//结尾添加
push_front//头添加
setValue() //给函数赋值
value() //值
main函数创建页面
QWidget widget;
widget.resize(400, 300); // 设置窗口大小
widget.move(200, 100); // 设置窗口位置
widget.show();
常用插件函数
setItem(1,num)//可以对数据进行添加,用了combox里,但是是在原本有数据情况下,
没有数据用
addItem(name)
常用MIME类型数据处理函数
settoolTep函数
鼠标悬停显示气泡内容
用法
三 qt小程序
1.读取xml
void NcMissileComputing::readXml(char* fileName)
{
QFile fp(QString::fromLocal8Bit(fileName));
QXmlStreamReader reader;
if (!fp.open(QFile::ReadOnly))
{
NRFGuiUtil::ShowPromptMessage(NULL, "警告!", QString::fromLocal8Bit("%1文件打开失败").arg(fileName));
}
reader.setDevice(&fp);
while (!reader.atEnd())
{
if (reader.name() == QString::fromLocal8Bit("LocationGunTruckX"))//炮车x
{
dPosX = reader.readElementText().toDouble();
}
else if (reader.name() == QString::fromLocal8Bit("LocationGunTruckY"))//跑车y
{
dPosY = reader.readElementText().toDouble();
}
reader.readNext();
}
最后
以上就是眯眯眼奇迹为你收集整理的qt小笔记二 页面美化设置三 qt小程序的全部内容,希望文章能够帮你解决qt小笔记二 页面美化设置三 qt小程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复