Qt学习(001-2)

Qt creator 建立“Qt Gui应用”项目,命名为notepad。

一个简单的文本输入框:

将main.cpp修改为:
#include "mainwindow.h"
#include <QApplication>
#include <QTextEdit>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    QTextEdit textEdit;
    textEdit.show();

    return a.exec();
}

运行结果如下:

Qt学习(001-2)
可以看到:
1、文本输入框默认支持垂直滚动条。
2、文本输入框部件也带有show()方法,所以其他的一些部件也会带有show()方法。
根据creator的补全,我们可以看到很多QTextEdit的方法,例如 setGeometry方法用来说明程序开始运行时位于桌面的位置,以及程序窗口的大小。

添加个按钮:

下面我们为notepad添加一个按钮,点击该按钮时,程序会退出:
#include "mainwindow.h"
#include <QApplication>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QPushButton>
#include <QWidget>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    QTextEdit *textEdit = new QTextEdit;
    QPushButton *quitButton = new QPushButton("&Quit");
    QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(textEdit);
    layout->addWidget(quitButton);

    QWidget  *window = new QWidget;
    window->setLayout(layout);
    window->show();

    return a.exec();
}

上段代码中,我们定义了quitButton对象,并通过信号槽机制将按钮点击事件与程序退出联系起来。这里也是用了垂直框布局QVBoxLayout,addWidget()方法将部件添加入布局中,其参数应是一个部件的指针,一个布局可以添加多个部件。最后,对象window将其布局设置为layout。可以看到QPunshButton的label中Quit前面有&字符,说明快捷键ALT+Q将激活该按钮的按下动作;要转义&,直接&&即可。代码里的qApp值得去解释一下,下面整理自https://qt-project.org/forums/viewthread/14061/:

qApp is a globally accessible pointer to the QApplication object, this is a pointer to the object for which the member function is called.

--------

you should use qApp when you want to call function/slot from QCoreApplication.

this is used when you call slot that belongs to the class where you are at that moment.

--------
You use qApp macro (this one is a pointer to the QApplication object) when you want your application to… in your case ‘quit’ – might be some different functionality specific to the QApplication instance
运行结果如下:

Qt学习(001-2)
点击Quit按钮时候,程序会退出。

其实也可以不用QWidget类来定义window对象, mainwindow中的类MainWindow也能满足要求——不过这是错误的。将
    QWidget  *window = new QWidget;
    window->setLayout(layout);
    window->show();
改成
    MainWindow *window = new MainWindow;
    window->setLayout(layout);
    window->show();

后运行出现以下信息:

QWidget::setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout

运行结果是mainwindow.ui定义的布局。暂不去涉猎。
另外notepad.pro文件内容在添加文件时会变化,qmake会用到pro文件。

参考:

http://qt-project.org/doc/qt-4.8/gettingstartedqt.html

国际化问题:http://blog.csdn.net/mfc11/article/details/6591134

你可能感兴趣的:(qt)