closeEvent():

这是QWidget类中的一个虚函数,当用户关闭窗口时,会自动调用这个函数,因此我们可以重新实现这个函数,使应用可以在退出时实现我们想要的功能,函数声明为void closeEvent(QCloseEvent *event);

 

Qt资源机制:

资源机制是Qt为应用程序提供图片的方法之一,其他两种分别为把图片保存为文件并在运行中载入,第二种是把XPM文件包含在源代码中。资源机制使用一种简单的XML格式,把图片放在源代码树中,所有资源文件都会编译到应用程序的可执行文件中,因此并不会把文件弄丢,并比运行时载入的方法更方便,资源可以是任意文件。资源文件的后缀为.qrc,使用资源文件只需在.pro中添加RESOURCES = xxx.qrc即可。

 

槽函数的返回值:

槽函数可以带返回值,当他作为信号槽使用时,返回值会被忽略,当他作为普通函数使用时,返回值的作用和普通函数一样。

 

创建菜单和工作栏需要以下步骤:

1、创建并且设置动作

2、创建菜单并且把动作添加到菜单上

3、创建工作栏并且把动作添加到工作栏上

创建菜单和工作栏例子:

//.h中定义

QAction *newAction;

QMenu *fileMenu;

QToolBar *fileToolBar;

//.cpp

//执行构造函数实例化,第一个参数是动作的名字,字符串中&的作用是让Alt+N成为快捷键

newAction = new QAction(tr("&New"),this);   

//设置图标               

newAction->setIcon(QIcon("./new.png"));  

//设置快捷键                     

newAction->setShortcut(QKeySequence::New);

//状态栏信息                 

newAction->setStatusTip(tr("Create a new file"));  

//动作的信号槽         

    connect(newAction,SIGNAL(triggered()),this,SLOT(newFile()));

 

//添加新的菜单项,快捷键是Alt+F,大小写都可以,如果要执行newAction的动作,点击Alt+F+N,菜单栏会在第一次调用menuBar()时创建出来

fileMenu = this->menuBar()->addMenu(tr("&File"));      

//为菜单栏中的项添加动作     

fileMenu->addAction(newAction);

 

//添加工具栏,并添加相应动作

fileToolBar = this->addToolBar(tr("&File"));

    fileToolBar->addAction(newAction);

 

效果如下:

 

 

创建状态栏:

//.h

QLabel *locationLabel ;

QLabel *formulaLabel;

//.cpp

locationLabel = new QLabel("Location");

locationLabel->setAlignment(Qt::AlignHCenter);

locationLabel->setMinimumSize(locationLabel->sizeHint());

 

formulaLabel = new QLabel("Formula");

formulaLabel->setIndent(3);                 //缩进像素

 

//在第一次调用statusBar()时会将状态栏创建出来,调用QAcition::setStatusTip(const QString &statusTip)可以让鼠标指向该动作按键时在状态栏中出现提示

statusBar()->addWidget(locationLabel);

statusBar()->addWidget(formulaLabel,1); //第二个参数是伸展因子,作用是让第二个标签占据剩下的空间

 

QMessage:

QMessage类提供了一个模态对话框,用于与用户的交互,它提供可许多标准的按钮。其中QMessage::warnning的用法如下:QMessage::warnning(parent,title,message,button); 除了warnning还有infomation()question()critical(),他们都有特定的图标:

 

QMessage::warinning()用法实例:

int r = QMessageBox::warning(this,tr("Spreadsheet"),

          tr("The document has been modify\n"

                  "Do you want to save your changes?"),

                                      QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);

if(r == QMessageBox::Yes);

     效果如下:

 

 

QFileDialog::getOpenFileName()

QFileDialog::getOpenFileName()函数会弹出一个文件框,让用户选择一个文件并返回它的文件绝对路径,用户点击Cancel返回一个空字串。QFileDialog::getSaveFileName()也是如此。

函数原型为:

static QString getOpenFileName(QWidget *parent = 0,

                               const QString &caption = QString(),

                               const QString &dir = QString(),

                               const QString &filter = QString(),

                               QString *selectedFilter = 0,

                               Options options = 0);

第一个参数为父对象,指定父对象后窗口部件会显示在父对象部件的中间。

第二个参数是对话框使用的标题,第三个参数是开始的路径,第四个参数是文件过滤器。

使用实例如下:

QString fileName = QFileDialog::getOpenFileName(this,

tr("open SpreadSheet"),

                          ".",

                 tr("SpreadSheet file (*.sp)\n"

                          "My very special flile(*.vsf)"));

 

 

QApplicant::setQuitOnLastWindowClosed(false)

当最后一个窗口关闭时,这个应用程序就结束,假如想禁用这种行为,可以调用函数QApplicant::setQuitOnLastWindowClosed(false),在这种情况下,程序将会继续运行,知道调用QApplicant::quit()

 

