QT 创建主窗口

来源:互联网 发布:csol精准开启积分算法 编辑:程序博客网 时间:2024/04/30 20:41

C++GUI Qt4 创建主窗口  

 

(1)          Qt的资源机制

1)创建一个资源文件

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

2)在资源文件中添加前缀,例如这里/Icon(这里的前缀类似于文件在系统的目录,即在添加文件前需要创建一个目录),然后就可以添加文件了;

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

3当引用这些资源时,需要使用带路径前缀:/(冒号斜线)的形式

1

QIcon *mainIcon = new QIcon(":/Icon/mainIcon.gif"); 

 

(2)          应用程序的主窗口

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

       通过子类化QMainWindow就可以创建一个应用程序的主窗口,一般该主窗口包括:窗口图标、窗口标题、菜单栏、工具栏、中央部件和状态栏。

1)动作(QAction类)

一个动作就是一个可以添加到菜单栏和工具栏中的的项;

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

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)上下文菜单(右键时弹出的菜单)

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

1
2
3
4
5

//添加到相关联的QAction列表 
void QWidget:: addAction( QAction *action); 
 
//
激活上下文菜单 
void QWidget:: setContextMenuPolicy( Qt::ContextMenuPolicy p ); 

每一个QWidget对象或它的派生类对象,都有一个与之相关联的QAction列表;当pQt::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

例子:

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

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函数,它可以隐藏常规状态栏,并在状态栏位置上显示临时信息

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

1

void QStatusBar::showMessage(const QString &msg, int timeout=0);

       其中timeout即为临时消息持续显示的时间,单位为毫秒;当timeout0时则临时信息会保持显示直到clearMessageshowMessage再次调用为止;

 

(3)          一些常用函数

1)消息框

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

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)获得打开文件或保存文件的全路径

(3)创建主窗口 - 十三月de天空 - 十三月de天空
 

1
2
3
4
5

//getOpenFileName 
QString QFileDialog:: getOpenFileName(...); 
 
//getSaveFileName 
QString QFileDialog:: getSaveFileName(...); 

 

3QSettings保存与读取设置

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); 

 

  

原创粉丝点击