初学Qt:初步了解Windows窗口基本控件
2017-10-16 10:22
489 查看
解决问题:本文以具体代码的形式讲解了windows基本窗口的建立过程。
使用方法:为了深入理解,本文未使用Design设计器,而是以纯代码的形式来建立窗口。
具体内容:Windows窗口的菜单栏、工具栏、状态栏、模态和非模态对话框的创建,以及使用MessageBox函数来创建标准对话框。
PS:代码是可以执行的,不存在语法问题。
1、mywindows.h
2、mywindows.cpp(重点程序)
3、main.cpp
使用方法:为了深入理解,本文未使用Design设计器,而是以纯代码的形式来建立窗口。
具体内容:Windows窗口的菜单栏、工具栏、状态栏、模态和非模态对话框的创建,以及使用MessageBox函数来创建标准对话框。
PS:代码是可以执行的,不存在语法问题。
1、mywindows.h
1 #ifndef MYWINDOWS_H 2 #define MYWINDOWS_H 3 4 #include <QtGui/QMainWindow> 5 6 class MyWindows : public QMainWindow 7 { 8 Q_OBJECT 9 10 public: 11 MyWindows(QWidget *parent = 0, Qt::WFlags flags = 0); 12 ~MyWindows(); 13 public slots: 14 void ST_Cout(); 15 void ST_Cout2(); 16 void p1_Dialog(); 17 void p2_Dialog(); 18 void p3_Dialog(); 19 void p4_Dialog(); 20 21 private: 22 23 }; 24 25 #endif // MYWINDOWS_H 26
2、mywindows.cpp(重点程序)
1 #include "mywindows.h" 2 #include <QMenuBar> 3 #include <QMenu> 4 #include<QAction> 5 #include<QDebug> 6 #include<QToolBar> 7 #include<QPushButton> 8 #include<QStatusBar> 9 #include<QLabel> 10 #include<QTextEdit> 11 #include<QDockWidget> 12 #include<QDialog> 13 #include<QMessageBox> 14 #include<QFileDialog> 15 16 MyWindows::MyWindows(QWidget *parent, Qt::WFlags flags) 17 : QMainWindow(parent, flags) 18 { 19 //一、创建菜单栏******************************************* 20 //存在逐级递进关系:菜单>>菜单栏>>菜单项(又称动作项) 21 //1、菜单栏 22 QMenuBar *mBar=menuBar(); 23 //2、菜单 24 QMenu *pFile =mBar->addMenu("文件"); 25 //3、菜单项(动作) 26 QAction *pNew= pFile->addAction("新建"); 27 pFile->addSeparator();//添加分割线 28 QAction *pOpen= pFile->addAction("打开"); 29 //可以发现,菜单栏、菜单、菜单项都没有用new来动态分配空间,因为menuBar()、addMenu()、addAction()三个返回值是contast型的 30 31 //二、创建工具栏******************************************* 32 //工具栏实际上是菜单项的快捷方式,也是有两级:工具栏>>动作项 33 //1、添加工具栏 34 QToolBar *toolBar = this->addToolBar("toolBar"); 35 //2、添加动作项 36 toolBar->addAction(pNew);//将之前的“新建”动作项拿来用即可,注意是指针类型 37 //工具栏上还可以建立按钮(多数软件是这样的,而且图标可以加上图片) 38 QPushButton *PB_Open=new QPushButton(this); 39 PB_Open->setText("打开"); 40 toolBar->addWidget(PB_Open);//将按钮加入到工具栏中 41 42 //三、创建状态栏******************************************* 43 //状态栏实际上存放的是标签Label 44 //1、创建状态栏 45 QStatusBar *StatusBar_MyWindow=statusBar(); 46 //2、新建标签 47 QLabel *Label_MyWindow=new QLabel(this); 48 Label_MyWindow->setText("Normal text file"); 49 //将标签加入到状态栏 50 StatusBar_MyWindow->addWidget(Label_MyWindow); 51 StatusBar_MyWindow->addWidget(new QLabel("Normal",this));//从左往右添加 52 StatusBar_MyWindow->addPermanentWidget(new QLabel("Error",this));//从右往左添加 53 54 //三、核心控件******************************************* 55 QTextEdit *textEdit = new QTextEdit(this);//文本编辑区 56 setCentralWidget(textEdit);//设置核心控件 57 58 //三、浮动窗口******************************************* 59 QDockWidget *dock =new QDockWidget(this); 60 addDockWidget(Qt::LeftDockWidgetArea,dock);//添加控件 61 dock->setWidget(new QTextEdit(this)); 62 63 //三、模态与非模态对话框******************************************* 64 //添加一个菜单,存在一个菜单项,用来创建模态与非模态对话框,重点在槽函数里 65 QMenu *pDialog =mBar->addMenu("对话框"); 66 QAction *p1= pDialog->addAction("模态对话框"); 67 pDialog->addSeparator();//添加分割线 68 QAction *p2= pDialog->addAction("非模态对话框"); 69 70 //四、标准对话框******************************************* 71 //添加一个菜单,存在一个菜单项,用来创建标准对话框,重点在槽函数里 72 QMenu *pStandardDialog =mBar->addMenu("标准对话框"); 73 QAction *p3= pStandardDialog->addAction("关于"); 74 pDialog->addSeparator();//添加分割线 75 QAction *p4= pStandardDialog->addAction("非模态对话框"); 76 77 78 //信号与槽 79 QObject::connect(pNew,SIGNAL(triggered()),this,SLOT(ST_Cout()));//新建 80 QObject::connect(pOpen,SIGNAL(triggered()),this,SLOT(ST_Cout2()));//打开 81 QObject::connect(PB_Open,SIGNAL(clicked()),this,SLOT(ST_Cout2()));//打开 82 QObject::connect(p1,SIGNAL(triggered()),this,SLOT(p1_Dialog()));//建立模态对话框 83 QObject::connect(p2,SIGNAL(triggered()),this,SLOT(p2_Dialog()));//建立非模态对话框 84 85 QObject::connect(p3,SIGNAL(triggered()),this,SLOT(p3_Dialog()));//建立 关于 标准对话框 86 QObject::connect(p4,SIGNAL(triggered()),this,SLOT(p4_Dialog()));//建立 疑问 标准对话框 87 } 88 89 MyWindows::~MyWindows() 90 { 91 92 } 93 void MyWindows::ST_Cout() 94 { 95 qDebug()<<"新建"; 96 } 97 //文件打开路径 98 void MyWindows::ST_Cout2() 99 { 100 QString path=QFileDialog::getOpenFileName(this,"open","../","source(*.cpp *.h);;Text(*.txt);;all(*.*)"); 101 //"../"表示上一级路径 102 qDebug()<<path;//将路径输出 103 } 104 105 //(1)建立模态对话框******************************************* 106 void MyWindows::p1_Dialog() 107 { 108 QDialog Dialog1; 109 Dialog1.setWindowTitle("模态对话框"); 110 Dialog1.exec(); 111 //exec函数保证了对话框一直存在,且在该软件其他窗口之上,直到其退出,以此实现“模态” 112 qDebug()<<"模态对话框";//可以注意,打印是在对话框退出之后再打印的 113 } 114 115 //(2)建立非模态对话框******************************************* 116 void MyWindows::p2_Dialog() 117 { 118 /*创建非模态对话框,不能直接在这里“QDialog Dialog2”。 119 因为没有exec1函数,程序不会停留,直接运行到右大括号删除对象并退出 */ 120 //解决方法1:将Dialog2作为成员对象(简单,不在这里列出) 121 122 //解决方法2:动态分配空间,但是要解决内存泄漏问题*/ 123 QDialog *Dialog2 = new QDialog(); 124 //问题:虽然可以指定父对象,利用对象树释放,但是这是在整个程序最终退出时才释放,一旦多次创建这个对话框同样会出现内存泄露问题 125 //解决方法:setAttribute函数设置属性 126 Dialog2->setAttribute(Qt::WA_DeleteOnClose);//Qt::WA_DeleteOnClose属性是关闭时自动释放 127 Dialog2->setWindowTitle("非模态对话框"); 128 Dialog2->show(); 129 qDebug()<<"非模态对话框";//可以注意,打印是在对话框创立的同时就打印的 130 } 131 132 //(3)使用QMessageBox函数建立标准对话框******************************************* 133 void MyWindows::p3_Dialog() 134 { 135 //具体创建哪种对话框,请参见Qt助手中关于QMessageBox内静态成员函数的说明 136 QMessageBox::about(this,"about","关于qt"); 137 } 138 void MyWindows::p4_Dialog() 139 { 140 //具体创建哪种对话框,请参见Qt助手中关于QMessageBox内静态成员函数的说明 141 QMessageBox::question(this,"question","Are you ok?");//question是个枚举,函数是有返回值的 142 }
3、main.cpp
1 #include "mywindows.h" 2 #include <QtGui/QApplication> 3 #include<QTextCodec> 4 5 int main(int argc, char *argv[]) 6 { 7 QApplication a(argc, argv); 8 QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb2312")); 9 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb2312")); 10 QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312")); 11 MyWindows w; 12 w.show(); 13 return a.exec(); 14 }
相关文章推荐
- 初步了解Html5,运用Html5的一些基本控件
- 在D3D窗口中渲染WINDOWS的基本控件
- Windows编程之基本窗口控件小结
- Windows Phone7开发之 基本控件
- 对TControl和TWinControl相同与不同之处的深刻理解(每一个WinControl就相当于扮演了整个Windows的窗口管理角色,主要是窗口显示和窗口大小)——TWinControl就两个作用(管理子控件的功能和调用句柄API的功能)
- 学习记录-Qt窗口控件的动态添加和删除
- Windows下,Qt激活指定句柄的窗口
- Qt笔记:设置控件的基本属性
- windows程序设计学习笔记-子窗口控件
- 浅谈 Qt 布局管理器 如何让控件随着窗口变化
- Qt实现基本QMainWindow主窗口程序
- windows窗口多线程 其中遇跨线程的使用控件
- Windows 控件限制用户输入的基本法门(.NET 篇) 【摘录自FlashELF's blog】
- 一千个是什么 - Windows窗口、控件和对话框
- ATL编写的带窗口的控件,无论VC6(ATL3.0) VC7.1(ATL7.0) 在Windows 7 或 Server 2008 下,WinForm调用时发生的问题
- Windows常见窗口样式和控件风格
- [置顶] 基于要素(标题、父、类型、进程、控件id)获取windows窗口
- Qt控件随窗口大小变化的设置方法(QTDesigner)
- Windows常见窗口样式和控件风格
- Qt图片自适应窗口控件大小