1.qDebug重定向
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
static QMutex mutex;
mutex.lock();
QString text;
switch((int)type)
{
case QtDebugMsg:
text = QString("Debug:");
break;
case QtWarningMsg:
text = QString("Warning:");
break;
case QtCriticalMsg:
text = QString("Critical:");
break;
case QtFatalMsg:
text = QString("Fatal:");
break;
case QtInfoMsg:
text = QString("Info:");
break;
default:
break;
}
QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QString current_date = QString("(%1)").arg(current_date_time);
//QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
QString message = QString("%1 %2").arg(text).arg(context_info);
message.append(msg);// .arg(msg).arg(current_date);
message.append(current_date);
QFile file("log_update.txt");
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream text_stream(&file);
text_stream << message << "\r\n";
file.flush();
file.close();
mutex.unlock();
}
int main(int argc, char *argv[])
{
qInstallMessageHandler(outputMessage);
QApplication a(argc, argv);
dealogin w;
w.show();
return a.exec();
}
release版本下Pro下要加DEFINES += QT_MESSAGELOGCONTEXT,否则输出重定向中没有文件名和行号。
2.QT线程终止不要用terminate方法 (线程暂停与重启)
Warning: This function is dangerous and its use is discouraged. The thread can be terminated at any point in its code path. Threads can be terminated while modifying data. There is no chance for the thread to clean up after itself, unlock any held mutexes, etc. In short, use this function only if absolutely necessary.