Qt自定义窗口部件
QT添加带有滚动条的窗口,并使之滚动起来

QT添加带有滚动条的窗⼝,并使之滚动起来QT ui designer中提供了⼀个叫做QScrollBar的控件,但这导致了⼈们的⼀个误区,就是必须要使⽤这个控件,才能使窗⼝滚动起来虽然可以通过这个控件来达到⽬的,但是需要⾃⼰去绑定和窗⼝滚动的⼀些信号和槽函数,⾮常⿇烦。
因此,我们通常选择另⼀种⽅案来实现窗⼝滚动:QScrollArea控件。
这个控件⾃带了滚动条,我们只需要在使⽤前设置好这个控件的⼀些参数即可。
这个控件⾃带了⼀个⼦控件:QWidget:scrollAreaWidget。
我们需要对这个控件的⼀些参数进⾏设置。
要想看到滚动条的⼀个必要条件就是scrollAreaWidget的尺⼨⼤于scrollArea。
这⾥我们可以看到,两个控件尺⼨都相同,此时运⾏程序,是不会看到右边有垂直滚动条的我们修改scrollAreaWidget的尺⼨⾼度为1000再次运⾏程序结果还是没有垂直滚动条,这是什么原因呢?因为QScrollArea在Qt designer中有⼀个属性:WidgetResizable。
它的默认属性为true(勾选),false(未勾选)我们需要取消这个钩,将其属性设置为false,之后再次运⾏程序这是就可以看到右边出现了滚动条,此时出现的滚动条已经可以通过⿏标滚轮,⿏标左键拖拽,点击来控制显⽰区域了,都不需要⾃⼰去实现什么函数。
和QScrollBar相⽐,简直不要太⽅便。
但是,再界⾯上需要动态添加控件的时候,给scrollAreaWidget设置⼀个固定的尺⼨就不合适了,因为当控件的坐标超出scrollAreaWidget的尺⼨时,依然⽆法显⽰此时,就需要在动态⽣成控件的时候添加⼀个判断,判断控件的位置+尺⼨是否超出了scrollAreaWidget的显⽰范围,如果超出,则需要使⽤函数ui->scrollAreaWidget->setGeometry(0, 0, 340, ui->scrollAreaWidget->height()+30);动态的设置scrollAreaWidget的尺⼨⼤⼩,这样就能保证⽆论⽣成多少动态控件,始终都在scrollAreaWidget范围内,⽽且可以通过滚动条滚动来显⽰不同区域的控件补充使⽤代码添加滚动区域的⽅法⾸先在界⾯上随便放置⼀个容器,我们这⾥放置了⼀个groupbox然后在头⽂件中添加如下代码QHBoxLayout *layout;QScrollArea *scrollarea;QWidget *scrollareacontent;然后在构造函数中添加如下代码Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);scrollarea = new QScrollArea(ui->groupBox);scrollarea->setWidgetResizable(true);scrollarea->setGeometry(0,0,ui->groupBox->width(),ui->groupBox->height());layout = new QHBoxLayout(ui->groupBox);scrollareacontent = new QWidget(ui->groupBox);scrollareacontent->setLayout(layout);scrollarea->setWidget(scrollareacontent);}注意,这⾥设置的⽗对象是ui->groupbox,就是我们前⾯添加在主界⾯上的groupbox控件然后添加按钮槽函数,实现点击⼀个按钮就在groupbox中添加⼀个新按钮的功能,准确的说,应该是在scrollareacontent中添加新的按钮void Widget::on_pushButton_clicked(){QPushButton *btn = new QPushButton(scrollareacontent);btn->setMinimumSize(btn->size());layout->addWidget(btn);}新建按钮的时候,它的⽗对象是scrollareacontent,如果是别的⽗对象,滚动条将不会⽣效。
QT习题

