记在前面: 以前刚开始的时候, 想实现某某功能, 跑百度谷歌, 查Qt助手, 好不容易实现目标功能; 但当时并没有做任何的笔记; 或者只记录几个比较深刻的知识; 后来要再次实现那些功能, 又得重新花一大半时间去搜索查阅, 真真纠结悲催..@_@ 目的: 就这样子, 写个备忘的笔记, 不时更新, 便于以后检索查阅 内容: 1.视图模型中, 设置视图不可编辑 setEditTriggers(QAbstractItemView::NoEditTriggers); 2.对话框去掉右上角的问号: setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint); 3.对话框加上最小化按钮: setWindowFlags(windowFlags()|Qt::WindowMinimizeButtonHint);
4.打开文件夹通用对话框: QString dir= QFileDialog::getExistingDirectory(
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); //选择整行模式 12.QByteArray转char* 调用QByteArray的data方法即可 13.QTableView改变被选择上的项颜色, qss样式语法: #tbvXXX::item:selected { background-color: rgb(170, 0, 0); } 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))); |
|