Qt总结(整理)
来源:互联网 发布:js json特殊字符处理 编辑:程序博客网 时间:2024/06/05 18:00
1、获取屏幕的工作区的大小
- {
- //获取屏幕分辨率
- qDebug()<< "screen width:"<<QApplication::desktop()->width();
- qDebug()<< "screen height:"<<QApplication::desktop()->height();
- //下面方法也可以
- qDebug()<< "screen width:"<<qApp->desktop()->width();
- qDebug()<< "screen height:"<<qApp->desktop()->height();
- //获取客户使用区大小
- qDebug()<< "screen avaliabe width:"<<QApplication::desktop()->availableGeometry().width();
- qDebug()<< "screen avaliabe heigth:"<<QApplication::desktop()->availableGeometry().height();
- //获取应用程序矩形大小
- qDebug()<< "application avaliabe width:"<<QApplication::desktop()->screenGeometry().width();
- qDebug()<< "application avaliabe heigth:"<<QApplication::desktop()->screenGeometry().height();
- }
移动到窗口中央:
move((QApplication::desktop()->width() - width())/2, (QApplication::desktop()->height() - height())/2);
全屏设置:
setWindowState(Qt::WindowFullScreen);
2、设置应用程序图标
在Windows平台为应用程序设置图标:
第一步:创建一个包含图标图像的ICO文件,并将其保存在源文件目录下,可命名为myapp.ico;
第二步:创建一个.rc文件,包含如下内容:
IDI_ICON1 ICON DISCARDABLE "myappico.ico"
第三步:
如果你是使用qmake生成makefile文件,那么你只需要在工程文件myapp.pro文件中写入如下内容:
RC_FILE = myapp.rc
再次编译程序,即可达到效果
3、显示图片Label
- {
- QLabel *logoLabel;
- logoLabel = new QLabel();
- logoLabel->setObjectName(QString::fromUtf8("logolabel"));
- logoLabel->setGeometry(QRect(160, 110, 128, 128));
- logoLabel->setPixmap(QPixmap(QString::fromUtf8(":/images/logo.png")));
- logoLabel->setScaledContents(true);
- }
4、字体更改
- {
- QFont font;
- font.setPointSize(40);
- font.setBold(true);
- font.setWeight(75);
- QLabel *fontLabel = new QLabel();
- fontLabel->setFont(font);
- }
5、文本颜色更改
- void Widget::changeColor(QWidget *window, QColor color)
- {
- QPalette *palette = new QPalette();
- palette->setColor(QPalette::Text, color);
- window->setPalette(*palette);
- delete palette;
- }
6、时间日期转QString
- QString date_str = QDate::currentDate().toString(QString("yyyyMMdd")); //"yyyyMMdd"为转换格式,该格式转换后日期如"20121205"
- QString time_str = QTime::currentTime().toString(QString("hhmmss")); //"hhmmss"为转换格式,该格式转换后时间如"080359"
7、Qt界面风格
- qApp>setStyle(new QPlastiqueStyle); //在window中main函数中使用这句话会让界面快速的变得好看。
8、qobject_cast用法
该方法返回object向下的转型T,如果转型不成功则返回0,如果传入的object本身就是0则返回0。
使用场景:
当某一个Object emit一个signal的时候(即sender),系统会记录下当前是谁emit出这个signal的,所以在对应的slot里就可以通过 sender()得到当前是谁invoke了slot。有可能多个 Object的signal会连接到同一个signal(例如多个Button可能会connect到一个slot函数onClick()),因此这是就需要判断到底是哪个Object emit了这个signal,根据sender的不同来进行不同的处理.
在槽函数中:
QPushButton *button_tmp = qobject_cast<QPushButton *>(sender()); //信号的对象,向下转型为按钮类型
9、Qslider进入显示
- {
- slider = new QSlider;
- slider->setRange(0,100);
- slider->setTickInterval(10);
- slider->setOrientation(Qt::Horizontal);
- slider->setValue(100);
- slider->setVisible(false);
- connect(slider,SIGNAL(valueChanged(int)),this,SLOT(slotChanged(int)));
- }
- void PicTrans::enterEvent ( QEvent * )
- {
- slider->setVisible(true);
- }
- void PicTrans::leaveEvent(QEvent *)
- {
- slider->setVisible(false);
- }
10、Qt不重复随机数
- { //qt
- QTime time; time= QTime::currentTime();
- qsrand(time.msec()+time.second()*1000);
- qDebug() << qrand() % 100; //在0-100中产生出随机数
- }
- { //c语言
- srand(unsigned(time(0)));
- int number = rand() % 100; /*产生100以内的随机整数*/
- }
11、QSettings保存窗口状态
- void
- Settings::readSettings()
- {
- QSettings setting("MyPro","settings");
- setting.beginGroup("Dialog");
- QPoint pos = setting.value("position").toPoint();
- QSize size = setting.value("size").toSize();
- setting.endGroup();
- setting.beginGroup("Content");
- QColor color = setting.value("color").value<QColor>();
- QString text = setting.value("text").toString();
- setting.endGroup();
- move(pos);
- resize(size);
- QPalette p = label->palette();
- p.setColor(QPalette::Normal,QPalette::WindowText,color);
- label->setPalette(p);
- edit->setPlainText(text);
- }
- void
- Settings::writeSettings()
- {
- QSettings setting("MyPro","settings");
- setting.beginGroup("Dialog");
- setting.setValue("position",pos());
- setting.setValue("size",size());
- setting.endGroup();
- setting.beginGroup("Content");
- setting.setValue("color",label->palette().color(QPalette::WindowText));
- setting.setValue("text",edit->toPlainText());
- setting.endGroup();
- }
12、两个信号连接同一个槽
参考上述的例8。- connect(ui->btn_ok, SIGNAL(clicked()), this, SLOT(slotClick()));
- connect(ui->btn_cancel, SIGNAL(clicked()), this, SLOT(slotClick()));
- void Dialog::slotClick()
- {
- QPushButton* btn = dynamic_cast<QPushButton*>(sender());
- if (btn == ui->btn_ok) {
- qDebug() << "button:" <<ui->btn_ok->text();
- }
- else if (btn == ui->btn_cancel) {
- qDebug() << "button:" <<ui->btn_cancel->text();
- }
- }
有时button类型不同时,可以分别判断对象指针。
- void Dialog::slotClick()
- {
- ;
- if ((QPushButton* btn = dynamic_cast<QPushButton*>(sender())) == ui->btn_ok) {
- qDebug() << "button:" <<ui->btn_ok->text();
- }
- else if ((QRadioButton* btn = dynamic_cast<QRadioButton*>(sender())) == ui->btn_cancel) {
- qDebug() << "button:" <<ui->btn_cancel->text();
- }
- }
13、对话框操作
视图模型中, 设置视图不可编辑 setEditTriggers(QAbstractItemView::NoEditTriggers);对话框去掉右上角的问号: setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);
对话框加上最小化按钮: setWindowFlags(windowFlags()|Qt::WindowMinimizeButtonHint);
14、多语言国际化
1.pro工程文件里面添加 TRANSLATIONS+=mypro.ts2.选择Qt Creator环境的菜单栏 工具->外部->Qt语言家->更新翻译
3.桌面开始菜单里面Qt目录打开 Linguist工具
4.Linguist工具加载生成好的mypro.ts文件
5.填好翻译, 保存, Release, 就生成好编译后的qm文件
6.在工程的源文件中, 这样加载qm文件:
QTranslator translator;
QLocale locale;
if(QLocale::Chinese == locale.language())
{//中文环境
translator.load("mypro.qm"); //中文
a.installTranslator(&translator);
}//否则默认用英文
14、item-view控件多选后删除
- setSelectionMode(QAbstractItemView::MultiSelection); //不按ctrl键即可多选
- setSelectionMode(QAbstractItemView::ExtendedSelection); //按ctrl键多选
- QModelIndexList indexList = ui->listvFiles->selectionModel()->selectedRows();
- QModelIndex index;
- int i = 0;
- foreach(index, indexList)
- {
- this->modFileLists.removeRow(index.row() - i);
- ++i;
- }
15、QByteArray存入中文时乱码
- QByteArray bytes;
- bytes.append(this->modFileLists.data(this->modFileLists.index(i), Qt::DisplayRole).toString()); //乱码
- QByteArray bytes;
- bytes.append(this->modFileLists.data(this->modFileLists.index(i), Qt::DisplayRole).toString().toLocal8Bit()); //正常
16、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;
- }
- }
17、Qt递归遍历文件和文件夹
- //递归遍历文件夹,找到所有的文件
- //_filePath:要遍历的文件夹的文件名
- int FindFile(const QString& _filePath)
- {
- QDir dir(_filePath);
- if (!dir.exists()) {
- return -1;
- }
- //取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)
- dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);
- //文件夹优先
- dir.setSorting(QDir::DirsFirst);
- //转化成一个list
- QFileInfoList list = dir.entryInfoList();
- if(list.size()< 1 ) {
- return -1;
- }
- int i=0;
- //递归算法的核心部分
- do{
- QFileInfo fileInfo = list.at(i);
- //如果是文件夹,递归
- bool bisDir = fileInfo.isDir();
- if(bisDir) {
- FindFile(fileInfo.filePath());
- }
- else{
- //bool isDll = fileInfo.fileName().endsWith(".dll");
- qDebug() << fileInfo.filePath() << ":" <<fileInfo.fileName();
- }//end else
- i++;
- } while(i < list.size());
- }
- int FindFile(const QString& _filePath)
- {
- QDir dir(_filePath);
- if (!dir.exists()) {
- return -1;
- }
- //取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)
- dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);
- //文件夹优先
- dir.setSorting(QDir::DirsFirst);
- //转化成一个list
- QFileInfoList list = dir.entryInfoList();
- QStringList infolist = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
- if(list.size()< 1 ) {
- return -1;
- }
- int i=0;
- //递归算法的核心部分
- do{
- QFileInfo fileInfo = list.at(i);
- //如果是文件夹,递归
- bool bisDir = fileInfo.isDir();
- if(bisDir) {
- FindFile(fileInfo.filePath());
- }
- else{
- for(int m = 0; m <infolist.size(); m++) {
- //这里是获取当前要处理的文件名
- qDebug() << infolist.at(m);
- }
- break;
- }//end else
- i++;
- } while(i < list.size());
- }
18、Qt调用外部程序
- QStringList list;
- list<< "-t" << "--s" << "3600";
- QProcess::startDetached("Shutdown.exe",list);
- // QProcess::execute("Shutdown.exe",list);
可以查看外部程序返回的数据,输出结果。
- QProcess *pProces = new QProcess(this);
- connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));
- QStringList list;
- pProces->start("Shutdown.exe", list);
- void on_read()
- {
- QProcess *pProces = (QProcess *)sender();
- QString result = pProces->readAll();
- QMessageBox::warning(NULL, "", result);
- }
- QProcess p(0);
- p.start("route");
- p.waitForStarted();
- p.waitForFinished();
- qDebug()<<QString::fromLocal8Bit(p.readAllStandardError());
- QProcess p(0);
- p.start("ipconfig");
- p.waitForStarted();
- p.waitForFinished();
- qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());
(4)执行的是命令,如dir
- QProcess p(0);
- p.start("cmd");
- p.waitForStarted();
- p.write("dir\n");
- p.closeWriteChannel();
- p.waitForFinished();
- qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());
- QProcess p(0);
- p.start("cmd", QStringList()<<"/c"<<"dir");
- p.waitForStarted();
- p.waitForFinished();
- qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());
18、当前系统Qt所支持的字体
系统支持的所有字体的名称
- QFontDatabase database;
- foreach (QString strFamily, database.families()) {
- qDebug() <<"family:" << strFamily;
- foreach (QString strStyle, database.styles(strFamily)) {
- qDebug() << "-----style:" << strStyle;
- }
- }
- QFontDatabase database;
- foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))
- {
- qDebug()<<family;
- }
中文乱码:
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
19、IP正则匹配
- {
- /**********judge ip**********/
- QRegExp regExp("(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)");
- if(!regExp.exactMatch(ip)) {
- flag = false;
- ipAddressLineEdit->clear();
- ipAddressLineEdit->setError(true);
- ipAddressLineEdit->setHint(tr(" IpAddress is wrong"));
- }
- else flag = true;
- }
20、QPushButton去掉虚线框
- QPushButton:focus{padding: -1;}
- /*
- {border-style:flat;} //扁平
- button->setFlat(true)
- ui->checkBox->setFocusPolicy(Qt::NoFocus);
- ui->radioButton->setFocusPolicy(Qt::NoFocus);
- */
21、Qt临时获得root权限
(1)getuid()函数返回一个调用程序的真实用户ID,使用root执行程序时getuid()返回值为0。
- if (getuid() != 0)
- {
- QMessageBox::information(0, QString(QObject::tr("Warnning")),
- QString(QObject::tr("do not use root privage")),
- QString(QObject::tr("OK")));
- return -1;
- }
使用getuid()/setuid()函数,让程序临时获得root权限代码。
- /*
- * gcc -g -o test-uid test-uid.c
- * chown root.root ./test-uid
- * chmod 4755 ./test-uid
- * ls -al /var
- * */
- #include<stdio.h>
- #include<unistd.h>
- #include<sys/types.h>
- int main(int argc, char **argv)
- {
- // save user uid
- uid_t uid = getuid();
- // get root authorities
- if(setuid(0)) {
- printf("test-uid: setuid error");
- return -1;
- }
- printf("test-uid: run as root, setuid is 0\n");
- system ("touch /var/testroot");
- // rollback user authorities
- if(setuid(uid)) {
- printf("test-uid: setuid error");
- return -1;
- }
- printf("test-uid: run as user, setuid is %d\n", uid);
- system ("touch /var/testuser");
- return 0;
- }
- Qt总结(整理)
- Qt浅谈之总结(整理)
- Qt浅谈之总结(整理)
- Qt Charts 组成(Qt 5.9发布后整理总结)
- QT整理
- QT开源绘图项目总结与整理
- 整理总结
- QT简介(未整理)
- 思绪整理--Qt入门
- QT Pro关键字 整理
- QT Pro关键字 整理
- QT学习资料整理
- qt 未整理
- QT笔记整理
- Qt容器类整理
- Qt 国际化(整理)
- qt画图知识点整理
- Qt资源整理
- json 基础知识
- java多线程之引入Runnable
- Android error:Please ensure that adb is correctly located at '...\adb.exe' and can be executed.
- GET,POST,PUT,DELETE的区别
- 轻松获取LAMP,LNMP环境编译参数配置 2
- Qt总结(整理)
- STL源码—list transfer merge reverse(TT)
- nio选择器
- Targets
- Qt浅谈之内置标准对话框
- STL源码—deque(TT)
- SOA下的MOCK接口
- 2015新的开始
- [leetcode 95] Unique Binary Search Trees II