用QT制作界面的时候可能有时一个效果花了好些时间也调不出来,可能只是一个小细节没有注意到,这不免浪费时间,影响写程序的进度不说,挺打击人的。本来写程序就挺无聊,再经常遇上些个这类事故,严重打击信心。所以,今天在这里写篇文章,也当是备忘录吧,以备查阅,今后将不断更新。同时也希望路过的Qter能把自己知道的一些小技巧贴上来,分享分享。
1. 去掉窗口标题栏(包括最大化,最小化和关闭按钮)
setWindowFlags(Qt::FramelessWindowHint);
2. 关闭窗体时析构
setAttribute(Qt::WA_DeleteOnClose );
3. 隐藏最大化、最小化按钮
setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint & ~Qt::WindowMinimizeButtonHint);
4. 设置窗体屏幕居中
QDesktopWidget *desktop = QApplication::desktop();
this->move((desktop->width()-this->size().width())/2,(desktop->height()-this->size().height())/2);
5. 获得信号发送者的指针(仅用于信号/槽处于同一线程的Qt::DirectConnection连接)
QObject *sender_ptr = sender(); // 强转成你想要的指针类型。
6. qRound/qRound64 函数: 对浮点数取整,四舍五入
7. qFuzzyCompare 函数:线程安全的浮点数模糊比较,处理了浮点数的精度误差问题
8. 给标题栏加“未保存*”的标记:
setWindowModified(bool);
9. 清空QTableWidget 中的所有表项:
QTableWidget *table_widget = new QTableWidget;
table_widget->clearContents();
10. QUrl不能打开中文路径和带有空格的路径下的文件问题解决:
QString file_path;
file_path = file_path.toUtf8();
QDesktopServices::openUrl(QUrl::fromLocalFile(file_path));
11. Widget 添加背景图片(背景图片中没有像素的地方透明)
QString dir = getImagesDir();
dir += "bg.png";
QPalette pal = this->palette();
QPixmap pixmap(dir);
this->resize(pixmap.size());
pal.setBrush(QPalette::Background, QBrush(pixmap));
this->setMask(pixmap.mask());
pal.setColor(QPalette::Base, QColor(200, 243, 154));
setPalette(pal);
setAutoFillBackground(true);
12. 不规则按钮的实现
首先要制作好图片,建议用.bmp格式,把要显示的形状涂成黑色,不显示的部分涂上纯白色,然后把图片载入资源文件。所有这些准备操作完成之后,调用以下代码即可。
button_->setMask(QBitmap(dir + "/icon/mask.bmp"));