Qt杂项(转)

原文博客地址
1.模型视图中设置模式不可编辑 :

setEditTrigger(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*:

调用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;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值