• QT 一些非常常用的操作


    一   如果在窗体关闭前自行判断是否可关闭
    二   如何用打开和保存文件对话框  
    三   如何使用警告、信息等对话框  
    四   在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

  • 相关阅读:
    一.js高级(4)-函数调用-this指向-其他参数
    一.js高级(3)-原型及其继承
    一.js高级(2) -构造函数-原型对象
    curl ,post,get (原创)
    PDOHelper (原创)
    php 写日志函数(原创)
    一致性hash 算法 (转)
    md5 c# unicode 互换(原创)
    php auto_load mvc 接口框架(原创)
    php获取uniqid
  • 原文地址:https://www.cnblogs.com/findumars/p/5608620.html
Copyright © 2020-2023  润新知