qt小笔记

    技术2023-09-10  86

    自己备忘的常见的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.引用外部资源extern13.互斥锁14.replace() 用指定的字符串替换原字符串中的某些字符15.文件存取16.qt鼠标定位以及定时器键盘按下事件鼠标按下事件鼠标按下换图标 鼠标移动事件鼠标按住进行页面移动 鼠标双击事件鼠标双击进行 鼠标抬起事件鼠标抬起恢复原本指针 鼠标滚轮事件定时器事件 17.模态窗口setModal18.文件选择对话框、颜色选择对话框、字体选择对话框19.消息框疑问消息框questioninfomation对话框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中某一行页面删除deleteLaterexternwriteDatagram通信发送函数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(); }
    Processed: 0.010, SQL: 10