QT学习笔记

一、警告\错误处理

1、汉字显示乱码\警告C4819:该文件包含不能在当前代码页(936)中标识的字符

工具-选项-行为-文件编码,默认编码选择utf-8,utf-8 BOM 选择 “如果编码是utf-8则添加”,文件头添加语句  #pragma execution_character_set("utf-8")

2、对象被多次指定

pro文件中多次添加同意文件,pro中删除多次添加的文件,执行qmake后重新构建

 

二、数据类型转换

1、带汉字的Qstring 转 char*

//解决汉字乱码问题

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

//转换步骤

char *fwchar = NULL;

QByteArray ba_fw = QString fw_version.toLocal8Bit(); \\ QString转QByteArray

 

fwchar = (char *)malloc(ba_fw.length() + 1); \\ char* 分配空间

 

memcpy(fwchar, ba_fw.data(), ba_fw.length());\\ QByteArray复制到char*

 

fwchar[ba_fw.length()] = '\0';

2、QString 转 int,随意进制

Int = QString.toInt(nullptr, 16); \\ 数字代表进制,16, 10 ,8 等

3、QString 转 LPCWSTR

Std::wstring = Qstring.toStdWString();

LPCWSTR = Std::wstring.c_str();

4、//TCHAR 2 QString

str = QString::fromWCharArray(acDevPath[i]);

5// QString to LPCWSTR

        wstr_fileName = fileName.toStdWString();

6//QString to long

        offset_onLine = offset_in.toLong();

三、ListWidget 控件应用

1、信号/槽

单击选择\双击选择

2、选择模式控制

ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);// CTRLSHIFT时可实现多选

 

public:

    enum SelectionMode {

        NoSelection,

 

 

不能选中

        SingleSelection,

 

 

只能单选

        MultiSelection,

 

 

只能多选

        ExtendedSelection,

 

 

CTRL或SHIFT时可实现多选

        ContiguousSelection

 

 

选一片,连续选择

    };

    Q_ENUM(SelectionMode)

 

//ListWidget 多选模式获取行号和所选行内容

void MainWindow::choice_Device()

{

    QList<QListWidgetItem*>items=ui->listWidget->selectedItems();

    count=items.count();

    ui->textBrowser->append("count = " + QString::number(count));

    if(count == 0) {

        QMessageBox mesg;

        mesg.warning(this, "warning!", "未选择设备!");

        return;

    }

    for(int i=0;i< count;i++)

        {

           currenRow[i] = ui->listWidget->row(items.at(i));//获取选中的行

           ui->textBrowser->append(tr("currenRow[%1] = %2").arg(i) .arg(currenRow[i]));

           QListWidgetItem*item=items.at(i);

           QString name=item->text();//获取内容

           ui->textBrowser->append(name);

        }

}

3、TableWidget控件

//设置列数

    ui->tableWidget->setColumnCount(1);

    //设置行数

    ui->tableWidget->setRowCount(16);

    //设置默认部分大小

    ui->tableWidget->horizontalHeader()->setDefaultSectionSize(150);

    //设置行填充

    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

    //设置表头不可被选中

    ui->tableWidget->horizontalHeader()->setSectionsClickable(false);

    //消除表格控件的边框

    ui->tableWidget->setFrameShape(QFrame::NoFrame);

    //不显示网格

    ui->tableWidget->setShowGrid(true);

    //设置表头宽度

    ui->tableWidget->horizontalHeader()->setFixedWidth(341);

    //设置表头内容

    QStringList Header;

    Header << "设备列表";

    ui->tableWidget->setHorizontalHeaderLabels(Header);

    //内容不可编辑

    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

    //设置选中背景色

    ui->tableWidget->setStyleSheet("selection-background-color:skyblue;");

    //CTRL控制多选

    ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

    //设置是否显示滚动条

    ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

    //根据内容自动调整列宽

    ui->tableWidget->resizeColumnsToContents();

    ui->tableWidget->setItem(i, 0, new QTableWidgetItem(str));

    //单列时滚动条随点滚动, ScrollPerItem 随项目滚动

    ui->tableWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);

    //设置水平、垂直滚动栏样式

    ui->tableWidget->horizontalScrollBar()->setStyleSheet("QScrollBar{background:transparent; height:10px;}"

        "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"

        "QScrollBar::handle:hover{background:gray;}"

        "QScrollBar::sub-line{background:transparent;}"

        "QScrollBar::add-line{background:transparent;}");

    ui->tableWidget->verticalScrollBar()->setStyleSheet("QScrollBar{background:transparent; width: 10px;}"

        "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"

        "QScrollBar::handle:hover{background:gray;}"

        "QScrollBar::sub-line{background:transparent;}"

        "QScrollBar::add-line{background:transparent;}");

