Qt小随笔1

目录:

1、设置控件的鼠标

2、打开当前可执行文件的目录

3、Qt中获取系统时间

4、QString按特定字符进行分割字符串(split)

5、Qt中用类QSettings读写配置文件ini

6、Unicode字符和字符串显示为中文

7、Qt模态与非模态对话框

8、Qt调试后右下角的选项卡恢复到原来

 

1、设置控件的鼠标

当要实现鼠标进入某个控件区域时,鼠标箭头变为手型效果,可以用函数QWidget::setCursor(),其中该函数原型如下所示:void setCursor(const QCursor &);如:

button->setCursor(QCursor(Qt::PointingHandCursor));

如果没有设置或者调用了unsetCursor(),则使用父类的鼠标样式

2、打开当前可执行文件的目录

#include <QDesktopServices>
#include <QUrl>
void Dialog::openCurDir()
{
    QDesktopServices::openUrl(QUrl::fromLocalFile( 
    QCoreApplication::applicationDirPath()));
}

QDesktopServices::openUrl()表示打开指定QString路径的文件夹,QUrl可以通过QUrl::fromLocalFile(QString)转换

QCoreApplication::applicationDirPath()表示获取当前可执行exe所在的目录路径

3、Qt中获取系统时间

Qt中获取系统时间可以用类QDateTime的一个静态函数currentTime(),

qDebug() << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss dddd");

//三秒钟后执行退出(仅执行一次)singleShot仅执行一次
QTimer::singleShot(3000, qApp, SLOT(quit()));

4、QString按特定字符进行分割字符串(split)

QString str = "ab,bb,,cc";
    QStringList strList = str.split(",", QString::SkipEmptyParts);
    foreach (auto& item, strList) {
        qDebug() << item;
    }

5、Qt中用类QSettings读写配置文件ini

QSettings有限制,只能存储段-键值对模式,如果需要更复杂格式,需要进行嵌套或者选择xml,json等配置文件

#include <QSettings>
void Dialog::on_btnWriteSettings_clicked()
{
    //创建和打开配置文件
    QSettings* settingWrite = new QSettings("setting.ini", QSettings::IniFormat); //IniFormat是配置文件,NativeFormat是注册表

    //写配置文件
    settingWrite->setValue(QString("段1/key1"),QString("这是段1的值1"));
    settingWrite->setValue(QString("段1/key2"),QString("这是段1的值2"));
    settingWrite->setValue(QString("段2/key1"),QString("这是段2的值1"));

    //释放内存
    delete settingWrite;
    settingWrite = nullptr;
}

void Dialog::on_btnReadSettings_clicked()
{
    //创建和打开配置文件
    QSettings* settingRead = new QSettings("setting.ini", QSettings::IniFormat);

    //读配置文件
    auto section1Val = settingRead->value(QString("段1/key1")).toString();
    qDebug() << "section1Value1:" <<section1Val;
    ui->labelKey->setText("段1/key1");
    ui->editValue->setText(section1Val);

    //释放内存
    delete settingRead;
    settingRead = nullptr;
}

6、Unicode字符和字符串显示为中文

qt中如果输出一个中文字符,默认输出来的是unicode,如

const QString title = {"日一二三四五六"};
    for(int i = 0; i < title.count(); ++ i)
    {
        qDebug() << title[i];
    }

效果如:

 

 如果要输出为中文,需要调用QString()

const QString title = {"日一二三四五六"};
    for(int i = 0; i < title.count(); ++ i)
    {
        qDebug() << QString(title[i]);
    }

效果如:

 

 如果要把BYTE转为中文

#include <QString>
#include <QDebug>
 
QString unicode2Chinese(const BYTE *byteArr,const quint16 size)
{
    /*Unicode字符串显示中文,按存储位置小端序存储*/
    QChar *pch=new QChar[size/2];
    memset(pch,0,size/2);
    memcpy(pch,byteArr,size);
    QString txt(pch,size/2);
    return txt;
}
 
void Widget::on_pushButton_2_clicked()
{
    /*单个Unicode字符显示中文*/
    QChar ch1=0x5b89;
    qDebug()<<QString(ch1);
 
    /*Unicode字符串显示中文,按存储位置小端序存储*/
    BYTE byteArr[]={0x33,0x00,0x36,0x00,0x30 ,0x00 ,0x89 ,0x5B ,0x68 ,0x51 ,0x4F ,0x6D ,0xC8 ,0x89 ,0x68 ,0x56 ,0x0B ,0x4E ,0x7D ,0x8F};
    QString fileName=unicode2Chinese(byteArr,sizeof(byteArr));
    qDebug ()<<fileName;
}

7、Qt模态与非模态对话框

默认情况下Qt的对话框为非模态,及Qt::NonModal

调用函数函数QWidget::setWindowsModality(Qt::WindowModality windowModality)设置显示窗口类型,其中Qt::WindowModality windowModality取值如下:

Qt::NonModal 不阻塞(非模态对话框)

Qt::WindowModal 阻塞父窗口,所有祖先窗口及其子窗口(半模态对话框)(没特殊要求的话,一般用这个)

Qt::ApplicationModal 阻塞整个应用程序(模态对话框)

模态对话框调用

QDialog* dlg = new QDialog(this);
    dlg->resize(500,300);
    dlg->setWindowTitle("模态对话框");
    dlg->setWindowModality(Qt::WindowModal);
    dlg->show();

8、Qt调试后右下角的选项卡恢复到原来

多按几次esc就可以关闭这个调试栏,恢复到原来的选项卡

posted @ 2023-01-19 16:05  unicornsir  阅读(45)  评论(0编辑  收藏  举报