QT 一些非常常用的操作

时间:2023-02-22 12:36:51

一   如果在窗体关闭前自行判断是否可关闭
二   如何用打开和保存文件对话框  
三   如何使用警告、信息等对话框  
四   在Windows下Qt里为什么没有终端输出
五   想在源代码中直接使用中文,而不使用tr()函数进行转换,怎么办
六   为什么将开发的使用数据库的程序发布到其它机器就连接不上数据库
七   如何创建QT使用的DLL(.so)以及如何使用此DLL(.so)
八   如何启动一个外部程序
九   如何制作不规则形状的窗体或部件
十   如何显示一个图片并使其随窗体同步缩放
十一  Windows下如何读串口信息
十二 背景修改
十三  载入某个指定类型文件
十四  用label就可以载入图片
十五  载入某个指定类型文件布局
十六   程序图标
十七   回车输出
十九   设置背景音乐
二十   禁止QAbstractItemView的子类的双击修改功能。
二十一   qt对文件的操作
二十二   qt自定义确认对话框

一  如果在窗体关闭前自行判断是否可关闭
  答:重新实现这个窗体的closeEvent()函数,加入判断操作
  void MainWindow::closeEvent(QCloseEvent *event)
  {
  if (maybeSave())
  {
  writeSettings();
  event->accept();
  }
  else
  {
  event->ignore();
  }
  }
二  如何用打开和保存文件对话框
  答:使用QFileDialog
  QString fileName = QFileDialog::getOpenFileName(this);
  if (!fileName.isEmpty())
  {
  loadFile(fileName);
  }
  QString fileName = QFileDialog::getSaveFileName(this);
  if (fileName.isEmpty())
  {
  return false;
  }
  如果用qt自带的话:
  选择文件夹
  QFileDialog* openFilePath = new QFileDialog( this, " 请选择文件夹", "file");     //打开一个目录选择对

话框
  openFilePath-> setFileMode( QFileDialog::DirectoryOnly );
  if ( openFilePath->exec() == QDialog::Accepted )
  {
  //code here!
  }
  delete openFilePath;
  选择文件:
  QFileDialog *openFilePath = new QFileDialog(this);
  openFilePath->setWindowTitle(tr("请选择文件"));
  openFilePath->setDirectory(".");
  openFilePath->setFilter(tr("txt or image(*.jpg *.png *.bmp *.tiff *.jpeg *.txt)"));
  if(openFilePath->exec() == QDialog::Accepted)
  {
  //code here
  }
  delete openFilePath;
三 如何使用警告、信息等对话框
  答:使用QMessageBox类的静态方法
  int ret = QMessageBox::warning(this, tr("Application"),
  tr("The document has been modified./n"
  "Do you want to save your changes?"),
  QMessageBox::Yes | QMessageBox::Default,
  QMessageBox::No,
  QMessageBox::Cancel | QMessageBox::Escape);
  if (ret == QMessageBox::Yes)
  return save();
  else if (ret == QMessageBox::Cancel)
  return false;
  或者简单点儿:
  QMessageBox::information(this, "关于","盲人辅助系统(管理端)!/nVersion:1.0/nNo Copyright");
四  在Windows下Qt里为什么没有终端输出?
  答:把下面的配置项加入到.pro文件中
  win32:CONFIG += console
