Qt 开发需要知道的几个常用的语法(读书学习笔记)

  1. 程序的打包发布
    利用Qt Creator自带的windeployqt 工具,是非常的方便的,
    只要新建一个testname,将release版本的可执行文件xxx.exe放到这个新建文件夹testname中,
    然后打开在开始菜单—>Qt 5.3—>MinGW 4.8 (32-bit)—>Qt 5.3 for Desktop (MinGW 4.8 32 bit)的命令窗口:

  2. 进入到 d:/qt_release
    在命令窗口中输入:windeployqt xxx.exe,回车。
    即可将所有需要的dll动态库文件拷贝到testname文件夹中,一下子就ok了。
    输入命令:
    d:
    cd qt_release

calculator.exe

3.安装软件 Nullsoft Install System 并运行软件

Nullsoft Install System -> HW VNISEdit -> 文件 ->新建脚本向导

  1. QWidget的构造函数理解
    QWidget::QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
    功能: 这个函数是QWidget的构造函数
    参数:
    parent : 指向本类对象的指针
    parent = Q_NULLPTR , 这个宏值为 0

窗体的类型:
Qt::WindowFlags f = Qt::WindowFlags()
Qt::Widget: This is the default type for QWidget.
Qt::Window : 也是一种显示的窗体
Qt::Dialog : 这个是对话框
Qt::SplashScreen : 没有边框的窗体,类似全屏的显示

new QWidget(0,Qt::Dialog ); 对话窗体有边框
new QWidget(0,Qt::Dialog|Qt::FramelessWindowHint ); 对话窗体没有边框
new QWidget(0,Qt::SplashScreen);欢迎屏幕
new QWidget(0,Qt::SplashScreen|Qt::WindowStaysOnTopHint);欢迎屏幕 保持屏幕在最顶端

  1. 窗体的位置

关于屏幕坐标的认定,是按照左上角做为起始点
0-----------------> x方向 逐步增加的
|
|
|
|
|

Y方向

带边框的一套函数 :x(), y(),

