龙空技术网

QT学习笔记二 之 导航栏(运行第三方程序和获取图标)

孚梗罡 393

前言:

现在同学们对“jquerytooltip颜色”大概比较关心,同学们都想要剖析一些“jquerytooltip颜色”的相关知识。那么小编在网摘上搜集了一些关于“jquerytooltip颜色””的相关知识,希望我们能喜欢,你们快快来了解一下吧!

继续我们的左侧导航栏/主按钮栏,随便叫啥吧,这里主要用的是QDockWidget。

-> 第一次惯例: 介绍

介绍下QDockWidget是可以停靠在主窗口(QMainWindows->CentralWidget)四周或者悬浮的特殊窗体,可停靠区域如下图(来自QT说明文档)

setFeatures()设置特性(关闭,移动,悬浮等),

setAllowedAreas()设置可停靠区域(上下左右和全部区域),前提必须要设置特性为可移动。

之后在MainWindows里添加即可addDockWidget(Qt::LeftDockWidgetArea, mLeftItemsWidget);

-> 主题

目标:允许用户拖拽或添加其他应用程序或文件等等并点击打开,如下图:

新建类leftItemsWidget继承QDockWidget, 特别注意Q_OBJECT,文档中强调使用信号槽或者其他meta-object就must必须放置Q_OBJECT

class leftItemsWidget : public QDockWidget{  Q_OBJECT  QGridLayout * gridLayout;  const int BTNSIZE = 48;//按钮大小  const int X = 2;//x轴原点间隔  const int Y = 25;//Y轴原点距离  const int GAP_Y = 2;//按钮间间隔  int btnsCount=0;//统计按钮数量,计算位置  void add(const QString & name, const QIcon & icon, const QString & whatisthis="");//添加按钮private slots:  void onClicked(bool b);//按钮点击protected:  void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;//重写拽入后释放  void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;//重写拽入}

在构造函数里固定宽度,并设置Dock特性,同时设置允许拖拽

leftItemsWidget::leftItemsWidget(QWidget *parent) :QDockWidget(parent){  this->setFixedWidth(52);//固定宽度  this->setAcceptDrops(true);//允许拖拽  this->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);  this->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);}

实现拖入代码, DropAction分为Qt::LinkAction,Qt::MoveAction,Qt::CopyAction等

void leftItemsWidget::dragEnterEvent(QDragEnterEvent *event){  event->setDropAction(Qt::LinkAction);//设置为link  event->accept();//接受}void leftItemsWidget::dropEvent(QDropEvent *event){  QStringList linkes = event->mimeData()->text().split("\n");//获取数据  for(int i=0; i<linkes.size(); i++)  {    addSource(linkes.at(i));//这个解析路径后获取各文件图标并添加按钮  }}

传入的路径都为";,在获取图标时但Mac和windows稍微有差别

void leftItemsWidget::addSource(const QString & sourcePath){  QString source;  if(sourcePath.startsWith(";))  {#ifdef Q_OS_MAC  source = sourcePath.last(sourcePath.count()-7);//mac文件路径需要最前面的/#else  source = sourcePath.last(sourcePath.count()-8);//windows不需要#endif  }  QFileInfo filetmp(source);  QFileIconProvider iconProvider;  QIcon icon = iconProvider.icon(filetmp);//获取文件或应用程序的图标  add(filetmp.fileName(), icon, sourcePath);//添加按钮展示}

iconProvider.icon(filetmp)可以继续获取各种尺寸,如iconProvider.icon(filetmp).pixmap(32,32);

void leftItemsWidget::add(const QString & name, const QIcon & icon, bool group, const QString & whatisthis){  QPushButton * btn = new QPushButton(this);  btn->setWhatsThis(whatisthis);//设置what'sthis 帮助  btn->setMinimumSize(BTNSIZE,BTNSIZE);//设置大小  btn->setMaximumSize(BTNSIZE,BTNSIZE);  btn->setIcon(icon);//设置图标  btn->setIconSize(QSize(BTNSIZE,BTNSIZE));//设置图标尺寸  btn->show();//显示,必须的  btn->setStyleSheet("QPushButton{color: rgb(255, 255, 255);border-color: rgb(255, 255, 255);border-style:solid;}""QToolTip{color:rgb(0,0,0);font-size:13px}");//设置按钮颜色等,tooltip颜色和字体大小  connect(btn, SIGNAL(clicked(bool)), this, SLOT(onClicked(bool)));//连接信号槽  btn->setGeometry(X, Y+btnsCount*(GAP_Y+BTNSIZE), BTNSIZE,BTNSIZE);//设置位置  btnsCount++;  btn->setToolTip(name);//设置当鼠标停靠时显示的说明信息}

按钮点击时打开文件或运行应用程序

void leftItemsWidget::onClicked(bool b){  QPushButton * curr = (QPushButton*)(QObject::sender());//获取信号源,也就是哪个按钮被点击了  QString ss = curr->whatsThis();  bool b = QDesktopServices::openUrl(QUrl(ss));//ss需为绝对路径  qDebug()<<QString("%1 : %2")ss, b?"Success":"Error");;}

打开应用程序也可使用

非阻塞void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)阻塞int QProcess::execute(const QString &program, const QStringList &arguments = {})等待结束并返回结果。

-> 其他

当然可以如上图片增加添加按钮,允许用户选择,通过QFileDialog::getOpenFileName打开选择文件对话框,需注意对话框里的多个filter是双逗号分割的,如"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)" ---来自QT帮助文档

标签: #jquerytooltip颜色