Qt开发基础
来源:互联网 发布:软件动态分析工具 编辑:程序博客网 时间:2024/06/04 20:00
1.Qt基础
1.1Qt主程序
Qt主程序主要有两种,一是Qt控制台程序,而是Qt GUI应用程序。
1.1.1Qt控制台程序
Qt控制台程序很少用到,这里仅仅简单了解。
int main(int argc,char *argv[])
{
QCoreApplication a(argc, argv);
cout<<"helloworld"<<endl;
return a.exec();
}
以上代码就是简单的Qt控制台程序,创建了一个QCoreApplication对象a,并输出hello world,最后a调用.exec()。QCoreApplication为非GUI的Qt程序提供主事件循环,负责处理和派发操作系统和其他事件,调用exec()才能启动事件循环。如果去掉第一和第三行代码,其实就是一个普通的C++程序,一样可以运行。
int main(int argc,char *argv[])
{
//QCoreApplicationa(argc, argv);
cout<<"helloworld"<<endl;
//returna.exec();
}
1.1.2Qt GUI应用程序
int main(int argc,char *argv[])
{
QApplication a(argc, argv);
QLabel label("helloworld");
label.show();
return a.exec();
}
和Qt控制台程序类似,需要创建一个QApplication对象,并调用exec()。QApplication继承QCoreApplication,用于管理GUI程序的控制流和主要的设置。每个GUI程序都只能有一个QApplication对象,而且必须最先被创建。
1.2信号和槽
1.2.1信号和槽连接
信号和槽机制是Qt的核心特性,主要用与对象之间的通信。
Connect()函数原型:
boolQObject::connect(const QObject* sender,const char * signal, const QObject * receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection )
在用的时候需要用SIGNAL() 和SLOT()宏指定信号和槽函数。
int main(int argc,char *argv[])
{
QApplication a(argc, argv);
QPushButton *pQuitBtn = new QPushButton("Quit");
QObject::connect(pQuitBtn,SIGNAL(clicked()),&a,SLOT(quit()));
pQuitBtn->show();
returna.exec();
}
这里把按钮的clicked()信号与QApplication对象的quit()槽连接起来。当单击按钮时,按钮发出信号,槽函数quit()将自动被执行,程序便退出。
1.2.2深入介绍信号和槽
槽函数和普通的C++成员函数差不多,可以是虚函数,可以被重载;可以是公有,私有或者保护的;也可以被直接调用;它们的参数可以是任意类型。
1. 一个信号可以连接多个槽,在发射信号的时候,会以不确定的顺序一个接一个的调用槽函数。
2. 多个信号可以连接同一个槽,无论发射哪个信号,都会调用连接的槽函数。
3. 一个信号可以与另外一个信号相连接。
4. 连接可以被移除。
bool QObject::disconnect ( constQObject * sender, const char * signal, const QObject * receiver,const char *method )
5. 信号和槽的参数必须具有相同的顺序和相同的类型。如果信号的参数比槽的参数多,多余的参数将被忽略掉。如果参数类型不匹配,或者如果信号或槽不存在,Qt会在运行时发出警告。如果在信号和槽的名字中包含了参数名,Qt也会发出警告。
2.Qt程序开发
2.1创建主窗口
QMainWindow类提供了一个程序主窗口基本框架。其框架图如下:
可以调用setCentralWidget().设置中央窗口部件。
2.1.1.创建菜单
menuBar()返回了窗口的QMenuBar,可以调用QMenuBar::addMenu()给窗口添加新的菜单。QMainWindow自带有默认菜单栏,如果你想实现自己的菜单栏,你也可以调用setMenuBar()设置自己的菜单栏。例如:
void MainWindow::createMenus()
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
fileMenu->addAction(saveAct);
}
2.1.2创建工具栏
可以调用addToolBar()给窗口添加工具栏,而且可以指定Qt::ToolBarArea控制工具栏的起始位置。可以通过QToolBar::setAllowedAreas() and QToolBar::setMovable()限制布局。
void MainWindow::createToolBars()
{
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
}
2.1.3创建停靠窗体
调用addDockWidget()给窗口添加停靠窗体。
QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |
Qt::RightDockWidgetArea);
dockWidget->setWidget(dockWidgetContents);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
2.1.4状态栏
QMainWindow有默认的状态栏,可以调用statusBar()获取默认的状态栏,也可以调用setStatusBar()设置自己的状态栏。可以调用saveState()和restoreState()保存和获取其布局状态。
2.2对话框使用
QDialog是Qt所以对话框的基类,我们可以继承QDialog实现自定义的对话框。QDialog分为模态和非模态对话框,有返回值,默认按钮。如果有parent,其默认的位置为parent的中部。
2.2.1模态对话框
模态对话框分两种:应用程序模态对话框和窗口模态对话框。应用程序模态对话框会阻塞整个应用程序,而窗口模态对话框只阻塞与对话框关联的窗口,用户依然可以使用程序的其他窗口。
我们通常调用exec() 来显示模态对话框,关闭对话框时,exec() 会有一个返回值。
2.2.2非模态对话框
我们通常调用show()显示非模态对话框。如果隐藏了一个对话框后再次调用show(),对话框将显示在其原始的位置。
2.2.3默认按钮
当用户按下Enter(Return)键时默认按钮将被按下。这表示用胡接受了对话框设置并将关闭对话框。可以用QPushButton::setDefault(), QPushButton::isDefault() 和 QPushButton::autoDefault()设置控制对话框默认按钮。
2.2.4Qt标准对话框
QColorDialog
Dialog widget for specifying colors
QFileDialog
Dialog that allow users to select files or directories
QFontDialog
Dialog widget for selecting a font
QInputDialog
Simple convenience dialog to get a single value from the user
QMessageBox
Modal dialog for informing the user or for asking the user a question and receiving an answer
QPageSetupDialog
Configuration dialog for the page-related options on a printer
QPrintDialog
Dialog for specifying the printer's configuration
QPrintPreviewDialog
Dialog for previewing and configuring page layouts for printer output
QProgressDialog
Feedback on the progress of a slow operation
2.3布局管理
管理窗口部件布局的三种方法:绝对位置法,人工布局法和布局管理器法。
2.3.1绝对位置法
绝对位置法:在构造函数中,各个子窗口部件通过调用SetGeometry()函数来分配固定的大小和位置实现。
绝对位置法的缺点:
1. 用户无法改变窗口的大小
2. 如果用户选择了一种不常用的大字体,或者当应用程序被翻译成另外一种语言时,也许会把一些文本截断。
3. 对于某些风格的平台,这些窗口部件可能会有不合适的尺寸大小。
4. 必须人工的计算位置和大小。
2.3.2人工布局法
人工布局法:通过重新实现窗体的resizeEvent()函数,在该函数中各个子窗口部件通过调用SetGeometry()来设置几何形状实现的。利用这种方法给子窗口部件设置的大小尺寸总是可以和窗口的大小成比例。
2.3.3布局管理器法
布局管理器会为每种类型的窗口部件提供一些合理的默认值,并且会考虑每一个窗口部件的大小提示,会自动调整布局来响应字体的变化,内容的改变以及窗口大小的调整。Qt提供了三种布局管理器:QHBoxLayout,QVBoxLayout和QGridLayout。
- Qt开发基础
- QT基础开发资料
- Qt 网络开发基础
- Qt开发之基础
- QT项目开发之数据库基础
- 通过Qt开发pythonUI(基础)
- Qt for android basis , Qt Android 开发基础
- QT开发(四十六)——QT数据库编程基础
- QT开发(五十)——QT串口编程基础
- 【C/C++学院】(13)QT开发技术/QT 基础/QT 信号和槽
- QT基础
- qt基础
- qt基础
- Qt 基础
- qt基础
- QT基础
- qt基础
- qt基础
- Android抽屉效果(使用LayoutParams来移动View的位置)
- PB_保存功能的实现
- DRP PK 牛腩新闻发布系统
- Linux环境下c语言程序执行shell脚本
- 百万记录poi导出日记
- Qt开发基础
- RHEL 4 性能优化详述(/proc/sys/kernel/优化)
- 对于一个非常大的数,如何快速高效返回比它小的最大质数【腾讯笔试题】
- 函数式编程
- 各数据库的分页SQL语句
- 分析用户的网页浏览行为与习惯
- Unix/Linux进程间通信——(System V)消息队列
- 小米2及其他Android手机无法连接mac解决方案
- relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;