QT习题一、名词解释1、虚函数:2、回调函数:3、内联函数:4、信号与插槽:5、私有函数:6、构造函数:7、公有函数:8、内联函数:9、信号与插槽:10、析构函数:二、判断题1、在QT中Qwidget不可以作为应用程序的窗口()。
2、在创建窗口部件的时候,窗口部件通常不会显示出来()。
3、布局管理器不是一个窗口部件()4、FindDialog(QWidget *parent = 0);父参数为NULL,说明有父控件。
()5、show()显示的对话框是模式对话框。
用exec()显示的对话框是无模式对话框。
()6、布局管理器派生自QObject。
()7、Q_OBJECT是一个宏定义,如果类里面用到了signal或者slots,就必须要声明这个宏。
()8、FindDialog(QWidget *parent = 0);父参数为NULL,说明没有父控件。
()9、槽可以是虚函数,可以是公有的,保护的,也可是私有的。
()10、show()显示的对话框是无模式对话框。
用exec()显示的对话框是模式对话框。
()三、简答题1、简述一下信号与插槽机制。
2、简述布局管理器的功能,列举3个布局管理器。
3、简述使用Qt设计师,在创建对话框时主要包含哪几个基本步骤?4、GUI程序通常会使用很多图片,请简述3种提供图片的方式。
5、列举几种Qt中会产生绘制事件的情况。
6、Update()与repaint()之间的区别?7、对窗体上的控件进行布局管理一般有哪几种方式,简述一下其缺点。
8、简述事件和信号的特点和区别。
9、简述主函数中创建QApplication对象功能。
10、简述使用Qt设计师,在创建对话框时总是包含哪几个基本步骤?11、简述布局管理的类QSplitter和QScrollArea的功能。
12、对窗体上的控件进行布局管理一般有哪几种方式,简述一下其缺点。
13、简述一下mousePressEvent() 与mouseMoveEvent()是什么事件,在什么情况下触发?14、在Qt设计师中集成自定义窗口部件有哪两种方法?介绍改进法的步骤。
Qt的第三章

(8) 向导对话框
略
5 其他窗口部件
(1) QFrame类族 包含QLabel、QLCDNumber、QSplitter、 QStackedWidget、QToolBox、 QAbstractScrollArea等。
公共属性: 通过设置FrameShape、FrameShadow、 LineWidth、MidLineWidth参数组合,形成 不同的效果。
(1)颜色对话框 QColorDialog 作用:用户可选择颜色并获得对应的值 方法一(使用类静态函数): QColor color=QColorDialog::getColor() 方法二(创建类对象):
QColorDialog dialog(Qt::red,this); dialog.setOption(QColorDialog::ShowAlphaChannel); dialog.exec(); QColor color = dialog.currentColor();
(2)文件对话框 QFileDialog 作用:用户选择文件或文件夹 打开文件: QFileDialog::getOpenFileName() 保存文件: QFileDialog::getSaveFileName()
(3)字体对话框 QFontDialog 作用:用户和选择字体 获得字体: QFont font = QFontDialog::getFont()
2)QCheckBox、QRadioButton、QGroupBox 常用函数: isChecked():判断是否被选中
注:一组单选框(RadioButton)常放置在 相同的GroupBox中,实现单选功能。
qt实现不规则窗口的方法

qt实现不规则窗口的方法一、前言Qt是一个强大的跨平台开发框架,它提供了丰富的API和工具,使得开发者能够轻松地创建各种类型的应用程序。
在Qt中,窗口是应用程序的重要组成部分,而不规则窗口的实现则可以让应用程序更加具有个性化和视觉吸引力。
本文将介绍如何使用Qt实现不规则窗口的方法。
二、不规则窗口的实现方法1. 使用自定义窗口类在Qt中,可以通过继承QMainWindow或QDialog类,并重写其中的一些方法来实现不规则窗口。
首先,需要定义一个自定义窗口类,并在其中重写windowRect()和sizeHint()方法,以获取窗口的尺寸和形状。
然后,可以使用setWindowFlags()方法来设置窗口的样式,以实现不规则窗口的效果。
2. 使用布局管理器Qt提供了多种布局管理器,如QHBoxLayout、QVBoxLayout、QGridLayout等,这些布局管理器可以根据需要自动调整窗口的大小和位置。
通过使用布局管理器,可以将不规则形状的窗口部件放置在窗口中,并自动调整窗口的大小和位置,以达到不规则窗口的效果。
3. 使用形状控件Qt提供了一些形状控件,如QFrame、QPushButton等,这些控件可以设置不同的形状,如矩形、圆形、椭圆形等。
通过将这些形状控件放置在窗口中,并使用布局管理器自动调整它们的位置和大小,可以实现不规则窗口的效果。
三、示例代码下面是一个简单的示例代码,展示了如何使用自定义窗口类和布局管理器实现不规则窗口:```cpp#include <QApplication>#include <QMainWindow>#include <QVBoxLayout>#include <QWidget>class IrregularWindow : public QWidget {public:IrregularWindow(QWidget *parent = nullptr) : QWidget(parent) {}void setShape(QRect rect) {m_shape = rect;update();}protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.drawRect(m_shape);}private:QRect m_shape;};int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget *centralWidget = new QWidget;QVBoxLayout *layout = new QVBoxLayout(centralWidget);QWidget *widget1 = new IrregularWindow;widget1->setWindowFlags(widget1->windowFlags() | Qt::FramelessWindowHint);widget1->setShape(QRect(50, 50, 200, 100));layout->addWidget(widget1);QWidget *widget2 = new QPushButton("Button");layout->addWidget(widget2);QWidget *widget3 = new QFrame(centralWidget);widget3->setFrameShape(QFrame::Rectangle);layout->addWidget(widget3);centralWidget->show();return app.exec();}```在上面的代码中,我们创建了一个自定义窗口类IrregularWindow,它继承自QWidget,并重写了paintEvent()方法来绘制自定义的形状。
QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例

QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例为了实现添加按钮点击弹出信息提示框的功能,我们可以使用Qt来创建一个窗口控制程序。
首先,我们需要创建一个Qt窗口应用程序项目。
在Qt Creator中选择"新建项目",然后选择"C++"和"Qt Widgets应用",填写项目名称和路径,然后点击"下一步"。
在下一个界面,可以选择使用预设的窗口模板。
选择一个适合的窗口模板,例如"MainWindow",然后点击"下一步"。
接下来,在"项目管理器"中,展开源文件夹,找到"mainwindow.cpp"文件。
双击打开该文件。
在"mainwindow.cpp"文件中,我们需要添加按钮和相应的点击事件。
如果不存在"MainWindow"类的构造函数,则需要手动创建构造函数。
我们可以在构造函数中添加按钮。
```cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)ui->setupUi(this);//创建按钮QPushButton *btn = new QPushButton("添加按钮", this);btn->setGeometry(100, 100, 100, 30);//连接按钮的点击事件到槽函数connect(btn, SIGNAL(clicked(), this, SLOT(showMessageBox());MainWindow::~MainWindowdelete ui;//槽函数:点击按钮弹出信息提示框void MainWindow::showMessageBoxQMessageBox::information(this, "提示", "按钮已点击");```在上面的代码中,我们首先在构造函数中创建了一个按钮,并设置了按钮的位置和尺寸。
Qt自定义控件之可伸缩组合框(GroupBox)控件