不带边框的一套函数:
geometry : 几何结构
qDebug()<<“外框宽度:”<frameGeometry().width();
qDebug()<<“外框高度:”<frameGeometry().height();
qDebug()<<“内框宽度: “<geometry().width();
qDebug()<<“内框宽度: “<geometry().height();
w->geometry().getRect(&x,&y,&ww,&h);
qDebug()<<“外框信息: “<<”(”<<x<<”,”<<y<<”,”<<ww<<","<<h<<")";
w->frameGeometry().getRect(&x,&y,&ww,&h);
qDebug()<<“内框信息: “<<”(”<<x<<","<<y<<","<<ww<<","<<h<<")";
w->setGeometry(100,100,500,500);
w->geometry().getRect(&x,&y,&ww,&h);
qDebug()<<“外框信息: “<<”(”<<x<<","<<y<<","<<ww<<","<<h<<")";
w->frameGeometry().getRect(&x,&y,&ww,&h);
qDebug()<<“内框信息: “<<”(”<<x<<","<<y<<","<<ww<<","<<h<<")";

所有的功能都不包含标题栏

  1. qDebug(),用来向屏幕输出字符

  2. Qdialog 这个是对话框类

这个类有被很多子类继承
QColorDialog : 颜色对话框
QErrorMessage : 错误提示对话框
QFileDialog : 文件对话框
QFontDialog : 字体对话框
QInputDialog : 输入对话框
QMessageBox : 消息提示对话框
QProgressDialog : 进度条对话框

  1. qt 工程组成原理
    (1). app w; 创建一个类对象, app的定义如下:

class app : public QWidget
{
Q_OBJECT

public:
explicit app(QWidget *parent = 0); // 构造函数
~app();

private:
Ui::app *ui; // ui 是Ui::app的类指针
};
2. Ui::app这个类的定义在哪里
namespace Ui {
class app;
}
这个地方是类的声明
有由app.ui这个文件 是有xml语言实现的, 这个文件由系统的一个工具, 把xml语言转换成一个头文件
qt_18071\day1\build-dialog-Desktop_Qt_5_6_1_MinGW_32bit-Debug\ui_app.h
3. 在app.c 中包含了这个头文件 ui_app.h

class Ui_app
{
public:

void setupUi(QWidget *app)
{
    if (app->objectName().isEmpty())
        app->setObjectName(QStringLiteral("app"));
    app->resize(600, 400);
    app->setMinimumSize(QSize(600, 400));
    app->setMaximumSize(QSize(600, 400));

    retranslateUi(app);

    QMetaObject::connectSlotsByName(app);
} // setupUi

void retranslateUi(QWidget *app)
{
    app->setWindowTitle(QApplication::translate("app", "app", 0));
} // retranslateUi

};

namespace Ui {
class app: public Ui_app
{
};
} // namespace Ui

  1. app的构造函数实现:

  2. 设置一个对象的名称可以使用

void setObjectName(const QString &name)

button_color_dialog->setObjectName(QStringLiteral(“button_color_dialog”));

  1. 修改应用程序的标题
    setWindowTitle 设个函数的功能是设置 应用程序的名称

    也可以使用图形化界面设置的方式进行设置:
    app.ui 文件中, qwidget 中找到 windowstitle 这个选项, 之后写入应用程序的名称即可

  2. 设置信号的发送与接收,把两者进行捆绑
    类似linux 的信号与信号处理函数
    第一种: connect , 这个函数是属于 QObject::connect()的静态方法

QMetaObject::Connection connect(const QObject *sender, const char *signal,
const QObject *receiver, const char *method,
Qt::ConnectionType type = Qt::AutoConnection)

  1. 获取颜色的对话框 QColorDialog
    QColorDialog::getColor(Qt::black,this).getRgb(&r,&g,&b);
    qDebug()<<“r:”<<r;
    qDebug()<<“g:”<<g;
    qDebug()<<“b:”<<b;

  2. QErrorMessage 错误提示对话框
    QString str = “应用程序核心错误”;
    QErrorMessage *errorp =new QErrorMessage();
    errorp->resize(300,100);
    errorp->showMessage(str);

  3. QFontDialog 字体选择对话框
    The QFontDialog class provides a dialog widget for selecting a font.
    If the user clicks OK, the selected font is returned. If the user clicks Cancel, the initial font is returned.

    bool ok;
    QFont font = QFontDialog::getFont(&ok, QFont(“Helvetica [Cronyx]”, 10), this);
    if(ok)
    {
    qDebug()<<“点击了OK,选择了字体,字体为:”<<font;

    }
    else
    {
    qDebug()<<“点击了Canceled,没有选择字体,使用默认字体”;

    }
    程序输出:
    点击了OK,选择了字体,字体为: QFont( “微软雅黑,12,-1,5,50,0,0,0,0,0” )

QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false)

 bool ok;
 QFont font = QFontDialog::getFont(&ok, QFont("Helvetica [Cronyx]", 10), this);
 if(ok)
 {
    qDebug()<<"点击了OK,选择了字体,字体为:"<<font;
    qDebug()<<"字体为  :"<<font.family();
    qDebug()<<"字体大小 :"<<font.pointSize();
    if(font.style())   // 用来获取字体的类型
    {
        qDebug()<<"斜体";
    }
    else{
        qDebug()<<"普通字体";
    }
    if( font.bold() )  // 用来获取字体的类型
    {
         qDebug()<<"粗体";
    }else {
         qDebug()<<"普通字体";
    }	
  1. 文件对话框 QFileDialog

fileName = QFileDialog::getOpenFileName(this,
tr(“Open Image”), “/home/jana”, tr(“Image Files (*.png *.jpg *.bmp)”));

QString getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(),
const QString &dir = QString(), const QString &filter = QString(),
QString *selectedFilter = Q_NULLPTR, Options options = Options())

caption : 左上角显示的文字
dir : 默认要打开的目录
filter : 要打开什么类型的文件

例如:
QString fileName = QFileDialog::getOpenFileName(this, tr(“Open File”),
tr(“C:/Users/ShengLi-IBM/Documents”),
tr(“txt (*.txt *.c *.jpg .)”));

qDebug()<<“文件名:”<< fileName;

显示:
文件名: “E:/ShengLi/01-Teaching/讲课笔记/18071/01-c_base/1基础知识.pdf”

  1. QMessageBox 消息提示对话框

Static functions are available for creating information(), question(), warning(), and critical() message boxes.

int ret = QMessageBox::warning(this, tr(“My Application”),
tr(“The document has been modified.\n”
“Do you want to save your changes?”),
QMessageBox::Save | QMessageBox::Discard
| QMessageBox::Cancel,
QMessageBox::Save);

  1. QProgressDialog : 进度条对话框
    构造函数:
    QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())

QProgressDialog progress(“Copying files…”, “Abort Copy”, 0, numFiles, this);
progress.setWindowModality(Qt::WindowModal);

  for (int i = 0; i < numFiles; i++) {
      progress.setValue(i);

      if (progress.wasCanceled())
          break;
      //... copy one file
  }
  progress.setValue(numFiles);
  1. 给一个窗体设置一个图片

在qt中一个系统的图标文件使用一个QIcon 去表示

构造函数:
QIcon(const QString &fileName)
fileName: 要打开的文件名

设置图标的第一种方式:
(1)右击工程->添加新文件 ->Qt -> Qt resource file -> 下一步 -> 填入资源名称
(2)右击新建的资源文件-> 添加现有文件-> 找到文件打开
(3)打开ui文件,找到QWidget->Windows Icon ->normal on -> 单机右边空白部分,-> 点击… -> 选择图片即可

设置图标的第二种方法:直接使用setWindowIcon
this->setWindowIcon(QIcon(":/icons/png-0007.png"));

19.QLineEdit 用于一行文本的输入和显示
(1)可以通过setText() or insert() 来改变文本的内容
(2)获取里面的内容 使用: text()
(3)当里面的文本发生改变时, 有一个信号被发送 textChanged()
(4)当里面的文本中光标移动时, 也会发送给一个信号 cursorPositionChanged()
(5)行光标选中这个输入框时, returnPressed() 信号被发送
(6)当输入完成时,光标移出输入框时, editingFinished() 信号被发送
(7)可以设置显示模式,setEchoMode(EchoMode)

QLineEdit::Normal 0 Display characters as they are entered. This is the default.
QLineEdit::NoEcho 1 Do not display anything. This may be appropriate for passwords where even the length of the password should be kept secret.
QLineEdit::Password 2 Display platform-dependent password mask characters instead of the characters actually entered.
QLineEdit::PasswordEchoOnEdit 3 Display characters as they are entered while editing otherwise display characters as with Password.

  1. QDateTimeEdit 用来获取和设置日期和时间
    (1) 获取日期 date() , 设置日期setDate()
    (2)Qt QDateEdit 设置下拉日历:
    通过成员函数setCalendarPopup(bool)设置一下属性,就可以使其以日历的方式显示
    QDateEdit date = new QDateEdit();
    date->setCalendarPopup(true);

  2. QPlainTextEdit 没有格式的文本输入与显示
    (1)设置显示内容: setPlainText()
    (2)插入文本 insertPlainText(),appendPlainText() or paste().
    (3)获取文本 toplainText()
    (4) 文本发生改变时。会发送一个信号 textChanged()

在进行编程时,我们经常需要用到字符串这种类型,毫无疑问,Qt 库中也对字符串类型进行了封装,QString 类提供了你能想到的所有字符串操作方法,给开发者带来了极大方便。
  但是我们在编写程序时,不可避免地会在 Qt 框架上使用第三方的开源库,由于库的类型基本上都是标准的类型,即使用 char * 来表示字符串类型。那么问题来了,QString 和 char * 之间如何进行转换呢?

下面分两种情况进行说明。

一、QString 转换为 char *

将 QString 转 char *,需要用到 QByteArray 类,QByteArray 类的说明详见 Qt 帮助文档。
  因为 char * 最后都有一个’\0’作为结束符,而采用 QString::toLatin1()// 不支持中文
QString::toUtf8()
时会在字符串后面加上’\0’。

方法如下:

QString str;
char* ch;
QByteArray ba = str.toUtf8(); // must
ch=ba.data();

  1. 打印文本 QPrinter 和 QPrintDialog

    QPrinter printer;
    QPrintDialog printDialog(&printer,this);
    if (printDialog.exec() == QDialog::Accepted)
    {
    ui->plainTextEdit->print(&printer);
    }

  2. 帮助提示, 和关于qt

void about(QWidget *parent, const QString &title, const QString &text) // 软件的帮助信息

void aboutQt(QWidget *parent, const QString &title = QString()) // 关于qt的表述

  1. 给应用程序一个图片
    在成功的.pro文件中,加入一句话:
    RC_ICONS +=icons/logo1.ico // 图片路径

因为图片存在 icons/logo1

  1. 在使用在使用nsis发布软件时 如果快捷方式没有图片的解决办法:
    在使用nsis发布软件时 让快捷方式也有图标的实现方式
    修改脚本中的 :CreateShortCut “KaTeX parse error: Expected 'EOF', got '\notepad' at position 8: DESKTOP\̲n̲o̲t̲e̲p̲a̲d̲.lnk" "INSTDIR\note.exe”
    改为:
    CreateShortCut “KaTeX parse error: Expected 'EOF', got '\notepad' at position 8: DESKTOP\̲n̲o̲t̲e̲p̲a̲d̲.lnk" "INSTDIR\note.exe” $INSTDIR/logo1.ico

  2. qt中处理图片的类有 QImage, QPixmap, QBitmap and QPicture

QImageReader QImageWriter QPixmap QImage

Warning: “No decoder available for type ‘audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2,parsed=(boolean)true’.”
Error: “Your GStreamer installation is missing a plug-in.”

sudo add-apt-repository ppa:mc3man/gstffmpeg-keep
sudo apt-get update
sudo apt-get install gstreamer0.10-ffmpeg
sudo apt-get install gstreamer0.10-plugins-ugly

或则 :

sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav

  1. qt 操作sqlite3的数据库 QSqlDatabase
    QT += sql

qDebug()<<QSqlDatabase::drivers();可以查看默认支持的数据库

QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);创建一个sqllite3数据库
db.setDatabaseName(“E:/ShengLi/examples/qt_16110/04-day/sqlite3/my.db”); // 指定要打开的数据库名称
if(!db.open())
{
QMessageBox::critical(this,tr(“打开数据库失败”),tr(“打开my.db 错误”) );
}

30 . 执行一条sql语句 QSqlQuery
QSqlQuery query;
query.prepare(“create table user(id text primary key,passwd text,name text);”);
if (! query.exec())
{
QMessageBox::warning(NULL, “my.db”,
tr(“create table error”));
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值