【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(); } |
清楚了对话框和按钮,今天到此为止,不知道下一次会遇见什么好玩的东东。