一、Hello Qt 001_hello会显示一个带“Hello Qt”文本框(QLabel)的小窗口,界面如下: ![]() 核心代码: int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Qt!"); label->show(); app.exec(); } 命令行编译: $ qmake -project$ qmake ${PRJ}.pro$ make 报错: hello.cpp:1:24: fatal error: QApplication: No such file or directory 解决办法: 对比Qt Creator 创建的.pro文件,发现Creator创建的pro多了: greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 手动往pro文件里添加上面这句话就OK了。 什么原因? $ locate QApplication/opt/Qt5.9.8/5.9.8/gcc_64/include/QtWidgets/QApplication$ cat /opt/Qt5.9.8/5.9.8/gcc_64/include/QtWidgets/qapplication.h 可以确定Qt5将大部分控件(包括QApplication)移到了Qt Widgets模块中了,这跟Qt4是不一样的。 运行效果: $ ./001_hello ![]() 可以使用HTML样式: ![]() 二、建立连接 002_quit会显示一个带有"Quit"按键(QPushButton)的小窗口,点击"Quit"按键后窗口会退出,用于说明Qt是如何响应用户的动作,界面如下: ![]() 核心代码: int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit())); button->show(); app.exec(); }
运行效果: $ ./build.sh // 将上个例子的编译命令整理成build.sh$ ./002_quit ![]() 三、窗口布局 003_age会显示一个带有微调框(QSpinBox)和滑块(QSlider)的窗口(QWidget),用于说明如何使用布局器(QHBoxLayout)来控制控件的显示位置,同时还可以说明如何利用信号和槽来同步控件,界面如下: ![]() 核心代码: QWidget *window = new QWidget; window->setWindowTitle("Enter your age"); QSpinBox *spinbox = new QSpinBox; spinbox->setRange(0, 130); QSlider *slider = new QSlider; slider->setRange(0, 130); slider->setOrientation(Qt::Horizontal); QObject::connect(spinbox, SIGNAL(valueChanged(int)),slider, SLOT(setValue(int))); QObject::connect(slider, SIGNAL(valueChanged(int)),spinbox, SLOT(setValue(int))); slider->setValue(35); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(spinbox); layout->addWidget(slider); window->setLayout(layout); window->show();
运行效果: $ ./build.sh $ ./003_age ![]() 到此,几个入门的Qt小demo就展示完毕了。 参考: 《C++ GUI Qt4 编程》 你和我各有一个苹果,如果我们交换苹果的话,我们还是只有一个苹果。但当你和我各有一个想法,我们交换想法的话,我们就都有两个想法了。如果你也对嵌入式系统开发有兴趣,并且想和更多人互相交流学习的话,请关注我的公众号:ESexpert,一起来学习吧,欢迎各种收藏/转发/批评。 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:嵌入式系统砖家,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |