1)创建一个资源文件
2)在资源文件中添加前缀,例如这里/Icon(这里的前缀类似于文件在系统的目录,即在添加文件前需要创建一个目录),然后就可以添加文件了;
3)当引用这些资源时,需要使用带路径前缀:/(冒号斜线)的形式;
1 |
| QIcon *mainIcon = new QIcon(":/Icon/mainIcon.gif"); |
(2) 应用程序的主窗口
通过子类化QMainWindow就可以创建一个应用程序的主窗口,一般该主窗口包括:窗口图标、窗口标题、菜单栏、工具栏、中央部件和状态栏。
1)动作(QAction类)
一个动作就是一个可以添加到菜单栏和工具栏中的的项;
QAction类的几个重要函数:
01 02 03 04 05 06 07 08 09 10 11 |
| //构造函数 QAction:: QAction(const QString &text, QObject *parent); //设置动作的图标 void QAction:: setIcon( const QIcon &icon); //设置快捷键 void QAction:: setShortCut(const QKeySequence &shortcut); //设置提示信息 ,当鼠标在QAction上时状态栏显示的提示 void QAction:: setStatusTip(const QString &statusTip); |
例子:
01 02 03 04 05 06 07 08 09 10 |
| 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 file")); connect(newAction, SIGNAL(triggered()), this, SLOT(newFile())); //... } |
2)设置标题、图标和中央部件
1 2 3 4 5 6 7 8 |
| //设置主窗口的中央部件 void QMainWindow:: setCentralWidget( QWidget *widget); //设置主窗口的图标 void QMainWindow:: setWindowIcon( const QIcon &icon); //设置主窗口的标题 void QMainWindow:: setWindowTitle( const QString str); |
3)菜单栏(QMenuBar)和菜单(QMenu)
一个主窗口只有一个菜单栏,而菜单栏可以包含很多一级菜单、二级菜单和动作等;
01 02 03 04 05 06 07 08 09 10 11 |
| //返回主窗口的菜单栏,没有则首先创建 QMenuBar *QMainWindow:: menBar() const; //创建一个一级菜单,并返回指向新菜单的指针 QMenu *QMenuBar:: addMenu( const QString &title); //创建一个下一级菜单,并返回指向新菜单的指针 QMenu *QMenu:: addMenu( const QString &title); //在该菜单下添加一个已创建的动作 void QMenu:: addAction( QAction *action); |
例子:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 |
| void MainWindow::createMenus() { //创建一个一级菜单 fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAction); //... //创建一个一级菜单 editMenu = menuBar()->addMenu(tr("&Edit")); editMenu->addAction(cutAction); //... //创建一个二级菜单 selectSubMenu = editMenu->addMenu(tr("&Select")); selectSubMenu->addAction(selectRowAction); //... } |
4)上下文菜单(右键时弹出的菜单)
1 2 3 4 5 |
| //添加到相关联的QAction列表 void QWidget:: addAction( QAction *action); //激活上下文菜单 void QWidget:: setContextMenuPolicy( Qt::ContextMenuPolicy p ); |
每一个QWidget对象或它的派生类对象,都有一个与之相关联的QAction列表;当p为Qt::ActionsContextMenu时,在该QWidget上右击即可显示与之相关联的QAction列表;
例子:
1 2 3 4 5 6 7 |
| void MainWindow::createContextMenu() { spreadsheet->addAction(cutAction); spreadsheet->addAction(copyAction); spreadsheet->addAction(pasteAction); spreadsheet->setContextMenuPolicy(Qt::ActionsContextMenu); } |
5)状态栏
主窗口只有一个状态栏,状态栏指示器是一些简单的QLabel;
1 2 |
| //返回状态栏,没有则首先创建 QStatusBar *QMainWindow:: statusBar() const; |
例子:
01 02 03 04 05 06 07 08 09 10 11 12 13 |
| void MainWindow::createStatusBar() { leftLabel = new QLabel(" A1 "); leftLabel->setAlignment(Qt::AlignHCenter);//中间对齐 leftLabel->setMinimumSize(locationLabel->sizeHint()); rightLabel = new QLabel; rightLabel->setIndent(3);//设置其text初始位置的偏移量 //设置状态栏的组成 statusBar()->addWidget(leftLabel); statusBar()->addWidget(rightLabel, 1);//1:尽可能伸展 } |
状态栏有时需要显示一些临时消息(如下),这时可以调用showMessage函数,它可以隐藏常规状态栏,并在状态栏位置上显示临时信息;
1 |
| void QStatusBar::showMessage(const QString &msg, int timeout=0); |
其中timeout即为临时消息持续显示的时间,单位为毫秒;当timeout为0时则临时信息会保持显示直到clearMessage或showMessage再次调用为止;
(3) 一些常用函数
1)消息框
01 02 03 04 05 06 07 08 09 10 11 |
| //warning StandardButton QMessageBox:: warning(...); //information StandardButton QMessageBox:: information(...); //question StandardButton QMessageBox:: question(...); //critical StandardButton QMessageBox:: critical(...); |
2)获得打开文件或保存文件的全路径
1 2 3 4 5 |
| //getOpenFileName QString QFileDialog:: getOpenFileName(...); //getSaveFileName QString QFileDialog:: getSaveFileName(...); |
3)QSettings保存与读取设置
01 02 03 04 05 06 07 08 09 10 11 12 |
| //QSettings构造函数 QSettings:: QSettings(const QString &organization, const QString &application, QObject *parent = 0); //保存设置 void QSettings:: setValue(const QString &key, const QVariant &value); //读取设置 QVariant QSettings:: value(const QString &key, const QVariant &defaultValue); |
例子:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 |
| void MainWindow::writeSettings() { QSettings settings("Software Inc.", "Spreadsheet"); //保存主窗口的几何形状 settings.setValue("geometry",saveGeometry()); //保存设置的值 settings.setValue("showGrid",showGridAction->isChecked()); } void MainWindow::readSettings() { QSettings settings("Software Inc.", "Spreadsheet"); //读取主窗口的几何形状并设置 restoreGeometry(settings.value("geometry").toByteArray()); //读取保存的值 bool showGrid = settings.value("showGrid", true).toBool(); } |
4)使用系统的剪贴板
1 2 3 4 5 6 7 8 9 |
| //返回系统的剪贴板 QClipboard *QApplication:: clipboard() const; //将text复制到剪贴板 void QClipboard:: setText( const QString &text, Mode mode = Clipboard); //从剪贴板中获得 QString QClipboard:: text(Mode mode = Clipboard); |