Qt学习笔记:小技巧
来源:互联网 发布:工控编程吧网址 编辑:程序博客网 时间:2024/05/24 05:30
本篇笔记记录我使用当中发现的种种我认为值得记录的要点,可能比较凌乱,新人也可能看得糊涂,不过反正我自己看,先将就着吧,以后有时间再做整理。
使用系统默认程序打开文件
Qt提供了两个类,可以实现这个功能
QProcess Class
QDesktopServices Class
QProcess Class
基本用法:
void QProcess::start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite)
QString program = "./path/to/Qt/examples/widgets/analogclock";QStringList arguments;arguments << "-style" << "fusion";QProcess *myProcess = new QProcess();myProcess->start(program, arguments);
[static] int QProcess::execute(const QString &program, const QStringList &arguments)
QString program = "./path/to/Qt/examples/widgets/analogclock";QStringList arguments;arguments << "-style" << "fusion";QProcess::execute(program, arguments);
实现:
利用window中的explorer.exe
QStringList arguments;arguments<<"c:\\123.txt";QProcess *myProcess = new QProcess();myProcess->start("explorer", arguments);QProcess::execute("explorer", arguments);
使用explorer时,路径必须使用反斜杠!但是qt取得的路径一般都是正斜杠。所以还需要再转一次。
[static] QString QDir::toNativeSeparators(const QString &pathName)
QProcess::execute("explorer " + QDir::toNativeSeparators(d.absolutePath()));
QDesktopServices Class
QDesktopServices Class 能够访问常用的桌面服务。
一般来说,桌面环境都会提供这样的服务,使用户能够按照用户自定义的方式执行诸如打开网页,音乐,文件等操作。
简单来讲,当你双击某个文件,系统就会自动调用默认程序打开对应文件,而QDesktopServices Class就提供了访问这种服务的方法。
[static] bool QDesktopServices::openUrl(const QUrl &url)
QDesktopServices::openUrl(QUrl("c:/path/to/Qt/examples/widgets/123.txt"));QDesktopServices::openUrl(QUrl::fromLocalFile("c:/path/examples/widgets/123.txt"));
.ui文件转换成.py文件
pyuic.py可以将Designer生成的ui文件转换为python代码,如果加上参数 -x 则生成的代码自带主函数,可以直接运行。
要在自定义类中使用,方法如下:
import XXXXXclass MyWindow(QtGui.QMainWindow): def __init__(self): super(MyWindow, self).__init__() self.ui = XXXXX.Ui_MainWindow self.ui.setupUi(self)if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
我们可以看到,通过uic生成的代码其实并不是一个真正的QMainWindow对象,它只是一个辅助函数,能够对QMainWindow对象进行配置
QLayout布局管理
QLayout的继承图如下:
对于像我这样的新手,往往搞不定Layout,结果就是控件的位置各种凌乱,即使一开始正确,主窗口大小一变,要么就乱,要么控件无法随窗口大小改变。
有两个方法非常重要:
void QWidget::setLayout(QLayout * layout)
void QLayout::addWidget(QWidget * w)
如果你够细心,你就会发现,QWidget这个类里面是没有addWidget这个方法的,而QLayout里面却有,这就说明,Qt的设计者从一开始,就不想让你直接在Widget下面直接添加Widget,你必须通过Layout来达到你的目的。
所以说正确的做法应该是:
QLayout用来管理QWidget,而同时QWidget又用来放置QLayout。
每一个QWidget永远都要处于QLayout的控制之下,而每一个QLayout里面都要有至少一个QWidget,他们就是鱼和水的关系。
还有一点要注意的是,网上大多数教程都是以QWidget为基础,但是有的时候我们需要以QMainWindow为基础,这个时候就必须在QMainWindow下面额外放入以个QWidget,并且设置为CentralWidget,然后在此之下新建一个mainlayout
centralwidget = QWidget()QMainWindow.setCentralWidget(centralwidget)mainlayout = QVBoxLayout(centralwidget)mainlayout.addWidget(...)
这样就相当于在正常的Widget下套上一层MainWindow的衣服,而Widget改怎么操作就怎么操作
设置布局的大小改变模式
void setSizeConstraint(SizeConstraint)
QPixmap
Qt.transparent 就是透明色,如果要建立透明的图,使用它
下面是组合多张pixmap的例子:
def mergePix(): pix = QPixmap(Population.SIZE, Population.SIZE) pix.fill(Qt.transparent) painter = QPainter(self.pix) p2 = QPixmap("image/neuron2.png").scaled(Population.neuron_size, Population.neuron_size) p3 = QPixmap("image/neuron3.png").scaled(Population.neuron_size, Population.neuron_size) painter.drawPixmap(Population.neuron_size, 0, p2) painter.drawPixmap(0, Population.neuron_size, p2) painter.drawPixmap(Population.neuron_size * 2, Population.neuron_size, p2) painter.drawPixmap(Population.neuron_size, Population.neuron_size * 2, p2) painter.drawPixmap(Population.neuron_size, Population.neuron_size, p3) pix.save("image/population.png")
调整QMainWindow的大小
由于要支持跨平台,一些基于平台的功能就不能直接写入类库,导致了使用 Qt 时一些功能需要变通的方法来实现。
比如:Qt 并不支持直接禁止用户调整窗口大小。变通的方法是将窗口的最小大小和最大大小设置为一样。
widget->setMinimumSize(10, 10);
widget->setMaximumSize(10, 10);
或者
widget->setFixedSize(10, 10);
PS:暂时不知道如何保留最小化按钮,也就是说,要么最大最小都有,要么都没有
下面是为sizepolicy的各种属性介绍
- Qt学习笔记:小技巧
- QT学习小技巧
- QT学习小技巧
- QT学习小技巧
- PHP学习笔记。小技巧
- Qt学习笔记--编程技巧总结
- Qt学习笔记--编程技巧总结
- Qt学习笔记--编程技巧总结
- Qt小技巧
- Qt 小技巧
- Qt 小技巧
- Qt 小技巧2
- 转载:QT小技巧
- QT小技巧
- QT小技巧
- QT小技巧
- QT小技巧
- QT 小技巧
- iOS layoutSubviews的调用
- Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
- HashPasswordForStoringInConfigFile 已过时
- intellij 15 搭建破解 继承jrebel for mac
- Stream语法详解
- Qt学习笔记:小技巧
- AutoCompleteTextView用法总结
- Sublime Text 3 搭建C++开发环境与插件
- Android ServiceConnection
- JS错误
- 【2016百度之星资格赛】吐槽
- EventBus使用详解(一)——初步使用EventBus
- 算法时间复杂度计算
- android studio2.1创建项目的两个坑