Life of xhu

About

Qt学习笔记以及一些不一定靠谱的初级技巧

Aug 12, 2013

  |   #Qt

Qt学习笔记1:创建ui及项目文件

在qt的命令行中输入designer,进入qt设计师界面,可以进行图形化的窗口设计
如新建一个test.ui的ui文件(主窗口的objectName也要设为test)
将文件保存到text文件夹下(最好名称一致,不然在后来的项目命名中可能出现故障,如果一致,只需命名为text.pro即可)
在该文件夹下,新建一个main.cpp文件,代码如下

#include <QApplication>
#include <QDialog>  
#include "ui_test.h"  
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::test ui;
    QDialog *dialog = new QDialog;
    ui.setupUi(dialog);
    dialog ->show();
    return app.exec();
}

新建成ui及main.cpp文件后,通过qt命令行进入项目所在的文件夹,打开盘符,
只需要输入盘符+英文冒号,打开文件夹,输入cd+文件夹名(大小写都可)
输入qmake -projec命令,生成Makefile文件
输入qmake text.pro命令,生成项目文件
输入make命令,生成ui_test.h文件,完成

Qt学习笔记2:创建继承于ui的类

打开刚刚建立的项目后,添加一个C++头文件,因为命名惯例可以命名为test.h (test同时也是.h文件里类的名字,两者用相同名字,这样同样是为了使用方便)

#ifndef INPUTWEEKS_H
#define INPUTWEEKS_H
#include <QDialog>
#include "ui_test.h"

class test : public QDialog, public Ui :: test
{
    Q_OBJECT

public:
    test(QWidget *parent = 0);
};

#endif // INPUTWEEKS_H

创建实现该.h文件的cpp文件,代码如下

#include "testdialog.h"

test::test(QWidget *parent):QDialog(parent){
    setupUi(this);
}

使用test.h创建窗口,main.cpp需要修改如下:

#include <QApplication>
#include <QDialog>
#include "test.h"

int main(int argc, char *argv[]){ 
    QApplication app(argc, argv);
    test *dialog = new test;
    dialog ->show();
    return app.exec();
}

Qt学习笔记3:创建子窗口

假设已经有了一个叫做son的项目,假设要把它作为子窗口添加进test项目中 先把ui_son.h、son.h、son.cpp拷贝到test项目文件夹下,并在test项目中添加这些文件

修改test.h文件

  1. 添加#include "son.h"

  2. 在test.h的test类里,添加代码

     private:
     son *1;  //即用son.h新建一个叫son1的窗口,这里窗口名和类名最好不一样
    
     private slots:
     void show();   //一个私有槽,即将son1显示出来
    
  3. 在test.cpp的构造函数里里,添加如下代码: son1 = new son();

    在成员函数之外,定义槽

     void test::show(){
         son1 ->show();
     }
    
  4. 假设父界面上有一个objectName为button的按键,在构造函数添加代码如下:
    connect(button, SIGNAL(clicked()), this, SLOT(show())); //即按下该按键是,打开show()槽

  5. 运行程序即可,按下button键即可打开子窗口

Qt学习笔记4:常用控件

Qt学习笔记5:常用信号和函数

  1. clicked()按键的按下信号

  2. toggled()确定框CheckBox的确定信号


  1. dialog -> show();显示当前窗口

  2. dialog ->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);当前窗口显示在最前端

  3. lineEdit -> text();获取当前lineEdit中的字符串,一般为QString类型

  4. label -> setText(QString);将当前label中显示的文字设定为括号中的QString

  5. closed()关闭当前窗口

  6. setVisible(bool)设置当前控件可见

  7. ListWidget ->clear()清空列表控件

  8. lineEdit ->text().toInt()将lineEdit中的字符串转为整数

  9. QString.length()得到QString字符串的长度

  10. QString[i].toAscii()将QString中的一个字符转换为相应的ASCII码

  11. ListWidget ->addItem(new QListWidgetItem(QString))在ListWidget列表控件里添加一行

  12. remove(filename)C++的标准函数,包含在"stdio.h"头文件里,用来删除文件

  13. TextEdit->setTextUnderline(true)表示在以下TextEdit显示的内容下面加下划线,使用完成后,用TextEdit->setTextUnderline(false)关闭

Qt学习笔记6:小白教的大神笔记以及一些自己总结的知识

  1. 任何一个控件名都不可以和任何一个槽同名

  2. 声明全局变量的方法:在main.cpp里声明,在其他地方用extern命令引用,如在main.cpp里声明int test,在其他地方引用extern int test

  3. 将结构体声明全局变量的方法,将结构体放在.h文件里,在所有需要用的地方包含这个.h文件,在用extern命令引用结构体声明的变量

  4. 结构体里变量的初始化可以在结构体里完成,如

     #define maxlength 100
     struct LIST {
         Lesson lesson[maxlength];
         int last;
         LIST(){
             last = 0;
         }
     };
    
  5. 在父窗口里操作子窗口里的控件,要使用 子窗口名 ->控件名 来引用

  6. 这个代码需要一行头文件
    #include <QTextCodec>
    汉语的乱码显示问题,在主源文件里添加
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); 并且在每一个使用中文的地方,使用tr(QString)的方式,如
    label ->setText(tr("课程"))

  7. 一维数组作为函数变量时,中括号里不带数组长度,二维数组作为函数变量时,第一个长度不写,第二个长度写

  8. 在调试时,右边的窗口,右键点击添加新的算术表达式,即变量名,这样在下面就会出现一个窗口,显示这个变量当前的值

  9. 在QString里,汉字占一个字节的位置