在Qt编写的程序中打开文件夹

43 篇文章 14 订阅

转自:http://blog.csdn.net/yangxiao_0203/article/details/6634293

我们知道在dos命令行中可以用"start explorer 地址"的格式打开指定的文件夹。在编程中使用system函数然后再调用前面那句,虽然可以打开指定文件夹,但是总会有dos的黑框闪过,很不美观。

下面讲讲在Qt中我使用的方法。以打开程序当前目录为例。这里要用到QProcess类中的静态函数startDetached:

    QString path=QDir::currentPath();//获取程序当前目录
    path.replace("/","\\");//将地址中的"/"替换为"\",因为在Windows下使用的是"\"。
    QProcess::startDetached("explorer "+path);//打开上面获取的目录

注意,在QProcess类中还有个start()函数,也可以用于启动程序。但是在这里不能用。因为explorer是系统正在运行的程序,而start()函数不会重复运行正在运行的程序,也就无法打开文件夹了。

再补充一种方法:

QDesktopServices::openUrl(QUrl("file:///C:/Documents and Settings/All Users", QUrl::TolerantMode));

QDesktopServices::openUrl(QUrl::fromLocalFile("..."));

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在Qt6安装ZBar库。可以通过以下步骤安装: 1. 下载并安装ZBar库。可以从ZBar官网下载最新版本的库:https://sourceforge.net/projects/zbar/files/zbar/0.23.1/ 2. 解压下载的文件,然后进入解压后的文件。 3. 打开终端,输入以下命令进行编译和安装: ``` ./configure make sudo make install ``` 4. 安装完成后,可以在终端输入“zbarcam”命令测试ZBar是否已经安装成功。 接下来,可以使用Qt6的QCamera和QCameraViewfinder类访问安卓设备的摄像头,并利用ZBar库解码二维码。以下是一个简单的示例程序: ```cpp #include <QtWidgets> #include <QCamera> #include <QCameraViewfinder> #include <QCameraImageCapture> #include <zbar.h> class CameraWidget : public QWidget { Q_OBJECT public: CameraWidget(QWidget *parent = 0); ~CameraWidget(); private slots: void captureImage(); void displayImage(int, QImage); void decodeImage(QImage); private: QCamera *camera; QCameraViewfinder *viewfinder; QCameraImageCapture *imageCapture; QPushButton *captureButton; QLabel *decodedDataLabel; zbar::ImageScanner scanner; }; CameraWidget::CameraWidget(QWidget *parent) : QWidget(parent) { viewfinder = new QCameraViewfinder(this); viewfinder->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); captureButton = new QPushButton(tr("Capture"), this); captureButton->setEnabled(false); decodedDataLabel = new QLabel(this); decodedDataLabel->setWordWrap(true); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(viewfinder); mainLayout->addWidget(captureButton); mainLayout->addWidget(decodedDataLabel); camera = new QCamera(this); camera->setViewfinder(viewfinder); imageCapture = new QCameraImageCapture(camera); camera->setCaptureMode(QCamera::CaptureStillImage); camera->start(); connect(imageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage))); connect(captureButton, SIGNAL(clicked()), this, SLOT(captureImage())); scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1); connect(this, SIGNAL(imageDecoded(QImage)), this, SLOT(decodeImage(QImage))); } CameraWidget::~CameraWidget() { delete camera; delete imageCapture; delete viewfinder; delete captureButton; delete decodedDataLabel; } void CameraWidget::captureImage() { imageCapture->capture(); } void CameraWidget::displayImage(int, QImage image) { emit imageDecoded(image); } void CameraWidget::decodeImage(QImage image) { zbar::Image zbarImage(image.width(), image.height(), "Y800", image.bits(), image.width() * image.height()); scanner.scan(zbarImage); QString decodedData; for(zbar::Image::SymbolIterator symbol = zbarImage.symbol_begin(); symbol != zbarImage.symbol_end(); ++symbol) { decodedData += QString::fromStdString(symbol->get_data()) + "\n"; } if(decodedData.isEmpty()) { decodedDataLabel->setText(tr("No barcode detected")); } else { decodedDataLabel->setText(decodedData); } } int main(int argc, char *argv[]) { QApplication a(argc, argv); CameraWidget cameraWidget; cameraWidget.show(); return a.exec(); } #include "main.moc" ``` 这个程序创建一个CameraWidget,其包含一个QCameraViewfinder和一个QPushButton。当用户点击按钮时,程序使用QCameraImageCapture类捕获图像,并将其显示在QLabel上。然后,程序使用ZBar库解码图像的二维码,并将解码结果显示在另一个QLabel上。 注意,这个程序还需要在.pro文件添加以下内容: ``` QT += multimedia multimediawidgets LIBS += -lzbar ``` 这将确保程序能够正确链接ZBar库,并使用Qt6的多媒体和多媒体小部件模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值