zoukankan      html  css  js  c++  java
  • Qt杂项笔记

    记在前面: 以前刚开始的时候, 想实现某某功能, 跑百度谷歌, 查Qt助手, 好不容易实现目标功能; 但当时并没有做任何的笔记; 或者只记录几个比较深刻的知识; 后来要再次实现那些功能, 又得重新花一大半时间去搜索查阅, 真真纠结悲催..@_@

    目的:  就这样子, 写个备忘的笔记, 不时更新, 便于以后检索查阅

    内容:

    1.视图模型中, 设置视图不可编辑 setEditTriggers(QAbstractItemView::NoEditTriggers);

    2.对话框去掉右上角的问号: setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);

    3.对话框加上最小化按钮: setWindowFlags(windowFlags()|Qt::WindowMinimizeButtonHint);

    4.打开文件夹通用对话框: 

    QString dir= QFileDialog::getExistingDirectory(
    this,tr("Open Directory"),
    QString(),
    QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks
    );

    5.打开文件对话框 --可多选:

    QFileDialog fd;
    fd.setFilter("exefile(*.exe *.dll *.sys);;Allfile(*.*)"); //设置文件过滤器
    
    QListView *listView = fd.findChild<QListView*>("listView");
    if (listView)
        listView->setSelectionMode(QAbstractItemView::ExtendedSelection);
    
    if(fd.exec() == QDialog::Accepted)   //如果成功的执行
    {
        QSet<QString> pathSet;
        QString path;
        QStringList strList = modFileLists.stringList();
        strList.append(fd.selectedFiles());
        foreach(path, strList)
        {
            pathSet.insert(path);
        }
        strList.clear();
        foreach(path, pathSet)
        {
            strList.append(path);
        }
    
        modFileLists.setStringList(strList);
    }
    else
        fd.close();

    6.多语言:

    1.pro工程文件里面添加 TRANSLATIONS+=CN.ts
    2.选择Qt Creator环境的菜单栏 工具->外部->Qt语言家->更新翻译
    3.桌面开始菜单里面Qt目录打开 Linguist工具
    4.Linguist工具加载生成好的CN.ts文件
    5.填好翻译, 保存, Release, 就生成好编译后的qm文件
    6.在工程的源文件中, 这样加载qm文件:
      QTranslator translator;
      QLocale locale;
      if(QLocale::Chinese == locale.language())
      {//中文环境
          translator.load("Cn.qm");  //中文
          a.installTranslator(&translator);
      }//否则默认用英文

     7.自定义右键菜单:

    1.widget对象设置 setContextMenuPolicy(Qt::CustomContextMenu)
    2.创建一个QMenu对象, 指定好父类指针
    3.关联widget的customContextMenuRequested(QPoint)信号到自定义的槽
      connect(ui->tbvFileLog,
                  SIGNAL(customContextMenuRequested(QPoint)),
                  this, SLOT(FileLogTbvPopupMenu(QPoint)));
    4.在槽函数里面执行Qmenu对象的exec方法
      exec(QCursor::pos());
    
    补充: QMenu菜单添加菜单项:
      QMenu对象调用addAction方法, 通过信号槽关联这个QAction的点击事件

     8.item view控件设置可多选:

    1.setSelectionMode(QAbstractItemView::MultiSelection);
    2.setSelectionMode(QAbstractItemView::ExtendedSelection);
    区别: 1.不用按ctrl键即可多选; 2按ctrl键多选

     9.item view控件多选后删除

    QModelIndexList indexList = ui->listvFiles->selectionModel()->selectedRows();
    QModelIndex index;
    int i = 0;
    foreach(index, indexList)
    {
        this->modFileLists.removeRow(index.row() - i);
        ++i;
    }

     10.QByteArray存入中文时乱码

    A:
    QByteArray bytes;
    bytes.append(this->modFileLists.data(this->modFileLists.index(i), Qt::DisplayRole).toString()); //乱码
    
    B:
    QByteArray bytes;
    bytes.append(this->modFileLists.data(this->modFileLists.index(i), Qt::DisplayRole).toString().toLocal8Bit()); //正常

    11.Item View控件设置属性设置

    setSelectionBehavior(QAbstractItemView::SelectRows);   //选择整行模式
    horizontalHeader()->setStretchLastSection(true); //设置最后一列自动拉伸
    verticalHeader()->hide(); //隐藏行号列
    setAlternatingRowColors(true); //设置行颜色属性, 比较美观

     12.QByteArray转char*

    调用QByteArray的data方法即可

     13.QTableView改变被选择上的项颜色, qss样式语法:

    #tbvXXX::item:selected {
        background-color: rgb(170, 0, 0);
    }
    //把QTableView控件的焦点去掉, 这样选择的时候就不会有那个难看的虚框
    //QTableView对象调用setFocusPolicy(Qt::NoFocus);

     14.Qt托盘

    //使用QSystemTrayIcon类
    QSystemTrayIcon *tray;      //托盘
    QMenu *meuTray;             //托盘菜单
    QAction *acTrayQuit;        //托盘退出
    
    this->tray = new QSystemTrayIcon(this);
    this->meuTray = new QMenu(this);
    this->acTrayQuit = this->meuTray->addAction(QIcon(":/res/image/quit.png"), tr("Quit"));
    connect(this->acTrayQuit, SIGNAL(triggered()), this, SLOT(OnExit()));
    
    this->tray->setContextMenu(this->meuTray);
    this->tray->setIcon(QIcon(":/res/image/tray.ico"));
    this->tray->show();
    
    connect(this->tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(OnTrayActivated(QSystemTrayIcon::ActivationReason)));


    voidUpdateTerminal::OnTrayActivated(QSystemTrayIcon::ActivationReasonreason)
    {
    switch(reason)
    {
    caseQSystemTrayIcon::DoubleClick:
    if(this->isHidden())
    this->show();
    break;
    }
    }
    
    
    
  • 相关阅读:
    uva-11361
    HDU
    LCS
    CodeForces
    linux 有趣的命令组合
    opencv识别封闭区域 并标记该区域
    宜出行人口热力图
    美团酒店
    赶集租房
    发送企业微信应用通知
  • 原文地址:https://www.cnblogs.com/jianc/p/2932965.html
Copyright © 2011-2022 走看看