【qt学习】开篇

重新开始学习qt,在年前已经看过一些知识点,但毫无进展,始终停留在知识点的阶段,或许有qt考试的话,我可以考得不错。然而学习qt,更多的是为了实战应用,并将其变成自己的兵器。

开始学习之前,先说说早前的一个困惑——为什么学习qt?最初学习qt,是因为身边朋友的强烈推荐,他说通过学习图形界面编程可以提高c++编程能力,而图形界面编程无非两种,一种MFC,另一种就qt了,MFC极其变态,想要简单快速,就学qt吧,于是我就开始看qt了。没过多久我有些动摇了,随着互联网时代的来临,编程方式正在慢慢改变,越来越多的图形应用转移到了网页版的形式,桌面应用似乎已经落伍,《黑客与画家》一书中提到美国的一个事实,美国人喜欢网页版的应用,而讨厌桌面应用,所以在美国,桌面应用不多,除了某些特殊应用保留着桌面应用,但是在中国,由于网速很慢,桌面应用依然坚挺,不过这一点终究会变化,qt未来的应用空间会减少,就如fortran,慢慢地变成某些特定领域的工具。刚开始想到这些的时候,就失去了学qt的动力,后来又回心转意了,qt暂时很有用,这是显然的,并且qt很有趣,学习一样有趣的东西,即使以后排不上用场,总还是一个非常有趣的过程。

以后每天学一点点qt,将笔记记录于此,希望持之以恒,并最终用qt写个图形界面程序,为写过的拨号器做个图形界面,或者朋友推荐的为sqlite3提供图形操作接口,立贴为证。

平台:WIN7, QT4.8.4+MINGW4.4+QT Creator2.6.2。

参考书籍:LINUx窗口程序设计——Qt4精彩实例分析

第一个例子,用qtcreator创建工程:

?




#include <QApplication>  //qt所有图形应用程序都必须包含此文件,包含了各种资源

#include <QPushButton>

int main(int
argc, char
*argv[])

{

    QApplication a(argc, argv);

    

    QPushButton b("Hello World!");

    b.show();

    QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit())); // qt信号槽机制,据说这是qt非常重要的一个概念

    return
a.exec();

}

第二个实例,标准对话框,如word中的字体选择,颜色选择对话框等:

书中示例提供部分代码,许多地方需要补全,不清楚这是作者有意为之呢,还是无心的纰漏。

?




//  standarddialogs.h

#ifndef STANDARDDIALOGS_H

#define STANDARDDIALOGS_H

#include <QPushButton>

#include <QDialog>

#include <QWidget>

#include <QGridLayout>

#include <QLineEdit>

#include <QFrame>

#include <QColorDialog>

#include <QColor>

#include <QFont>

#include <QFontDialog>

#include <QString>

#include <QFileDialog>

class
StandardDialogs: public
QDialog //继承QDialog 对话框

{

    Q_OBJECT // qt特色之一,据传有点类似宏,又比宏高级,有一个名称叫做meta object,暂时不清楚其中奥妙

public:

    StandardDialogs(QWidget *parent = 0, Qt::WindowFlags f = 0);

    ~StandardDialogs();

public:

    QGridLayout *layout;

    QPushButton *filePushButton;

    QPushButton *colorPushButton;

    QPushButton *fontPushButton;

    QLineEdit *fileLineEdit;

    QLineEdit *fontLineEdit;

    QFrame *colorFrame;

private
slots:

    void
slotOpenFileDlg();

    void
slotOpenColorDlg();

    void
slotOpenFontDlg();

};

#endif // STANDARDDIALOGS_H

// standarddialogs.cpp

#include "standarddialogs.h"

StandardDialogs::StandardDialogs(QWidget *parent, Qt::WindowFlags f)

    :QDialog(parent, f)

{

    setWindowTitle(tr("Standard Dialogs"));

    layout = new
QGridLayout(this);

    filePushButton = new
QPushButton;

    filePushButton->setText(tr("File Dialog"));

    colorPushButton = new
QPushButton;

    colorPushButton->setText(tr("Color Dialog"));

    fontPushButton = new
QPushButton;

    fontPushButton->setText(tr("Font Dialog"));

    fileLineEdit = new
QLineEdit;

    colorFrame = new
QFrame;

    colorFrame->setFrameShape(QFrame::Box);

    colorFrame->setAutoFillBackground(true);

    fontLineEdit = new
QLineEdit;

    fontLineEdit->setText(tr("Hello world"));

    layout->addWidget(filePushButton, 0, 0); // 在layout上布局

    layout->addWidget(fileLineEdit,0, 1);

    layout->addWidget(colorPushButton, 1,0);

    layout->addWidget(colorFrame, 1, 1);

    layout->addWidget(fontPushButton, 2, 0);

    layout->addWidget(fontLineEdit, 2, 1);

    layout->setMargin(15);

    layout->setSpacing(10);

    connect(filePushButton, SIGNAL(clicked()), this, SLOT(slotOpenFileDlg()));

    connect(colorPushButton, SIGNAL(clicked()), this, SLOT(slotOpenColorDlg()));

    connect(fontPushButton, SIGNAL(clicked()), this, SLOT(slotOpenFontDlg()));

}

StandardDialogs::~StandardDialogs()

{

    delete
layout;

    delete
filePushButton;

    delete
colorPushButton;

    delete
fontPushButton;

    delete
fileLineEdit;

    delete
colorFrame;

    delete
fontLineEdit;

}

void
StandardDialogs::slotOpenColorDlg()

