现在的位置: 首页 > 综合 > 正文

Qt小随笔

2018年04月19日 ⁄ 综合 ⁄ 共 3869字 ⁄ 字号 评论关闭

记得以前并没有做笔记的习惯。 或者只记录几个比较深刻的知识后来要再次实现那些功能又得重新花一大半时间去搜索查阅。挺烦人的。

 

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

 

内容:

 

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.关联widgetcustomContextMenuRequested(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键即可多选; 2ctrl键多选

 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.QByteArraychar*

 

调用QByteArraydata方法即可

 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;

    }

}

 

抱歉!评论已关闭.