五 想在源代码中直接使用中文,而不使用tr()函数进行转换,怎么办?
  答:在main函数中加入下面三条语句,但并不提倡
  QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
  QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
  或者
  QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
  QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
  使用GBK还是使用UTF-8,依源文件中汉字使用的内码而定
  这样,就可在源文件中直接使用中文,比如:
  QMessageBox::information(NULL, "信息", "关于本软件的演示信息", QMessageBox::Ok,

QMessageBox::NoButtons);
六 为什么将开发的使用数据库的程序发布到其它机器就连接不上数据库?
  答:这是由于程序找不到数据库插件而致,可照如下解决方法:
  在main函数中加入下面语句:
  QApplication::addLibraryPath(strPluginsPath");
  strPluginsPath是插件所在目录,比如此目录为/myapplication/plugins
  则将需要的sql驱动,比如qsqlmysql.dll, qsqlodbc.dll或对应的.so文件放到
  /myapplication/plugins/sqldrivers/
  目录下面就行了
  这是一种解决方法,还有一种通用的解决方法,即在可执行文件目录下写qt.conf文件,把系统相关的一些目录配置

写到qt.conf文件里,详细情况情参考Qt Document Reference里的qt.conf部分
七 如何创建QT使用的DLL(.so)以及如何使用此DLL(.so)
  答:创建DLL时其工程使用lib模板
  TEMPLATE=lib
  而源文件则和使用普通的源文件一样,注意把头文件和源文件分开,因为在其它程序使用此DLL时需要此头文件
  在使用此DLL时,则在此工程源文件中引入DLL头文件,并在.pro文件中加入下面配置项:
  LIBS += -Lyourdlllibpath -lyourdlllibname
  Windows下和Linux下同样(Windows下生成的DLL文件名为yourdlllibname.dll而在Linux下生成的为

libyourdlllibname.so。注意,关于DLL程序的写法,遵从各平台级编译器所定的规则。
八 如何启动一个外部程序
  答:1、使用QProcess::startDetached()方法,启动外部程序后立即返回;
  2、使用QProcess::execute(),不过使用此方法时程序会最阻塞直到此方法执行的程序结束后返回,这时候可使用

QProcess和QThread这两个类结合使用的方法来处理,
    以防止在主线程中调用而导致阻塞的情况
  先从QThread继承一个类,重新实现run()函数:
  class MyThread : public QThread
  {
  public:
  void run();
  };
  void MyThread::run()
  {
  QProcess::execute("notepad.exe");
  }
  这样,在使用的时候则可定义一个MyThread类型的成员变量,使用时调用其start()方法:
  class ...............
  {...........
  MyThread thread;
  ............
  };
  .....................
  thread.start();
九 如何制作不规则形状的窗体或部件
  答:请参考下面的帖子
  http://www.qtcn.org/bbs/read.php?tid=8681
  20、删除数据库时出现"QSqlDatabasePrivate::removeDatabase: connection 'xxxx' is still in use, all

queries will cease to work"该如何处理
  答:出现此种错误是因为使用了连接名字为xxxx的变量作用域没有结束,解决方法是在所有使用了xxxx连接
    的数据库组件变量的作用域都结束后再使用QSqlDatabase::removeDatabae("xxxx")来删除连接。
十  如何显示一个图片并使其随窗体同步缩放
  答:下面给出一个从QWidget派生的类ImageWidget,来设置其背景为一个图片,并可随着窗体改变而改变,其实从下

面的代码中
    可以引申出其它许多方法,如果需要的话,可以从这个类再派生出其它类来使用。
  头文件: ImageWidget.hpp
  #ifndef IMAGEWIDGET_HPP
  #define IMAGEWIDGET_HPP
  #include <QtCore>
  #include <QtGui>
  class ImageWidget : public QWidget
  {
  Q_OBJECT
  public:
  ImageWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
  virtual ~ImageWidget();
  protected:
  void resizeEvent(QResizeEvent *event);
  private:
  QImage _image;
  };
  #endif
  CPP文件: ImageWidget.cpp
  #include "ImageWidget.hpp"
  ImageWidget::ImageWidget(QWidget *parent, Qt::WindowFlags f)
  : QWidget(parent, f)
  {
  _image.load("image/image_background");
  setAutoFillBackground(true);   // 这个属性一定要设置
  QPalette pal(palette());
  pal.setBrush(QPalette::Window,
  QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,
  Qt::SmoothTransformation)));
  setPalette(pal);
  }
  ImageWidget::~ImageWidget()
  {
  }
  // 随着窗体变化而设置背景
  void ImageWidget::resizeEvent(QResizeEvent *event)
  {
  QWidget::resizeEvent(event);
  QPalette pal(palette());
  pal.setBrush(QPalette::Window,
  QBrush(_image.scaled(event->size(), Qt::IgnoreAspectRatio,
  Qt::SmoothTransformation)));
  setPalette(pal);
  }
十一 Windows下如何读串口信息
  答:可通过注册表来读qt4.1.0 读取注册表得到 串口信息的方法!
十二 背景修改
  QString filename = "E:/图片/壁纸/1.jpg";
  QPixmap pixmap(filename);
  pal.setBrush(QPalette::Window,QBrush(pixmap));
  setPalette(pal);
十三  载入某个指定类型文件
  openFileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "/home/picture", tr("Image Files

(*.png *.tif *.jpg *.bmp)"));
  if (!openFileName.isEmpty())
  {
  Ui_Project_UiClass::statusBar->showMessage("当前打开的文件:" + openFileName);
  label_2->setPixmap(QPixmap(openFileName));
  }
十四 图片问题
  用label就可以载入图片,方法:
  label->setPixmap(QPixmap(“path(可以用geifilename函数得到)”));
  但是这样的label没有滚动条,很不灵活,可以这样处理:
  在QtDesign中创建一个QScrollArea控件,设置一些属性,然后在代码中新建一个label指针,在cpp的构造函数中用

new QLabel(this)初始化(一定要有this,不然后面setWidget会出错)。然后再:
  scrollArea->setWidget(label_2);
  scrollArea->show();
十五  载入某个指定类型文件布局
  最后要充满窗口,点击最外层的窗口空白处。再点击水平layout即可
十六 程序图标
  准备一个ICO图标,把这个图标复制到程序的主目录下,姑且名字叫”myicon.ico”吧。然后编写一个icon.rc文件。

里面只有一行文字:
  IDI_ICON1               ICON                    “myicon.ico”
  最后,在工程的pro文件里加入一行:
  RC_FILE = icon.rc
  qmake和make一下,就可以发现你的应用程序拥有漂亮的图标了。
十七  回车输出
  QT中操作文件,从文件流QTextStream输出回车到txt的方法是<< 'r' << endl;
十九  设置背景音乐
  如果只是简单的设置背景音乐的话。用QSound。具体查看qt助手。
  windows下的QSound 只能播放wav格式哦。。
二十  禁止QAbstractItemView的子类的双击修改功能。
  比如listview,双击某个item就会成为编辑模式。禁止此功能。用:
  QAbstractItemVIew`s name->setEditTriggers(QAbstractItemView::NoEditTriggers);
二十一  qt对文件的操作
  读文件
  QFile inputFile(":/forms/input.txt");
  inputFile.open(QIODevice::ReadOnly);
  QTextStream in(&inputFile);
  QString line = in.readAll();
  inputFile.close();
  写文件
  QFile file(filename);
  if (!file.open(QIODevice::WriteOnly))
  {
  fprintf(stderr, "Could not open %s for writing: %s/n",
  qPrintable(filename),
  qPrintable(file.errorString()));
  return false;
  }
  file.write(data->readAll());
  file.close();
  将某个路径转化为当前系统认可的路径
  QDir::convertSeparators(openFileName)
  获取当前路径
  QDir currentPath;
  QString filePath = currentPath.absolutePath ();
  QString path = QDir::convertSeparators(filePath + "/" +clickedClass);
  一些操作
  Qfile::exists(fileName)
  Qfile::Remove();
  文件打开模式
  if(file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::ReadOnly)
二十二  qt确认对话框
  QMessageBox   mb(tr("删除确认"), tr("确认删除此项?"),
  QMessageBox::Question,
  QMessageBox::Yes   |   QMessageBox::Default,
  QMessageBox::No     |   QMessageBox::Escape,
  QMessageBox::NoButton);
  if(mb.exec() == QMessageBox::No)
  return;

http://blog.csdn.net/zhangxiaonanwin/article/details/6088317

QT 一些非常常用的操作的更多相关文章

  1. QT textbroswer textedite Qlist的常用的操作函数

    Textbrowser: 一.添加函数 1.insertPlainText():这个函数特别好用,括号里面的参数是QString,可以用QString(“%1%2”).arg(QString变量).a ...

  2. Mysql常用表操作 &vert; 单表查询

    160905 常用表操作 1. mysql -u root -p 回车 输入密码   2. 显示数据库列表 show databases     3. 进入某数据库 use database data ...

  3. SNMP常用数据操作

    SNMP常用数据操作 snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些.很多其它的比如Truth ...

  4. 常用SQL操作&lpar;MySQL或PostgreSQL&rpar;与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  5. 总结Selenium自动化测试方法(四)WebDriver常用的操作

    四.WebDriver常用的操作 1.控制浏览器操作 #控制浏览器的大小 self.driver.set_window_size(480,800) #控制浏览器返回 self.driver.back( ...

  6. MATLAB 常用形态学操作函数

    常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html) 1.dilate函数 该函数能够实现二值图像的膨胀操作,有以下形式 ...

  7. paip&period;c&plus;&plus; qt 目录遍历以及文件操作

    paip.c++ qt 目录遍历以及文件操作 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/a ...

  8. 关于Properties类常用的操作

    import java.io.*;import java.util.Enumeration;import java.util.Properties;/** * 关于Properties类常用的操作 * ...

  9. Jedis对Redis的常用命令操作

    本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项 ...

随机推荐

  1. FineUI第十三天---&grave;列布局

    这是经典的列布局:                  <x:Panel runat=                     <Items>                      ...

  2. hdu 1874 畅通工程续

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...

  3. dragsort拖动插件的使用

    <!DOCTYPE html><html><head> <title>DragSort Example</title> <meta c ...

  4. MyBatis limit分页设置

    错误的写法: <select id="queryMyApplicationRecord" parameterType="MyApplicationRequest&q ...

  5. 【转载】非对称加密过程详解(基于RSA非对称加密算法实现)

    1.非对称加密过程:         假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...

  6. 如何获得scala的帮助和退出

    scala> :helpAll commands can be abbreviated, e.g., :he instead of :help.:edit <id>|<line ...

  7. 使用PowerDesigner生成SQL语句

    0.我使用的PowerDedigner的版本如下: 1.tools>>Resource>>DBMS,然后选中你的数据库版本,双击或点击左上角的properties. 2.再选择 ...

  8. android make-standalone-toolchain&period;sh 使用说明

    #$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-24 --install-dir=./android ...

  9. 关于JXL读写以及修改EXCEL文件&lt&semi;转&gt&semi;

    首先引用网上的文章,谈谈JXL与POI的区别 POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API. Java Excel俗称jxl是一开放源码项目,通过它Ja ...

  10. &lbrack;I2C&rsqb;pca9555应用层测试代码

    注意点: 如果在设置I2C_SLAVE的时候,提示device_busy,可以使用I2C_SLAVE_FORCE, 在驱动里面二者对应同一个case语句 应用层可以调用接口:i2c_smbus_wri ...