{

    QColor color = QColorDialog::getColor(Qt::blue);

    if(color.isValid())

    {

        colorFrame->setPalette(QPalette(color));

    }

}

void
StandardDialogs::slotOpenFontDlg()

{

    bool
ok;

    QFont font = QFontDialog::getFont(&ok);

    if(ok)

    {

        fontLineEdit->setFont(font);

    }

}

void
StandardDialogs::slotOpenFileDlg()

{

    QString s = QFileDialog::getOpenFileName(

                this,

                "open file dialog",

                "/",

                "C++ files(*.cpp);; C files(*.c);; Head File(*.h)");

    fileLineEdit->setText(s.toAscii());

}

// main.cpp

#include <QApplication>

#include <QPushButton>

#include "standarddialogs.h"

int
main(int
argc, char
*argv[])

{

    QApplication a(argc, argv);

    StandardDialogs ct;

    ct.show();

    

    QPushButton b("Hello World!");

    b.show();

    QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit()));

    return
a.exec();

}

清楚了对话框和按钮,今天到此为止,不知道下一次会遇见什么好玩的东东。

【qt学习】开篇,布布扣,bubuko.com

时间: 2025-01-01 21:07:28

【qt学习】开篇的相关文章

Qt学习之路

  Qt学习之路_14(简易音乐播放器) Qt学习之路_13(简易俄罗斯方块) Qt学习之路_12(简易数据管理系统) Qt学习之路_11(简易多文档编辑器) Qt学习之路_10(Qt中statusBar,MessageBox和Timer的简单处理) Qt学习之路_9(Qt中Item Widget初步探索) Qt学习之路_8(Qt中与文件目录相关操作) Qt学习之路_7(线性布局和网格布局初步探索) Qt学习之路_6(Qt局域网聊天软件) Qt学习之路_5(Qt TCP的初步使用) Qt学习之路

QT学习之路(1):彩票绝对不中模拟器

//============================================//绝对不中,彩票开奖模拟器#include "mainwindow.h"#include "ui_mainwindow.h"#include <QHash>#include <QDebug>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::M

qt学习(三):鼠标图标改变

qt学习 (三):鼠标图标改变 当你进入一个美好的qt软件场景,比如游戏,电脑的黑白图标会让程序逊色不少, 1改图标要加光标的头文件, 2 载入光标图, 3 再设置改光标就可以了 1在头文件中加 #include <QtGui>  //光标类的父类 //再在public成员中声明换的函数void keyPressEvent(QKeyEvent *k); //声明按键换图的函数         .h文件    --注意头文件和声明 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Qt学习总结-ui篇(二)

qccs定义圆角 border-radius:10px; 如果想给特定位置定义圆角,如: 左上角:border-left-top-radius:10px; 右下角色:border-right-bottom-rasius:10px; 半透明效果 只需要在css中使用rgba(100,100,100,40)这种形式来表示颜色即可. 为可执行文件添加图标 1.新建文件:finename.rc 文件名无所谓,只要后缀为rc就可以. 2.编辑新建的文件,输入以下内容: IDI_ICON1 ICON DIS

【qt学习005】搞不明白的布局

记录一下自己在布局这一章遇见的各种狗屎问题. 问题主要出现在布局最后一节:综合布局实例,类似于一个qq管理器的界面(见下图1).看见这个时,打算动手实现一下,于是开始写代码,写着写着发现不知道怎么写了,遇见一些无法解决的问题(问题中描述的布局类之间的关系见下图2): 1. 最底层应该使用哪一类? 2. 怎么将QListWidget加入到最底层? 3. 怎么往QStackWidget加入三个页面,每个页面代表不同的信息? 4. 怎么将QHBoxLayout中的CLOSE按钮连接到退出函数,要完整地

【Qt学习笔记】13.拖放技术:Drag & Drop

1.接受拖放 Drag & Drop 是一个界面操作,用于在两个窗口间传递数据. Drag Source: 拖放源窗口 Drag Target: 拖放目标窗口 拖放操作: 1.在源窗口:选中目标,按下鼠标,移动,拖至目标窗口(Drag) 2.在目标窗口:取消鼠标,到指定位置,松开鼠标(Drop) (按下ESC取消操作) MIME: MIME(Multipurpose Internet Mail Extensions)被传递的数据以MIME格式传送,它是多组type-data数据:(type0,

QT学习第1天

QT学习第一天  坚持住!! 一 Qt概述 1.Qt发展历史 (1)1991年诞生(Haavard Nord/Eirik Chambe-Eng), (2)1994年创立Troll Tech(奇趣科技) (3)2005年QT4.0 (4)2008年被Nokia收购 (5)2009年源代码开源 (6)2012年Nokia将全部QT业务和知识产权卖给Digia公司 (7)2013年QT5.0 QT5.1 QT5.2 (8)2014年Digia公司成立 The Qt Company子公司 2.Qt5.4

QT学习之路--创建一个对话框

Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included from

qt学习(四)主窗选钮,显示新窗口。

游戏有选区这个习惯, 当然,我特指<冒险岛>了,有的时候就是打开一个主屏幕上五个按钮让你点击进入, 甚至有的时候进去了还要选哪个频道,游戏服务器都得分区,频道来完成功能.现在我们先进入想选的区,不需要的可以看以后的登陆窗口了. 这一次的主要功能是完成选区,选完进入输入账号界面. 这次用的是一个点完出啦一个所以需要两个窗口,在原有的基础上新建qt设计师界面类.选择dialogwithoutbutton. 把最后一个要显示的当作主界面, 其他的都可以选择dialog模板, 完成以后,画ui界面,