首页 > 代码库 > 【qt学习】开篇

【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();
}

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