4、LineEdit 控件

//只允许输入1-0xFFFF,大小写字母无限制,最长4

//A-F1-9 只能输入大写字母

QRegExp regExp("(0x[0-9a-fA-F]{1,4})|(0X[0-9a-fA-F]{1,4})");

ui->lineEdit_PID->setValidator(new QRegExpValidator(regExp, this));

 

//限制输入int的范围

QValidator *validator = new QIntValidator(0, 524288, this);

ui->fw_up_lineEdit->setValidator(validator);

 

//限制输入长度 16byte

ui->lineEdit_P_DESC->setMaxLength(8);

//显示提示信息

ui->lineEdit_PID->setToolTip("0x0001-0xFFFF");

5、日志

#include <QMessageLogContext>

//1、注册MessageHandler

qInstallMessageHandler(outputMessage);

//2、自定义日志格式,日志级别、日志打印时间、日志所在行、日志信息

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)

{

    static QMutex mutex;

    mutex.lock();

    QString text;

    switch (type)

    {

    case QtDebugMsg:

        text = QString("Debug: ");

        break;

 

    case QtWarningMsg:

        text = QString("Warning: ");

        break;

 

    case QtCriticalMsg:

        text = QString("ERR: ");

        break;

 

    case QtFatalMsg:

        text = QString("Fatal: ");

    }

    QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);

    QString current_date_time = QDateTime::currentDateTime().toString(" yyyy-MM-dd hh:mm:ss ");

    QString current_date = QString("(%1)").arg(current_date_time);

#ifndef RELEASE

    QString message = QString("%1    %2 %3 %4").arg(current_date).arg(text).arg(context_info).arg(msg);

#else

    QString message = QString("%1    %2 %3").arg(text).arg(current_date).arg(msg);

#endif

    QFile file("log.txt");

    file.open(QIODevice::WriteOnly | QIODevice::Append);

    QTextStream text_stream(&file);

    text_stream << message << "\r\n";

    file.flush();

    file.close()

    mutex.unlock();

}

 

6、杂项

//设置窗口标题

this->setWindowTitle(QString("参数输入"));

//设置控件是否可点击

ui->toolButton->setDisabled(true);

ui->comboBox->setEnabled(true);

//WCHAR * 赋值

WCHAR *devName = (WCHAR *)L"\\\\?\\usbstor";

 

 

 

 

一、警告\错误处理

1、汉字显示乱码\警告C4819:该文件包含不能在当前代码页(936)中标识的字符

工具-选项-行为-文件编码,默认编码选择utf-8,utf-8 BOM 选择 “如果编码是utf-8则添加”,文件头添加语句  #pragma execution_character_set("utf-8")

2、对象被多次指定

pro文件中多次添加同意文件,pro中删除多次添加的文件,执行qmake后重新构建

 

二、数据类型转换

1、带汉字的Qstring 转 char*

//解决汉字乱码问题

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

//转换步骤

char *fwchar = NULL;

QByteArray ba_fw = QString fw_version.toLocal8Bit(); \\ QString转QByteArray

 

fwchar = (char *)malloc(ba_fw.length() + 1); \\ char* 分配空间

 

memcpy(fwchar, ba_fw.data(), ba_fw.length());\\ QByteArray复制到char*

 

fwchar[ba_fw.length()] = '\0';

2、QString 转 int,随意进制

Int = QString.toInt(nullptr, 16); \\ 数字代表进制,16, 10 ,8 等

3、QString 转 LPCWSTR

Std::wstring = Qstring.toStdWString();

LPCWSTR = Std::wstring.c_str();

4、//TCHAR 2 QString

str = QString::fromWCharArray(acDevPath[i]);

5// QString to LPCWSTR

        wstr_fileName = fileName.toStdWString();

6//QString to long

        offset_onLine = offset_in.toLong();

三、ListWidget 控件应用

1、信号/槽

单击选择\双击选择

2、选择模式控制

ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);// CTRLSHIFT时可实现多选

 

public:

    enum SelectionMode {

        NoSelection,

 

 

不能选中

        SingleSelection,

 

 

只能单选

        MultiSelection,

 

 

只能多选

        ExtendedSelection,

 

 

CTRL或SHIFT时可实现多选

        ContiguousSelection

 

 

选一片,连续选择

    };

    Q_ENUM(SelectionMode)

 

//ListWidget 多选模式获取行号和所选行内容

void MainWindow::choice_Device()