Qt⾃定义控件之可伸缩组合框(GroupBox)控件摘要本⽂基于QGroupBox扩展了⼀种可以伸缩的组合框,正常状态下,组合框处于收缩状态,内部的控件是隐藏的;需要的时候,可以将组合框进⾏伸展,并将内部控件显⽰出来。
正⽂实现的代码⽐较简单,主要有以下⼏点:1、该组合框继承于QGroupBox;2、通过QSS将QGroupBox的默认Check图标替换;3、通过QGroupBox的setFlat函数显⽰隐藏垂直边框4、使⽤时,设置⽗窗⼝的layout的SizeConstraint为SetFixedSize,否则否则在ExtendedGroupBox收缩时,⽆法动态调整⼤⼩。
代码如下:QSS样式:QGroupBox#ExtendedGroupBox::indicator{width: 8px;height: 8px;}QGroupBox#ExtendedGroupBox::indicator:unchecked{image: url(:/icons/uncheck.png);}QGroupBox#ExtendedGroupBox::indicator:checked{image: url(:/icons/check.png);}#ifndef EXTENDED_GROUP_BOX_H_#define EXTENDED_GROUP_BOX_H_#include <QGroupBox>#include <QVector>class ExtendedGroupBox : public QGroupBox{Q_OBJECTpublic:enum State{STATE_NORMAL,STATE_EXPAND};public:ExtendedGroupBox(QWidget *parent = nullptr, State state = STATE_NORMAL);ExtendedGroupBox(const QString &title, QWidget *parent = nullptr, State state = STATE_NORMAL);private Q_SLOTS:void onChecked(bool checked);public:void addWidget(QWidget *widget);State getState() const;private:QVector<QWidget*> children_;State state_;};#endif//EXTENDED_GROUP_BOX_H_#include "ExtendedGroupBox.h"ExtendedGroupBox::ExtendedGroupBox(QWidget *parent /*= nullptr*/, State state /*= STATE_NORMAL*/): QGroupBox(parent){setObjectName("ExtendedGroupBox");setCheckable(true);state_ = state;if (state_ == STATE_NORMAL){//隐藏垂直边框setFlat(true);setChecked(false);}connect(this, SIGNAL(clicked(bool)), this, SLOT(onChecked(bool)));}ExtendedGroupBox::ExtendedGroupBox(const QString &title, QWidget *parent /*= nullptr*/, State state /*= STATE_NORMAL*/) : QGroupBox(title, parent){setObjectName("ExtendedGroupBox");setCheckable(true);state_ = state;if (state_ == STATE_NORMAL){//隐藏垂直边框setFlat(true);setChecked(false);}connect(this, SIGNAL(clicked(bool)), this, SLOT(onChecked(bool)));}void ExtendedGroupBox::addWidget(QWidget *widget){if (widget != nullptr){if (state_ == STATE_NORMAL){widget->setVisible(false);}children_.push_back(widget);}}void ExtendedGroupBox::onChecked(bool checked){if (checked){//显⽰垂直边框setFlat(false);for (auto iter = children_.begin(); iter != children_.end(); ++iter){(*iter)->setVisible(true);}state_ = STATE_EXPAND;}else{//隐藏垂直边框setFlat(true);for (auto iter = children_.begin(); iter != children_.end(); ++iter){(*iter)->setVisible(false);}state_ = STATE_NORMAL;}}ExtendedGroupBox::State ExtendedGroupBox::getState() const{return state_;}#include "ExtendedGroupBox.h"#include <QDialog>#include <QVBoxLayout>#include <QHBoxLayout>#include <QFormLayout>#include <QCheckBox>#include <QProgressBar>#include <QFile>#include <QtWidgets/QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);QFile file(":/stylesheets/style.qss");bool s = file.open(QFile::ReadOnly);a.setStyleSheet(file.readAll());file.close();QDialog w;QVBoxLayout *vbox_layout = new QVBoxLayout();//设置窗⼝的layout的SizeConstraint为SetFixedSize,//否则在ExtendedGroupBox收缩时,⽆法动态调整⼤⼩。
如何获得Qt窗口部件在主窗口中的位置

如何获得Qt窗⼝部件在主窗⼝中的位置⽤Qt Creator 设计程序时,最⽅便的就是ui设计器,可以很容易的得到想要的布局。
但是这样⾃动布局带来的后果是很难知道窗⼝中某⼀部件在主窗⼝中的相对位置。
在处理⼦窗⼝⿏标事件时变的很⿇烦。
主窗⼝有菜单、⼯具条等,想⽤⿏标绘图,
把⿏标轨迹映射到窗⼝部件上,这些问题。
其实最主要的是获得窗⼝部件的起始点相对主窗⼝的位置。
例如:在主窗⼝拖⼊⼀个QScrollArea 在其上放⼀个QLabel⽤来显⽰⿏标事件。
可以在ui对象结构上看到如下结构。
⼤家知道,我们可以⽤pos()来获得某⼀窗⼝部件的起始点相对其⽗的位置。
那么,看结构可知,要获得scrollArea_2在主窗⼝(MainWindow)中的相对位置
即为:ui->scrollArea_2->pos()+ui->centralWidget->pos()
所以想获得窗⼝ScrollArea_2在主窗⼝中的相对位置区域为:
labelrect = QRect(ui->scrollArea_2->pos()+ui->centralWidget->pos(),
ui->scrollArea_2->size());
那么判断⿏标是否在此控件上只需在⿏标事件响应函数内写如下语句即可:
if(labelrect.contains(event->pos())) {……}
现在你可以在任意复杂的ui结构中确定某⼀⼦部件的位置了,但⼀定要注意:
⽗关系,即当前部件于其⽗部件的相对位置,其⽗部件与上层部件的相对位置,
直到与主窗⼝的相对位置。
Qt 窗口部件适应窗口大小变化

