QT 显示中文、解决发布乱码、获得系统特定目录、获取文件属性、列表控件、屏幕截图显示保存(定时器)、视频直播、右键菜单

版权声明:墨痕诉清风 https://blog.csdn.net/u012206617/article/details/88405684

显示中文

#include <QTextCodec>

int main()
{
    QApplication a(argc, argv);

    QTextCodec::setCodecForLocade(QTextCodec::codecForName("gb2312"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb2312"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));

    Widget w;
    w.show();
    
    return a.exec();
}

解决发布乱码

复制此文件夹到程序打包目录

整体打包

获得系统特定目录

#include <QDir>
#include <QtDebug>

qDebug() << "homepath" << QDir::homePath();
qDebug() << "rootpath" << QDir::rootPath();
qDebug() << "temppath" << QDir::tempPath();

获取文件属性

#include <QFileDialog>
#include <QFileInfo>
#include <QDir>
#include <QDateTime>

QString sttFileName = QFileDialog::getOpenFileName(this, "Open File"), QDir::homePath();
if (strFileName.isEmpty())
{
    return;
}
QFileInfo info(strFileName);
QString::number(info.size());   //toString("YYYY-MM-dd hh:mm:ss");
QDateTime create = info.created();
QDateTime lastRead = info.lastRead();
//是否为目录
if (info.isDir())
{
}
扫描二维码关注公众号,回复: 5510981 查看本文章

列表控件:QListWidget

添加删除 

#include <QListWidgetItem>

//增加
QString str1 = "AAA";
QListWidgetItem *item = new QListWidgetItem ;
item->setText(str1);
ui->listWidget->addItem(item);

//删除
QListWidgetItem *item = ui->listWidget->takeItem(ui->listWidget->currentRow());
delete item;

//全部删除
int count = 0;
while(1)
{
    QListWidget *item = ui->listWidget->takeItem(count);
    if (item != NULL)
    {
        delete item;
    }
    else
    {
        break;
    }   
}

QListWidget信号

#include <QStringList>
#include <QListWidgetItem>
#include <QDir>
#include <QFileDialog>

//构造函数,添加列表图片
ui->listWidget->setViewMode(QListView::IconMode);


QStringList fileNames = QFileDialog::getOpenFileNames(this, "open files", QDir::currentPath());

if (fileNames.size() == 0)
{
    return;
}
else
{
    for(int i = 0; i < fileNames.size(); i++)
    {
        QListWidget *item = new QListWidget;
        item->setText(fileNames.at(i));
        ui->listWidget->addItem(item);
    }
}

当你的列表有图标时,单击双击会触发消息

Object::connect(ui->listWidget, SIGNAL(itemChanged(QListWidgetItem*), this, SLOT(singleClickedSlot(QListWidgetItem *))));

//单击
void MainWindow::singleClickedSlot(QListWidgetItem *item)
{
    QMessageBox::infomation(NULL, "单击", item->text);
}

屏幕截图显示保存(定时器),并放入剪切板

.h
#include <QTimer>
#include <QPixmap>
#include <QDesktopWidget>

QTimer *timer;
QPixmap pixmap;


//新建按钮
void MainWindow::on_new_clicked()
{
    if (ui->checkBox->isChecked())
    {
        this->hide(); //this->show()
        this->timer = new QTimer;
        QObject::connect(this->timer, SIGNAL(timeout()), SLOT(shotScreenSlot()));
        this->timer->start(ui->spinBox->value()*1000);
    }
    else
    {
        qApp->beep();  //截图
    }
}

//定时器函数
void MainWindow::shotScreenSlot()
{
    this->pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
    ui->screenLabel->setPixmap(this->pixmap.scaled(ui->screenLabel->size()));

    //获取剪切板内容打印
    //QClipboard *clipboard = QApplication::clipboard();
    //QString orginalText = clipboard->text();
    //qDebug << orginalText;

    //获取被剪切的图片显示
    QClipboard *clipboard = QApplication::clipboard();
    clipboard->setPixmap(this->pixmap);

    this->show();
    this->timer->stop();
}

//保存截图到  我的图片
#include <QFileDialog>
#include <QDesktopServices>
#include <QClipboard>   //剪切板
void MainWindow::on_save_clicked()
{
    QString strFileName = QFileDialog::getFileName(this, "save file", QDesktopServices::storageLocation(QDesktopService::PicturesLocation));
    this->pixmap.save(strFileName);
}

视频直播

保存

.h
#include <QTimer>
#include <QPixmap>
#include <QDesktopWidget>

QTimer *timer;
QPixmap pixmap;


//新建按钮
void MainWindow::on_new_clicked()
{
    if (ui->checkBox->isChecked())
    {
        //this->hide(); //this->show()
        this->timer = new QTimer;
        QObject::connect(this->timer, SIGNAL(timeout()), SLOT(shotScreenSlot()));
        this->timer->start(1000/24);
    }
    else
    {
        qApp->beep();  //截图
    }
}

//定时器函数
void MainWindow::shotScreenSlot()
{
    this->pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
    ui->screenLabel->setPixmap(this->pixmap.scaled(ui->screenLabel->size()));

    //获取剪切板内容打印
    //QClipboard *clipboard = QApplication::clipboard();
    //QString orginalText = clipboard->text();
    //qDebug << orginalText;

    //获取被剪切的图片显示
    QClipboard *clipboard = QApplication::clipboard();
    clipboard->setPixmap(this->pixmap);

    //this->show();
    //this->timer->stop();
}

//保存截图到  我的图片
#include <QFileDialog>
#include <QDesktopServices>
#include <QClipboard>   //剪切板
void MainWindow::on_save_clicked()
{
    QString strFileName = QFileDialog::getFileName(this, "save file", QDesktopServices::storageLocation(QDesktopService::PicturesLocation));
    this->pixmap.save(strFileName);
}

播放

.h
#include <QTimer>
#include <QClipboard>
#include <QPixmap>

QPixmap pixmap;
QTimer *timer;



//构造函数
this->timer = new QTimer;
QObject::connect(this->timer, SIGNAL(timeout()), this, SLOT(fetchPictureSlot()));
this->timer->start(200);


//获得图片
void MainWindow::fetchPictureSlot()
{
    QClipboard *board = QApplication::clipboard();
    this->pixmap = board->pixmap();
    ui->playerLabel->setPixmap(this->pixmap.scaked(ui->playerLable->size()));
}

右键菜单

.h
#include <QContextMenuEvent>
#include <QMenu>
#include <QAction>
#include <QCursor>
#include <QProcess>

protected:
    void contextMenuEvent();



//创建右键菜单
void MainWindow::contextMenuEvent()
{
    QMenu *menu = new QMenu;
    QActive *active = new QActive(this);
    QActive *processActive = new QActive(this);

    QObject::connect(action, SIGNAL(triggerd()), this, SLOT(on_save_clicked()));
    QObject::connect(addActive, SIGNAL(triggerd()), this, SLOT(startNotpadSlot()));

    active->setText("Save As");
    processActive->setText("start notepad");

    menu->addActive(action);
    menu->addSeparator();           //中间加一个横杠
    menu->addActive(processActive);    

    menu->exec(QCursor::pos());
}

//另存为
#include <QFileDialog>
#include <QDesktopServices>
#include <QClipboard>   //剪切板
void MainWindow::on_save_clicked()
{
    QString strFileName = QFileDialog::getFileName(this, "save file", QDesktopServices::storageLocation(QDesktopService::PicturesLocation));
    this->pixmap.save(strFileName);
}

//启动一个进程
void MainWindow::startNotpadSlot()
{
    QProcess *process = new QProcess;
    process->start("notpad.exe");
}

猜你喜欢

转载自blog.csdn.net/u012206617/article/details/88405684