资料来源:http://doc.qt.nokia.com/latest/layouts-basiclayouts.html,在这里,我们学习下面几个方面:
- 以QDialog或其继承为主体,建立程序
- 菜单menu的建立
- GroupBox的使用,加入水平摆放的QHBoxLayout和格子摆放的QGridLayout、QFormLayout
- QDialogButtonBox的使用
以QDialog建立程序主体框架
如果我们不采用QWidget的方式,直接采用QDialog(是QWidget的一个subclass),对于创建一个Dialog,其架构可以简单为:
int main(int argc, char * argv[])
{
QApplication app(argc,argv);
Dialog dialog;
return dialog.exec();
}
创建一个Dialog的类,使用dialog.hdialog.cpp。在*.h中
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
}
在*.cpp中创建函数为
Dialog::Dialog()
{
QVBoxLayout * mainLayout = new QVBoxLayout;
// ... ... 纵向排放各个widget
setLayout(mainLayout);
setWindowTitle(tr("Basic Layout Test!"));
}
建立菜单Menu
在dialog上加一个菜单,该菜单为QMenuBar,在菜单栏中加入QMenu菜单,菜单中单元为QAction,也允许潜入QMenu。下面是例子:
QMenuBar * menuBar = new QMenuBar; //创建QMenuBar
QMenu * fileMenu = new QMenu(tr("&File"),this); //创建QMenu
QAction * exitAction = fileMenu -> addAction(tr("E&xit")); //在QMenu中加入entry,并获得返回值Action,用于我们建立connect。也可以通过fileMenu->addMenu(**)方式,支持多成菜单,通过fileMenu->addSeperator方式加入分割。
menuBar -> addMenu(fileMenu); //将QMenu加入QMenuBar中,可以加入多个
connect(exitAction,SIGNAL(triggered()),this,SLOT(accept()));//对QAction的点击(trigger),这里出发Dialog的accpet(hide dialog并返回QDialog::Accepted的值)。
mainLayout -> setMenuBar(menuBar); //加入dialog(QDialog是QWidget的一个子类)
GroupBox的使用:加入水平摆放的QHBoxLayout
这里给出一个采用水平Layout的GroupBox的例子,如图:
QGroupBox horizontalGroupBox = new QGroupBox(tr("Horizontal Layout"));
QHBoxLayout * layout = new QHBoxLayout;
... ... // layout->addWidget(buttons1);分别加入4个button
horizontalGroupBox->setLayout(layout);
mainLayout -> addWidget(horizontalGroupBox);
GroupBox的使用:加入QGridLayout
加入QGridLayout的方法同QHBoxLayout没什么不同,不过在这里我们希望有一个元素占据多个Grid的格子,例如我们计划要一个4*3尺寸的gride,我们希望有一个QTextEdit占据最后一列,我们可以使用:layout->addWidget(editor,0,2,4,1); 其中 0,2表示位于第0行和第2列,4表示纵向延伸,共占4行,1表示共占1列。
我们还需要注意到的是GridLayout并没有说是各行各列的大小均等,我们使用addColumnStretch来设置伸展因子,例如我们要求这个例子中第2列是第1列宽度的两倍。可以使用layout->setColumnStretch(1,10);layout->setColumnStretch(2,20);将它们的伸展因素设置为10和20。
GroupBox的使用,加入QFormLayout
QFormLayout和QGridLayout类似,作为表格方式,通常是N行2列,第0列为QLabel或者QString,实际都是摆放一个QString,第1列为组建。并前将第一列的QLabel和第1列的组件进行了setBuddy,也就是QLabel如果定义了快捷方式,就会直接定位到组建上去。例如layout->addRow(tr("Line
&1:"),new QLineEdit);相当于在QGridLayout的某个顺序位置上,加上一个QLable,其中快捷键为“1”,以及一个QLineEdit的widget。
formGroupBox = new QGroupBox(tr("Form Layout"));
QFormLayout * layout = new QFormLayout;
layout->addRow(tr("Line &1:"),new QLineEdit);
layout->addRow(tr("Line &2,long text:"),new QComboBox);
layout->addRow(tr("Line &3:"),new QSpinBox);
formGroupBox -> setLayout(layout);
mainLayout -> addWidget(formGroupBox);
QDialogButtonBox的使用
在dialog中,我们可以使用自带的button,通才是OK,Cancel。在按这些键的时候,对应的singal为accepted和rejected,我们可以和具体SLOT函数对应起来,在这里我们简单地和系统默认函数对应达到关闭的效果。
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |QDialogButtonBox::Cancel);
connect(buttonBox,SIGNAL(accepted()),this,SLOT(accept()));
connect(buttonBox,SIGNAL(rejected()),this,SLOT(reject()));
mainLayout -> addWidget(buttonBox);
相关链接:我的MeeGo/Moblin相关文章
分享到:
相关推荐
"BasicLayout.rar"压缩包文件包含了一个关于这个主题的示例项目,名为"BasicLayout",这将有助于我们通过实践来学习。 Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的API用于创建美观且功能强大...
BasicLayout Basic Layouts shows how to use the standard layout managers that are available in Qt: QBoxLayout, QGridLayout, and QFormLayout. The QBoxLayout class lines up widgets horizontally or ...
#include <log4qt/basiclayout.h> #include <log4qt/fileappender.h> LOG4QT_INIT Logger *logger = Logger::logger("MyApp"); logger->setLevel(Level::Debug()); FileAppender *appender = new FileAppender();...
Log4Qt提供多种预定义的布局,如BasicLayout、PatternLayout和XMLLayout,也可以自定义布局。 3. **日志输出目的地**:日志可以被输出到控制台、文件、网络、数据库等多种目的地。Log4Qt中的Appender类负责处理这些...
6. Layout Management. 7. Event Processing. 8. 2D Graphics. 9. Drag and Drop. 10. Item View Classes. 11. Container Classes.12. Input/Output. 13. Databases. 14. Multithreading. 15. Networking. 16. XML. ...
- 回顾本章内容,强调学习Qt5的重要性和基础概念。 #### 三、Qt Creator IDE - **3.1 The User Interface** - 介绍Qt Creator IDE的用户界面布局。 - 说明各种窗口和工具栏的功能。 - **3.2 Registering your ...
Part I: Basic Qt Chapter 1. Getting Started Hello Qt Making Connections Laying Out Widgets Using the Reference Documentation Chapter 2. Creating Dialogs Subclassing QDialog Signals and ...
The authors provide readers with unparalleled insight into Qt's event model and layout system. Then, using realistic examples, they introduce superior techniques for everything from basic GUI ...
The authors provide readers with unparalleled insight into Qt's event model and layout system. Then, using realistic examples, they introduce superior techniques for everything from basic GUI ...
- **总结(Summary)**:回顾学习Qt5的基础知识,并为后续学习做铺垫。 #### 3. Qt Creator集成开发环境(Qt Creator IDE) - **用户界面(The User Interface)**:描述Qt Creator的界面布局及常用功能区。 - **...
QML syntax, which is a tree of elements, followed by an overview of the most important basic elements. how to create our own elements, called components and how to transform elements using property ...
2. 开始学习(Get Start) 安装Qt5软件工具包(Installing Qt5 SDK) 你好世界(Hello World) 应用程序类型(Application Types) 总结(Summary) 3. Qt Creator集成开发环境(Qt Creator IDE) 用户界面(The ...
Chapter 6. Main Windows 180 Creating a Main Window 181 Handling User Actions 205 Summary 216 Exercise 217 Chapter 7. Using Qt Designer 220 Designing User Interfaces 223 Implementing Dialogs ...
- **目的与目标**:本书旨在为读者提供一个全面、深入的学习QML及Qt框架的资源。 - **适用对象**:适合初学者到进阶用户,涵盖基础知识到高级技巧。 #### 2. 初识Qt5 (Meet Qt5) - **序言 (Preface)** - 介绍了Qt5...
- **QtGui:** Contains most of the GUI-related classes, including windows, widgets, and layout management. - **QtWidgets:** Contains additional widgets not present in QtGui, and some other non-GUI ...
包含基本PYQT5所有示例源代码,其中有basic示例、calendar_time、containers、controls、designer、dialogs、drapclip、drawing、 ext、layout、menu_toolbar_statusbar、multithread等等
10.8.6. Cascading Write Operations 10.8.6.1. Notes Regarding Cascading Operations 11. Zend_Debug 11.1. 输出变量的值 (Dumping Variables) 12. Zend_Exception 12.1. 使用“异常” 13. Zend_Feed 13.1. ...