widget跟随窗口调整
UI界面控件随窗口自适应变化大小
通过Qt Creator的设计模式实现,无需增加代码。
如下图,实现对最下层tableview大小跟随窗口调整:
1、界面空白处右击,选择布局-->栅格布局,这会使centralWidget布局设置为GridLayout。
然后界面中的部件会自动添加到栅格布局中,此时的部件会根据窗口大小自动调整大小。
2、但是部件的大小却不是我们希望的,极不协调,接下来就需要调整每个控件的设置。
调整控件Size的项目包括:sizePolicy、minimumSize、maxmumSize
比如将上面的第三行的lineEdit限制高度:
这样,在调整窗口大小的时候,lineEdit控件只能任意改变宽度,而高度则被限制在30个像素内。
(调整之后效果)
注意:
有些情况下设置了上面的操作步骤之后,但似乎没有起作用。
比如上面例子中第一行的几个空间,虽然设置了sizePolicy以及宽度、高度限制,但是还是随着界面改变。
这个时候,就需要添加 Spacer(看起来像弹簧的控件),之后就能解决问题了。
这是因为GridLayout布局的影响,他必须让布局之内的区域布满控件,而不能有空白,所以即使设置了大小限制,仍然会被拉伸。
添加Spacer就是为了填充多余的区域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【原创】Qt自定义窗口部件QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)改进法1、改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和HexspinBox.cpp文件。
把这两个文件拷贝到想要的项目中。
HexspinBox.hHexspinBox.cpp2、在需要开发的项目中的窗口中,1、用Qt Designer创建一个新的窗体main.ui,把控件箱里的QSpinBox添加到窗体中。
2、右击微调框,选择“Promote to ”上下文菜单。
3、在弹出的对话框中,类名处填写“HexSpinBox”,头文件填写“hexspinbox.h”好了。
在ui生成的包含有QSpinBox的控件文件中,ui的源代码里面多了一段<customwidgets><customwidget><class>HSpinBox</class><extends>QSpinBox</extends><header>hspinbox.h</header></customwidget>包含文件变为"hexspinbox.h"。
在Qt Designer中,QSpinBox表示的控件为HexSpinBox,并且可以设置所有的QSpinBox的属性。
可以在VS2008中编译一下main.ui文件,从ui_main.h源代码中可以知道,引入的控件是:升级法的缺点是不能在Qt Designer中设置自定义控件自己的特有属性,也不能够绘制自己。
这些问题可以用插件法解决。
插件法1.VS中创建Qt4 Design Plugin 工程,名称叫custom自动建立如下几个文件:自定义控件:custom.h,custom.cpp插件:customplugin.h,customplugin.cpp源代码如下:custom.hcustom.cppcustomplugin.hcustomplugin.cpp在其cpp的最后必须添加下面的宏:.........10........20........30........40........50........60........70........80........90........100. (1)10.......120.......130.......140. (150)2. 新建后,直接编译,会产生如下错误1>LINK : fatal error LNK1181: cannot open input file 'QtDesignerd.lib'这是因为此工程默认引用的是QtDesignerd.lib库,更改其为版本对应的库即可消除故障(VS2008是在项目的属性中Linker/input/Additional Dependencies中修改,我这里Debug配置使用的是QtDesignerd4.lib,Release 版本使用QtDesigner4.lib)。
3、使用自定义插件1)、只需要把通过Release模式生成的项目.lib和项目.dll文件拷到C:\Qt\4.7.4\plugins\designer中,2)、然后在QtDesigner中,选择菜单Help/About Plugin就可以看到你的自定义控件是否已经载入成功。
在QtDesigner中控件列表中有一项My Widget 中就有你的自定义控件。
参考:1、 Qt自定义控件(插件)并添加到QtDesigher打开QtDesigner,我们自定义的空间custom成功使用界面如下:之前使用Qt的时候都是手写代码的(因为批量按钮可以使用数组实现),但当界面越来越复杂时,这种开发效率就太低了;后来就开始使用QtDesigner,但要使QtDesigner支持我自己写的控件,需要提升或插件的形式(在<C++ GUI Qt 4编程(第二版)>中有介绍).结果看了之后,觉得提升的方式简单而不灵活,故使用插件法实现;步骤如下:[具体可参照第三方开源组件Qwt部件库的插件类的实现方式,个人感觉特别规范]1. 继承QObject和QDesignerCustomWidgetInterface实现插件类(或继承QObject和QDesignerCustomWidgetCollectionInterface实现多个自定义控件);2. 编写Qt平台无关的工程文件.pro(例如CustomWidgetPlugin.pro);3. qmake CustomWidgetPlugin.pro;4. make(windows下vc平台使用nmake,如果发现缺少环境变量,可以运行其bin/vcvars32.bat配置环境)先说说第一点:继承后需要重写父类虚函数,原型如下:[cpp]view plaincopy在其cpp的最后必须添加下面的宏:[cpp]view plaincopy再说说第二点:.pro的参数和语法比较多, 在网上可以搜到不少资料, 在这里总结一下1. 注释从“#”开始,到这一行结束。
2. 指定源文件SOURCES = *.cpp对于多源文件,可用空格分开,如:SOURCES = 1.cpp 2.cpp3.cpp或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样:SOURCES = hello.cpp /(续行符)main.cpp一个更冗长的方法是单独地列出每一个文件,就像这样:SOURCES+= hello.cppSOURCES +=main.cpp这种方法中使用“+=”比“=”更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。
3. 指定头文件HEADERS = hello.h或者HEADERS += hello.h列出源文件的任何一个方法对头文件也都适用。
4. 配置信息CONFIG用来告诉qmake关于应用程序的配置信息。
CONFIG+= qt warn_on release编译QtDesigner插件中使用CONFIG += desginer plugin release在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。
这样做比使用“=”那样替换已经指定的所有选项是更安全的。
A> qt部分告诉qmake这个应用程序是使用Qt来连编的。
这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。
B> warn_on部分告诉qmake要把编译器设置为输出警告信息的。
C> release部分告诉qmake应用程序必须被连编为一个发布的应用程序。
在开发过程中,程序员也可以使用debug来替换release5. 指定目标文件名TARGET = filename如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称6. 添加界面文件(ui )INTERFACES = filename.ui7. 平台相关性处理我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。
为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:win32 {SOURCES += hello_win.cpp}所以如果qmake运行在Windows上的时候,它就会把hello_win.cpp添加到源文件列表中。
如果qmake运行在其它平台上的时候,它会很简单地把这部分忽略。
8. 如果一个文件不存在,停止qmake如果某一个文件不存在的时候,你也许不想生成一个Makefile。
我们可以通过使用exists()函数来检查一个文件是否存在。
我们可以通过使用error()函数把正在运行的qmake停下来。
这和作用域的工作方式一样。
只要很简单地用这个函数来替换作用域条件。
对main.cpp文件的检查就像这样:!exists( main.cpp ) {error( "No main.cpp file found")}“!”用来否定这个测试,比如,如果文件存在,exists( main.cpp)是真,如果文件不存在,!exists( main.cpp )是真。
9. 检查多于一个的条件假设你使用Windows并且当你在命令行运行你的应用程序的时候你想能够看到qDebug()语句。
除非你在连编你的程序的时候使用console设置,你不会看到输出。
我们可以很容易地把console添加到CONFIG行中,这样在Windows下,Makefile就会有这个设置。
但是如果告诉你我们只是想在当我们的应用程序运行在Windows下并且当debug已经在CONFIG行中的时候,添加console。
这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成另一个。
把设置放在最里面的作用域里,就像这样:win32 {debug {CONFIG += console}}嵌套的作用域可以使用冒号连接起来,像这样:win32:debug {CONFIG += console}10. 摸板模板变量告诉qmake为这个应用程序生成哪种makefile。
下面是可供使用的选择:A> app -建立一个应用程序的makefile。
这是默认值,所以如果模板没有被指定,这个将被使用。
B> lib - 建立一个库的makefile。
C> vcapp - 建立一个应用程序的VisualStudio项目文件。
D> vclib - 建立一个库的VisualStudio项目文件。
E> subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
如果需要编译成windows的dll库,可以在CONFIG中添加一个配置"CONFIG += dll"实现11. 生成Makefile当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:Makefile可以像这样由“.pro”文件生成:qmake -oMakefile hello.pro对于VisualStudio的用户,qmake也可以生成“.dsp”文件,例如:qmake -tvcapp -o hello.dsp hello.pro。