C++ GUI Qt4编程-创建主窗口
来源:互联网 发布:软件测试考试题库 编辑:程序博客网 时间:2024/04/30 23:47
应用程序的主窗口提供了用于构建应用程序用户界面的框架,包含菜单,工具栏,状态栏,对话框等控制。
1.子类化QMainWindow
通过子类化QMainWindow可以创建一个应用程序的主窗口。由于QDialog和QMainWindow都派生自QWidget,所以通过创建对话框来创建主窗口同样适用。
classs MainWindow :public QMainWindow
{
Q_OBJECT
public:
MainWindow();
protected:
//closeEvent()函数是QWidget类中的一个虚函数,当用户关闭窗口时,这个函数会被自动调用,类MainWindow中重新实现了它,这样就可以在关闭的时候向用户询问。
void closeEvent(QCloseEvent *event);
}
MainWindow::MainWindow()
{
spreadsheet = new Spreadsheet;
//把spreadsheet窗口部件设置为主窗口的中央部件,中央部件会占用主窗口的中央区域部分。
setCentralWidget(spreadsheet);
//把窗口左上角的图标设置为icon.png,Qt支持很多图像个数,包括BMP,GIF,JPEG,PNG,PNM,SVG,TIFF,XBM,XPM。
setWindowIcon(QIcon(":/images/icon.png"));
}
1)绝大多数的槽都把void作为它们的返回值,当槽作为一个信号的响应函数而被执行时,就会忽略这个返回值,但是当把槽作为函数来调用时,其返回值对我们的作用就和调用任何一个普通的C++函数时的作用是相同的。
2)还没有一种与平台无关的可在桌面上显示应用程序图标的设置方法。与平台相关的桌面图标设置方法在http://doc.trolltech.com/4.3/appicon.html中进行阐述。
3)图形用户界面在应用程序处理图片的方法
(1)把图片保存到文件中,在运行时动态载入。
(2)把XPM文件包含在源代码中,因为XPM文件也是有效的C++文件。
(3)使用Qt的资源机制(适用于所支持的任意文件格式,把需要处理的图片存放在源代码树中名为images的子目录下)。
2.创建菜单和工具栏
1)创建菜单和工具栏的步骤
(1)创建并且设置动作。
(2)创建菜单并且把动作添加到菜单上。
(3)创建工具栏并且把动作添加到工具栏上。
2)创建菜单/上下文菜单/工具栏/状态栏的代码示例
void MainWindow::createActions()
{
//创建动作对象
newAction = new QAction(tr("&New"), this);
//图标
newAction->setIcon(QIcon(":/images/new.png"));
//对各平台设置正确的快捷键
newAction->setShortcut(QKeySequence::New);
//状态提示
newAction->setStatusTip(tr("Create a new spreadsheet file"));
//设置信号对应的槽(能够确保点击菜单/对应的图标/对应的快捷键都可以调用槽)
connect(newAction, SIGNAL(triggered()), this, SLOT(newFile)));
}
void MainWindow::createMenus()
{
//创建QMenu窗口部件并添加到菜单栏中,menuBar()返回指向QMenuBar的指针,菜单栏会在第一次调用menuBar()函数的时候创建出来。
fileMenu = menuBar()->addMenu(tr("&File"));
//添加一个newAction动作到菜单中
fileMenu->addAction(newAction);
//才菜单中添加一个间隔器,可以把视觉上关系密切的项放在一起。
fileMenu->addSeparator();
//添加子菜单,一个菜单与它所属的菜单一样,也是一个QMenu。
selectSubMenu = filemenu->addMenu(tr("&Select"));
}
void MainWindow::createContextMenu()
{
//任何窗口部件都可以有一个与之相关联的QAction列表,要为该应用程序提供上下文菜单,可以将所需的动作添加到窗口部件中。
spreadsheet->addAction(cutAction);
//设置上下文菜单策略设置为一个显示这些动作的上下文菜单。
spreadsheet->setContextMenuPolicy(Qt::ActionsContextMenu);
}
一种更为高级的提供上下文菜单方法是重新实现QWidget::contextMenuEvent()函数,创建一个QMenu窗口部件,在其中添加锁期望的那些动作,并且在对该窗口部件调用exec()函数。
void MainWindow::createToolBars()
{
//添加工具栏
fileToolBar = addToolBar(tr("&File"));
//添加动作
fileToolBar->addAction(newAction);
//添加间隔器
fileToolBar->addSeparator();
}
void MainWindow::createStatusBar()
{
locationLabel = new QLabel("W999");
//设置对齐方式
locationLabel->setAlignment(Qt::AlignHCenter);
//提供窗口一个理想的大小
locationLabel->setMinimumSize(locationLabel->sizeHint);
formulaLabel = new QLabel;
formulaLabel->setIndex(3);
//statusBar()函数返回指向状态栏的指针,添加到状态栏的QLabel会自动被重定义父对象,让他们成为状态栏的子对象,第一次调用statusBar()函数时会创建状态栏。
statusBar()->addWidget(locationLabel);
//状态栏指示器是一些简单的QLabel,在任何需要的时候改变它们的文本。已经在formulaLabel中添加了一个缩进格式,以便让那些显示的文本左边有一个小的偏移量。
statusBar()->addWidget(formulaLabel, 1); //指定了一个伸展因子1,默认是0,多余的空间分配到了右边的对象中。
connect(spreadsheet, SIGNAL(currentCellChange(int,int,int,int)), this, SLOT(updateStatusBar()));
connect(spreadsheet, SIGNAL(modified()), this, SLOT(spreadsheetModified()));
locationLabel->setText(spreadsheet->currentLocation());
formulaLabel->setText(spreadsheet->currentFormula());
//用以更新标题栏,新位置,公式指示器等。
setWindowModified(true);
}
3.使用对话框
1)对话框的显示
void MainWindow::find
{
findDialog = new FindDialog(this);
//非模态对话框显示,窗口是可见的。
findDialog->show();
//确保窗口位于其他窗口之上
findDialog->raise();
//窗口是激活的状态
findDialog->activateWindow();
//模态窗口的显示方法
if(findDialog.exec()) //ok返回true值(QDialog::Accepted),否则返回false值(QDialog::Rejected)。
{...}
}
(1) 本应该在MainWindow的构造函数中创建这个对话框,但是推迟对话框的创建过程将可以使程序的启动更加快速,还有,如果从来没有使用到这个对话框,那么它就不会被创建,这样可以既节省时间又节省内存。
(2)通过void setModal(bool modal)来设置对话框的模态性,当modal设置为true时,默认对整个应用程序模态。
(3)通过void setWindowModality(Qt::WindowModality windowModality)来设置模态性,Qt::WindowModality有以下取值,Qt::Nodal:非模态,Qt::WindowModal:窗口模态,Qt::ApplicationModal:应用程序模态。
(4)通过Qt::WindowModality windowModality() const得到窗口的模态性。
(5)通过 bool isModal() const判断窗口是否为模态的。
4.存储设置
默认情况下,QSetting会存储应用程序中与特定平台相关的一些设置信息。在windows系统中,它使用的是系统注册表,在UNIX系统中,它会把设置信息存储在文本文件中,在Mac OS X中,它会使用Core Foundation Preferences的应用程序编程接口。
void MainWindow::writeSettings()
{
//参数说明了组织的名字和应用程序的名字,采用平台相关的方式,可以利用这一信息查找这些设置所在的位置。
QSettings settings("Software Inc", "Spreadsheet");
settings.setValue("geometry", saveGeometry);
}
5.多窗口
setAttribute(Qt::WA_DeleteOnClose); //在窗口关闭时删除对应的对象。
6.程序启动画面
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSplashScreen *splash = new QSplashScreen;
splash->setPixmap(QPixmap(":/images/splash.png"));
splash->show();
splash->showMessage(QObject::tr("Setting up the main window..."), topRight, Qt::while);
MainWindow mainWindow;
splash->finish(&mainWindow);
delete splash;
}
- C++ GUI Qt4编程-创建主窗口
- C++ GUI Qt4编程-创建自定义窗口部件
- C++ GUI Qt4编程-创建对话框
- Qt C++GUI Qt4 编程书中网址
- C++ GUI QT4编程笔记
- QT4:创建主窗口应用程序 ,非 对话框应用成
- 《C++ GUI Qt4编程》第一章、Qt入门
- C++ GUI Qt4编程-Qt入门
- C++ GUI Qt4编程-布局管理
- C++ GUI Qt4编程-事件处理
- C++ GUI QT4编程——拖放
- C++ GUI Qt4编程笔记1
- 关于python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图
- C++Windows编程之创建窗口
- C++Windows编程之创建窗口
- GUI编程——窗口
- C++ GUI Qt4学习笔记(二) 创建对话框
- C/C++_log2000_空白窗口3及初步gui编程笔记
- 进制转换(还是链表)
- HPUX下修改设备名称
- 课程管理系统 java
- js 操作文件和文件夹
- 11款创建图形和图表的JavaScript工具包
- C++ GUI Qt4编程-创建主窗口
- linux如何开机自动运行自己的脚本
- WPF分页DataGrid
- android中的assets
- Hibernate如何检查脏数据
- oracle merge及其他方式实现存在更新不存在插入操作
- Javaweb学习第一天
- Linux内核启动顺序
- Greenplum中的vacuum和analyze