QT 显示中文、解决发布乱码、获得系统特定目录、获取文件属性、列表控件、屏幕截图显示保存(定时器)、视频直播、右键菜单
显示中文
#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())
{
}
列表控件: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");
}