Qt的HelloWorld程序:
#include<QApplication>
#include<QLabel>
int main(int argc, char* argv[])
{
QApplication app(argc,argv);
QLabel* pLabel = new QLabel("Hello World!~");
pLabel->show();
return app.exec();
}
QApplication类代表着整个应用程序,用来管理整个应用程序所用到的资源。该类的构造函数需要两个参数,分别是从main()参数中获得的int型argc和char*型的argv,Qt支持自己的一些命令参数。
QLabel类是一个窗口部件类,用来显示一个字符串标签。部件其实就是控件,该部件类其实相当于MFC中的Static控件。可以用一个字符串作为该类的构造函数参数,该字符串将会以标签的形式在窗口中显示出来。想要显示该控件,只需要调用show()方法。Qt很灵活,不需要特意创建一个窗口或对话框来容纳控件,仅仅以一个控件就能作为一个窗口来显示。
函数最后的app.exec()表示将程序的控制权交给Qt,此时程序进入事件循环,等待相应用户的操作。这里的事件循环其实可以类比为Win32程序中的消息循环,都差不多。
程序运行结果:
值得一提的是,QLabel的构造函数还能解释HTML的语法,我们可以用简单的HTML标签来改变字符串的样式。比如将构造函数的字符串参数改成这样:
QLabel* pLabel = new QLabel("<h1><font color=red>Hello World!~<font></h1>"); 运行结果:
响应用户的动作:
#include<QApplication>
#include<QLabel>
#include<QPushButton>
int main(int argc, char* argv[])
{
QApplication app(argc,argv);
QPushButton* pButtonS = new QPushButton("Show");
QPushButton* pButtonE = new QPushButton("Exit");
QLabel* pLabel = new QLabel("<h1><font color=red>Hello World!~<font></h1>");
QObject::connect(pButtonS,SIGNAL(clicked()),pLabel,SLOT(show()));
QObject::connect(pButtonE,SIGNAL(clicked()),&app,SLOT(quit()));
pButtonS->show();
pButtonE->show();
return app.exec();
}
QPushButton类与QLabel类相似,也是控件类,使用方法都差不多。
想要让Qt程序响应用户的动作,必须要用到SIGNAL(信号)和SLOT(槽)这两个宏,它们属于Qt的一部分。在这里使用到了QObject的一个静态方法connect(),该方法专门负责连接信号的发送者和接收者。比如:
QObject::connect(pButtonS,SIGNAL(clicked()),pLabel,SLOT(show()));
表示将按钮pButton与标签pLabel连接起来,当用户点击按钮时,程序会自动调用标签的show()方法。这其实可以类比为MFC中消息的发送与事件的响应。这里的clicked()方法相当于发送一个点击消息,而show()就是响应该消息的方法。正确的说法应该是,当Qt程序感应到用户对pButton执行了点击操作之后,就会让pButton发送一个点击信号给pLabel,然后让pLabel调用自己的show()方法得以显示。同理:
QObject::connect(pButtonE,SIGNAL(clicked()),&app,SLOT(quit()));表示点击pButtonE所代表的按钮就会引发app.quit()的执行,导致程序退出。
窗口的布局:
#include <QApplication>
#include <QHBoxLayout>
#include <QSpinBox>
#include <QSlider>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget* pWindow = new QWidget();
pWindow->setWindowTitle("Test Widget");
QSpinBox* pSpinBox = new QSpinBox();
QSlider* pSlider = new QSlider(Qt::Horizontal);
pSlider->setRange(0,130);
pSlider->setRange(0,130);
QObject::connect(pSpinBox,SIGNAL(valueChanged(int)),pSlider,SLOT(setValue(int)));
QObject::connect(pSlider,SIGNAL(valueChanged(int)),pSpinBox,SLOT(setValue(int)));
pSpinBox->setValue(35);
QHBoxLayout* pLayout = new QHBoxLayout();
pLayout->addWidget(pSpinBox);
pLayout->addWidget(pSlider);
pWindow->setLayout(pLayout);
pWindow->show();
return a.exec();
}
QSpinBox和QSlider都是控件类,分别为可调数值的编辑框和滑动条。两个类的set*系列方法都很容易让人明白这是要做什么。值得一提的是QSlider的构造函数,可以通过指定Qt::Horizontal或Qt::Vertical为参数来指定创建出来的滑动条是水平的或是垂直的。
可以看到,在函数的开始地方使用了QWidget类,该类充当着一个窗口的角色,调用该类的show()方法就是显示一个窗口。当然该窗口可以容纳之前提到过的控件类。不过,如果直接把控件加入到widget里面,得到的是一团糟·············可以调用控件的setParent()方法做到这一点。
为了让控件的布局看起来整洁一点,我们可以利用Qt提供的布局类,如QHBoxLayout就是一个水平布局。可以调用QHBoxLayout::addWidget()方法将控件加进去,再调用QWidget::setLayout()方法设置窗口的布局,最后调用QWidget::show()就可以看到整洁的窗口布局了。
既然有水平布局,当然也有垂直布局,将QHBoxLayout改为QVBoxLayout就可以做到。
除了水平布局和垂直布局,还有个网格布局QGridLayout。

1618

被折叠的 条评论
为什么被折叠?