{

    QList<QListWidgetItem*>items=ui->listWidget->selectedItems();

    count=items.count();

    ui->textBrowser->append("count = " + QString::number(count));

    if(count == 0) {

        QMessageBox mesg;

        mesg.warning(this, "warning!", "未选择设备!");

        return;

    }

    for(int i=0;i< count;i++)

        {

           currenRow[i] = ui->listWidget->row(items.at(i));//获取选中的行

           ui->textBrowser->append(tr("currenRow[%1] = %2").arg(i) .arg(currenRow[i]));

           QListWidgetItem*item=items.at(i);

           QString name=item->text();//获取内容

           ui->textBrowser->append(name);

        }

}

3、TableWidget控件

//设置列数

    ui->tableWidget->setColumnCount(1);

    //设置行数

    ui->tableWidget->setRowCount(16);

    //设置默认部分大小

    ui->tableWidget->horizontalHeader()->setDefaultSectionSize(150);

    //设置行填充

    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

    //设置表头不可被选中

    ui->tableWidget->horizontalHeader()->setSectionsClickable(false);

    //消除表格控件的边框

    ui->tableWidget->setFrameShape(QFrame::NoFrame);

    //不显示网格

    ui->tableWidget->setShowGrid(true);

    //设置表头宽度

    ui->tableWidget->horizontalHeader()->setFixedWidth(341);

    //设置表头内容

    QStringList Header;

    Header << "设备列表";

    ui->tableWidget->setHorizontalHeaderLabels(Header);

    //内容不可编辑

    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

    //设置选中背景色

    ui->tableWidget->setStyleSheet("selection-background-color:skyblue;");

    //CTRL控制多选

    ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

    //设置是否显示滚动条

    ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

    //根据内容自动调整列宽

    ui->tableWidget->resizeColumnsToContents();

    ui->tableWidget->setItem(i, 0, new QTableWidgetItem(str));

    //单列时滚动条随点滚动, ScrollPerItem 随项目滚动

    ui->tableWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);

    //设置水平、垂直滚动栏样式

    ui->tableWidget->horizontalScrollBar()->setStyleSheet("QScrollBar{background:transparent; height:10px;}"

        "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"

        "QScrollBar::handle:hover{background:gray;}"

        "QScrollBar::sub-line{background:transparent;}"

        "QScrollBar::add-line{background:transparent;}");

    ui->tableWidget->verticalScrollBar()->setStyleSheet("QScrollBar{background:transparent; width: 10px;}"

        "QScrollBar::handle{background:lightgray; border:2px solid transparent; border-radius:5px;}"

        "QScrollBar::handle:hover{background:gray;}"

        "QScrollBar::sub-line{background:transparent;}"

        "QScrollBar::add-line{background:transparent;}");

4、LineEdit 控件

//只允许输入1-0xFFFF,大小写字母无限制,最长4

//A-F1-9 只能输入大写字母

QRegExp regExp("(0x[0-9a-fA-F]{1,4})|(0X[0-9a-fA-F]{1,4})");

ui->lineEdit_PID->setValidator(new QRegExpValidator(regExp, this));

 

//限制输入int的范围

QValidator *validator = new QIntValidator(0, 524288, this);

ui->fw_up_lineEdit->setValidator(validator);

 

//限制输入长度 16byte

ui->lineEdit_P_DESC->setMaxLength(8);

//显示提示信息

ui->lineEdit_PID->setToolTip("0x0001-0xFFFF");

5、日志

#include <QMessageLogContext>

//1、注册MessageHandler

qInstallMessageHandler(outputMessage);

//2、自定义日志格式,日志级别、日志打印时间、日志所在行、日志信息

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)

{

    static QMutex mutex;

    mutex.lock();

    QString text;

    switch (type)

    {

    case QtDebugMsg:

        text = QString("Debug: ");

        break;

 

    case QtWarningMsg:

        text = QString("Warning: ");

        break;

 

    case QtCriticalMsg:

        text = QString("ERR: ");

        break;

 

    case QtFatalMsg:

        text = QString("Fatal: ");

    }

    QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);

    QString current_date_time = QDateTime::currentDateTime().toString(" yyyy-MM-dd hh:mm:ss ");

    QString current_date = QString("(%1)").arg(current_date_time);

#ifndef RELEASE

    QString message = QString("%1    %2 %3 %4").arg(current_date).arg(text).arg(context_info).arg(msg);

#else

    QString message = QString("%1    %2 %3").arg(text).arg(current_date).arg(msg);

#endif

    QFile file("log.txt");

    file.open(QIODevice::WriteOnly | QIODevice::Append);

    QTextStream text_stream(&file);

    text_stream << message << "\r\n";

    file.flush();

    file.close()

    mutex.unlock();

}

 

6、杂项

//设置窗口标题

this->setWindowTitle(QString("参数输入"));

//设置控件是否可点击

ui->toolButton->setDisabled(true);

ui->comboBox->setEnabled(true);

//WCHAR * 赋值

WCHAR *devName = (WCHAR *)L"\\\\?\\usbstor";

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值