QFileInfo

    QFileInfo类提供与系统无关的文件信息。

QFileInfo提供有关文件在文件系统中的名称和位置(路径),其访问权限以及它是目录链接还是符号链接等信息。文件的大小和上次修改/读取时间也可用。 QFileInfo也可以用于获取有关Qt资源的信息。

使用实例:

#ifdef Q_OS_UNIX

 

QFileInfo info1("/home/bob/bin/untabify");

info1.isSymLink();          // returns true

info1.absoluteFilePath();   // returns "/home/bob/bin/untabify"

info1.size();               // returns 56201

info1.symLinkTarget();      // returns "/opt/pretty++/bin/untabify"

info1.fileName;   //returns “untabify” 

 

QFileInfo info2(info1.symLinkTarget());

info2.isSymLink();          // returns false

info2.absoluteFilePath();   // returns "/opt/pretty++/bin/untabify"

info2.size();               // returns 56201

 

#endif

 

qobject_cast

这是强制类型转换符,原型是T qobject_cast(QObject * object),如果对象是类型T(或子类),则返回转换为类型T的给定对象。 否则返回0。如果object0,那么它也将返回0。类T必须(直接或间接)继承QObject,并使用Q_OBJECT宏进行声明。

实例如下:

QObject *obj = new QTimer;          // QTimer inherits QObject

 

QTimer *timer = qobject_cast<QTimer *>(obj);

// timer == (QObject *)obj

 

QAbstractButton *button = qobject_cast<QAbstractButton *>(obj);

// button == 0

当有多个对象发射信号连接到同一个槽时,如果需要在槽中判断是哪个对象发出的信号,可以结合qobject_cast用以下代码判断:

 QAction *action = qobject_cast<QAction *>(sender());

 if(action)

 {

     loadFile(action->data().toString());

 }

 

非模态窗口:

非模态窗口就是运行在应用程序中,对于其他窗口都独立的窗口,即这个窗口存在的时候可以操作其他窗口。若对话框是通过show()调用的,那么它就是非模态对话框,除非此后又调用setModal()才会让它变成模态对话框。

 

模态对话框:

    与非模态窗口相反,当存在非模态窗口时不能对其他窗口进行操作。对话框通过调用QDialog::exec(),这个函数可以返回一个true(QDialog::Accepted)值和false(QDialog::Rejected)值,这可以提供给用户进行交互。

 

 

QSettings类:

 

QSettings类提供与平台无关的持久性应用程序设置。相当于保存特定应用中的相关信息以及设置,在下次启动时能读回已保存的信息的设置。在不同系统中保存的方式也不同,在Windows中它使用系统注册表,在Unix下是用文本文件保存,在Mac OS X中它会使用Core foundationPreference应用程序变成接口。QSettings把设置的信息储存为键值的形式,以下是代码示例:

 

//保存设置

 

QSettings settings("Software Inc.","Spreadsheet");

 

settings.setValue("geometry",saveGeometry()); //窗口几何形状

 

settings.setValue("recentFiles",recentFiles); //类型是QStringList

 

settings.setValue("showGrid",showGridAction->isChecked()); //窗口部件

 

settings.setValue("autoRecalc",autoRecalculateAction->isChecked());

 

//读设置

 

QSettings settings("Software Inc.","Spreadsheet");

 

restoreGeometry(settings.value("geometry").toByteArray());

 

recentFiles = settings.value("recentFiles").toStringList();

 

updateRecentFileActions();

 

 

 

bool showGrid = settings.value("showGrid").toBool();

 

showGridAction->setChecked(showGrid);

 

bool autoRecalc = settings.value("autoRecalc").toBool();

 

autoRecalculateAction->setChecked(autoRecalc);

 

 

 

多文档:

 

main()函数中,MainWindow的对象是在栈上创建的,当函数结束时MainWindow示例会自动销毁,要想实现多文档,就需要用new创建,MainWindow *mainWin = new MainWindow;使用多文档要注意内存管理的问题,可以在MainWindow构造函数中调用函数setAttribute(Qt::WA_DeleteOnClose);告诉窗口在关闭时删除,多文档的更多用法请查看书和查阅资料。

 

 

 

启动画面:

 

    如果需要在程序运行开始时使用启动画面,可以使用QSplashScreen 类,可以在启动画面上显示一些信息来通知用户有关应用初始化的过程。以下为使用实例:

 

QSplashScreen *splash = new QSplashScreen;

 

splash->setPixmap(QPixmap("./bk.png"));

 

splash->show();

 

//消息显示的位置

 

Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;

 

splash->showMessage("Setting up...",topRight,Qt::black);

 

 

 

MainWindow w;

 

w.show();

 

 

splash->finish(&w);

 

delete splash;

 

 posted on 2020-12-06 15:05  拳击手乌小冬  阅读(97)  评论(0编辑  收藏  举报