公司让负责qt界面开发,但是接触qt又不久,现将在项目中遇到的一些问题汇总下,一为了避免自己忘记,二希望能帮助到他人。
1.在程序关闭窗口时,显示提示窗口:
qt中有很多信号和相应的槽函数,上述问题需要拦截关闭窗口信息QWidget::close(),QWidget::closeEvent( QCloseEvent * event )重写,即对代码如下:
void QWidget::closeEvent ( QCloseEvent * event )
{
QMessageBox::StandardButton button;
button = QMessageBox::question(this,tr("退出程序"),
QString(tr("警告:程序正在运行中,是否结束操作退出?")),
QMessageBox::Yes | QMessageBox::No);
if(button == QMessageBox::No)
{
event->ignore();
}
else if(button == QMessageBox::Yes)
{
event->accept();
}
}
2.在程序中开辟线程,需要在程序结束前结束线程,如果在程序中动态开辟了内存,需要考虑内存释放问题:
(1).开启线程, 如果程序中需要使用线程,可以通过自定义线程,继承QThread,重写QThread::run(),run()函数体内就是线程的执行过程,记得在函数最后加上事件循环QThread::exec(),再通过QThread::start()函数开启线程。
(2).结束线程,先调用QThread::exit(),结束线程事件循环,再调用QThread::wait()来阻塞主程序知道线程结束运行。
(3).内存释放问题,如果是在线程中开辟的动态内存,需要在线程结束前手动释该内存,可以在析构函数中调用delete来删除,再调用(2)中退出线程,这些可以在析构函数中实现。
补充: qt中当parent销毁时,会自动delete child对象,而对于没有parent的对象需要手动释放。
3.信号和槽问题:
(1).信号是某个对象的信号,槽也是某个对象的槽,信号和槽通过QObject::connect()联系在一起,这个联系可以再很多地方都可建立,只要确定
再调用QObject::connect()函数前,该信号和槽的对象已经存在。
(2