QT高级编程学习笔记(1)

1.关于EXE路径的操作。

QString applicationPathOf(const QString &path)
{

QDir dir(QApplication::applicationDirPath());

       //exe如果在debug或者release中,dirName()是dir最末端文件夹名称QString类型,cdUp()相当于cd..  cd()相当于cd;

if (dir.dirName().toLower() =="debug" ||
    dir.dirName().toLower() == "release")
dir.cdUp();   //返回上一级
if (!path.isEmpty())

dir.cd(path);

        //该方法返回QDir所关联的目录的实际绝对路径,如果为符号链接的话,返回符号链接所指向的路径,在不支持符号链接的系统上或关联目录非符号链接,则该方法返回内容,(主要为了跨平台linux)

return dir.canonicalPath()

}

2.如何继承QAction类:

class JingleAction : public QAction
{
    Q_OBJECT

//explicit防止重载的构造函数之间隐式的转换,通过默认初始化列表来实现QAction基本功能实现,在构造函数内实现扩展的内容。
public:
    explicit JingleAction(QObject *parent) : QAction(parent) {}
    explicit JingleAction(const QString &text, QObject *parent)
        : QAction(text, parent) {}
    explicit JingleAction(const QIcon &icon, const QString &text,
                          QObject *parent)
        : QAction(icon, text, parent) {}
    explicit JingleAction(const QString &jingleFile,
                          const QString &text, QObject *parent);
    explicit JingleAction(const QString &jingleFile,
            const QIcon &icon, const QString &text, QObject *parent);


    QString jingleFile() const { return m_jingleFile; }
    void setJingleFile(const QString &jingleFile);


    static void setMute(bool mute) { s_mute = mute; }


private slots:
    void play();


private:
    static bool s_mute;


    QString m_jingleFile;

};

//重写的构造函数。

JingleAction::JingleAction(const QString &jingleFile,

        const QIcon &icon, const QString &text, QObject *parent)
    : QAction(icon, text, parent)
{
    setJingleFile(jingleFile);   //设置声音文件

}

//实现QAction点击绑定play()函数,点击发声音;

void JingleAction::setJingleFile(const QString &jingleFile)

{
    if (!m_jingleFile.isEmpty())
        disconnect(this, SIGNAL(triggered(bool)), this, SLOT(play()));
    m_jingleFile = jingleFile;
    if (!m_jingleFile.isEmpty())
        connect(this, SIGNAL(triggered(bool)), this, SLOT(play()));

}


void JingleAction::play()
{
    if (!s_mute && !m_jingleFile.isEmpty())
        QSound::play(m_jingleFile);
}


你可能感兴趣的:(QT高级编程学习笔记(1))